Make a child class for Client and use that, otherwise "base" listeners and commands won't work.

This commit is contained in:
Vegard Berg 2023-02-06 20:20:20 +01:00
parent bc8976590d
commit 09674aa86b
1 changed files with 112 additions and 86 deletions

View File

@ -7,6 +7,9 @@ from naff import (
listen, listen,
slash_command, slash_command,
InteractionContext, InteractionContext,
AuditLogEventType,
AuditLogEntry,
RoleSelectMenu,
) )
from naff.api import events from naff.api import events
from naff.models.discord.embed import ( from naff.models.discord.embed import (
@ -19,13 +22,13 @@ from naff.models.discord.embed import (
from dotenv import load_dotenv from dotenv import load_dotenv
from database import GuildSettings as GuildSettingsModel, JoinLeave from database import GuildSettings as GuildSettingsModel, JoinLeave
bot = Client(intents=Intents.ALL, debug_scope=387153131378835456) class HeimdallrClient(Client):
@listen() @listen()
async def on_ready(): async def on_ready(self):
print("------------------------------------")
print(f"Bot '{bot.user.username}' is ready!") print(f"Bot '{bot.user.username}' is ready!")
print(f"This bot is owned by {bot.owner}") print(f"This bot is owned by {bot.owner}")
print("------------------------------------")
for guild in bot.guilds: for guild in bot.guilds:
guild_q = GuildSettingsModel.get_or_none(GuildSettingsModel.guild_id == guild.id) guild_q = GuildSettingsModel.get_or_none(GuildSettingsModel.guild_id == guild.id)
@ -34,13 +37,8 @@ async def on_ready():
guild_q.save() guild_q.save()
# @listen()
# async def on_message_create(event: MessageCreate):
# print(f"{event.message.author.username}: {event.message.content}")
@listen(events.MemberAdd) @listen(events.MemberAdd)
async def on_member_join(event: events.MemberAdd): async def on_member_join(self, event: events.MemberAdd):
joinleave_q: JoinLeave joinleave_q: JoinLeave
joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id) joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id)
@ -60,10 +58,28 @@ async def on_member_join(event: events.MemberAdd):
await channel.send(str(joinleave_q.join_message).format(member=event.member, guild=event.guild)) await channel.send(str(joinleave_q.join_message).format(member=event.member, guild=event.guild))
@listen(events.MemberRemove) @listen(events.MemberRemove)
async def on_member_leave(event: events.MemberRemove): async def on_member_leave(self, event: events.MemberRemove):
joinleave_q: JoinLeave joinleave_q: JoinLeave
joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id) joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id)
guildsettings_q: GuildSettingsModel
guildsettings_q, _ = GuildSettingsModel.get_or_create(guild_id=event.guild.id)
entry: AuditLogEntry
async for entry in event.guild.audit_log_history(
action_type=AuditLogEventType.MEMBER_KICK,
limit=10
):
if (entry.target_id != event.member.id or
guildsettings_q.admin_channel is None):
continue
channel = await bot.fetch_channel(guildsettings_q.admin_channel)
await channel.send(f"{event.member.mention} was kicked with reason: {entry.reason}")
break
if joinleave_q.message_channel is None: if joinleave_q.message_channel is None:
return return
channel = await bot.fetch_channel(joinleave_q.message_channel) channel = await bot.fetch_channel(joinleave_q.message_channel)
@ -82,13 +98,15 @@ async def on_member_leave(event: events.MemberRemove):
@slash_command(name="ping", description="Ping the bot") @slash_command(name="ping", description="Ping the bot")
async def ping_command(ctx: InteractionContext): async def ping_command(self, ctx: InteractionContext):
ctx.ephemeral = True ctx.ephemeral = True
await ctx.send("Pong!") await ctx.send("Pong!",
components=RoleSelectMenu(placeholder="HONK")
)
@slash_command(name="bot-info", description="Get info about the bot") @slash_command(name="bot-info", description="Get info about the bot")
async def bot_info_command(ctx: InteractionContext): async def bot_info_command(self, ctx: InteractionContext):
await ctx.send( await ctx.send(
ephemeral=True, ephemeral=True,
embed=Embed( embed=Embed(
@ -118,6 +136,14 @@ async def bot_info_command(ctx: InteractionContext):
), ),
) )
bot = HeimdallrClient(intents=Intents.ALL, debug_scope=387153131378835456,
sync_interactions=True,
fetch_members=True,
)
def set_loglevel(level: str): def set_loglevel(level: str):
loglevel = logging.WARNING loglevel = logging.WARNING