2022-07-25 02:32:07 +02:00
|
|
|
import logging
|
2022-07-21 21:27:47 +02:00
|
|
|
from os import getenv
|
|
|
|
|
2022-07-21 20:50:23 +02:00
|
|
|
from naff import (
|
|
|
|
Client,
|
|
|
|
Intents,
|
|
|
|
listen,
|
|
|
|
slash_command,
|
|
|
|
InteractionContext,
|
|
|
|
)
|
2022-07-25 02:32:07 +02:00
|
|
|
from naff.api import events
|
2022-07-21 20:50:23 +02:00
|
|
|
from naff.models.discord.embed import (
|
|
|
|
Embed,
|
|
|
|
EmbedAuthor,
|
|
|
|
EmbedField,
|
|
|
|
EmbedFooter,
|
|
|
|
)
|
|
|
|
|
|
|
|
from dotenv import load_dotenv
|
2022-10-15 03:35:42 +02:00
|
|
|
from database import GuildSettings as GuildSettingsModel, JoinLeave
|
2022-07-21 20:50:23 +02:00
|
|
|
|
|
|
|
bot = Client(intents=Intents.ALL, debug_scope=387153131378835456)
|
|
|
|
|
|
|
|
|
|
|
|
@listen()
|
|
|
|
async def on_ready():
|
|
|
|
print(f"Bot '{bot.user.username}' is ready!")
|
|
|
|
print(f"This bot is owned by {bot.owner}")
|
|
|
|
|
2022-07-25 02:32:07 +02:00
|
|
|
for guild in bot.guilds:
|
|
|
|
guild_q = GuildSettingsModel.get_or_none(GuildSettingsModel.guild_id == guild.id)
|
|
|
|
if guild_q is None:
|
|
|
|
guild_q = GuildSettingsModel(guild_id=guild.id)
|
|
|
|
guild_q.save()
|
2022-10-15 03:35:42 +02:00
|
|
|
|
2022-07-21 20:50:23 +02:00
|
|
|
|
2022-07-25 02:32:07 +02:00
|
|
|
|
|
|
|
# @listen()
|
|
|
|
# async def on_message_create(event: MessageCreate):
|
|
|
|
# print(f"{event.message.author.username}: {event.message.content}")
|
|
|
|
|
|
|
|
@listen(events.MemberAdd)
|
|
|
|
async def on_member_join(event: events.MemberAdd):
|
|
|
|
joinleave_q: JoinLeave
|
|
|
|
joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id)
|
|
|
|
|
|
|
|
if joinleave_q.message_channel is None:
|
|
|
|
return
|
|
|
|
channel = await bot.fetch_channel(joinleave_q.message_channel)
|
|
|
|
|
|
|
|
if not joinleave_q.join_message_enabled:
|
|
|
|
return
|
|
|
|
|
|
|
|
if joinleave_q.join_message is None or joinleave_q.join_message == "":
|
|
|
|
await channel.send(
|
|
|
|
f"{event.member.mention} has joined the server!"
|
|
|
|
)
|
|
|
|
return
|
|
|
|
|
|
|
|
await channel.send(str(joinleave_q.join_message).format(member=event.member, guild=event.guild))
|
|
|
|
|
|
|
|
@listen(events.MemberRemove)
|
|
|
|
async def on_member_leave(event: events.MemberRemove):
|
|
|
|
joinleave_q: JoinLeave
|
|
|
|
joinleave_q, _ = JoinLeave.get_or_create(guild_id=event.guild.id)
|
|
|
|
|
|
|
|
if joinleave_q.message_channel is None:
|
|
|
|
return
|
|
|
|
channel = await bot.fetch_channel(joinleave_q.message_channel)
|
|
|
|
|
|
|
|
if not joinleave_q.leave_message_enabled:
|
|
|
|
return
|
|
|
|
|
|
|
|
if joinleave_q.leave_message is None or joinleave_q.leave_message == "":
|
|
|
|
await channel.send(
|
|
|
|
f"{event.member.mention} has left the server!"
|
|
|
|
)
|
|
|
|
return
|
|
|
|
|
|
|
|
await channel.send(str(joinleave_q.leave_message).format(member=event.member, guild=event.guild))
|
|
|
|
|
2022-07-21 20:50:23 +02:00
|
|
|
|
|
|
|
|
|
|
|
@slash_command(name="ping", description="Ping the bot")
|
|
|
|
async def ping_command(ctx: InteractionContext):
|
|
|
|
ctx.ephemeral = True
|
|
|
|
await ctx.send("Pong!")
|
|
|
|
|
2022-07-21 21:27:47 +02:00
|
|
|
|
2022-07-21 20:50:23 +02:00
|
|
|
@slash_command(name="bot-info", description="Get info about the bot")
|
|
|
|
async def bot_info_command(ctx: InteractionContext):
|
|
|
|
await ctx.send(
|
|
|
|
ephemeral=True,
|
|
|
|
embed=Embed(
|
|
|
|
title=f"{bot.user.username}",
|
|
|
|
description=f"This bot is owned by {bot.owner}",
|
2022-07-21 21:27:47 +02:00
|
|
|
color=0x00FF00,
|
2022-07-21 20:50:23 +02:00
|
|
|
timestamp=bot.user.created_at,
|
|
|
|
url=bot.user.avatar.as_url(),
|
|
|
|
author=EmbedAuthor(
|
|
|
|
name=bot.user.username,
|
|
|
|
icon_url=bot.user.avatar.as_url(),
|
|
|
|
),
|
|
|
|
footer=EmbedFooter(
|
|
|
|
text=f"Created at {bot.user.created_at}",
|
|
|
|
icon_url=bot.user.avatar.as_url(),
|
|
|
|
),
|
|
|
|
fields=[
|
|
|
|
EmbedField(
|
|
|
|
name="**Extensions**",
|
2022-07-25 02:32:07 +02:00
|
|
|
value=f"{', '.join(bot.ext.keys())}",
|
|
|
|
),
|
|
|
|
EmbedField(
|
|
|
|
name="**Guilds**",
|
|
|
|
value="\n".join([g.name for g in sorted(bot.guilds, key=lambda g: g.name)]),
|
|
|
|
),
|
2022-07-21 21:27:47 +02:00
|
|
|
],
|
2022-07-21 20:50:23 +02:00
|
|
|
),
|
|
|
|
)
|
|
|
|
|
2022-08-11 01:39:15 +02:00
|
|
|
def set_loglevel(level: str):
|
|
|
|
loglevel = logging.WARNING
|
2022-07-21 20:50:23 +02:00
|
|
|
|
2022-08-29 02:50:55 +02:00
|
|
|
match str(level).lower().strip():
|
|
|
|
case "d" | "debug":
|
2022-08-11 01:39:15 +02:00
|
|
|
loglevel = logging.DEBUG
|
2022-08-29 02:50:55 +02:00
|
|
|
case "i" | "info" | "information":
|
2022-08-11 01:39:15 +02:00
|
|
|
loglevel = logging.INFO
|
|
|
|
|
2022-08-29 02:50:55 +02:00
|
|
|
case "w" | "warn" | "warning":
|
2022-08-11 01:39:15 +02:00
|
|
|
loglevel = logging.WARNING
|
|
|
|
|
2022-08-29 02:50:55 +02:00
|
|
|
case "e" | "error":
|
2022-08-11 01:39:15 +02:00
|
|
|
loglevel = logging.ERROR
|
|
|
|
|
2022-08-29 02:50:55 +02:00
|
|
|
case "c" | "critical":
|
2022-08-11 01:39:15 +02:00
|
|
|
loglevel = logging.CRITICAL
|
|
|
|
|
|
|
|
case _:
|
|
|
|
loglevel = logging.WARNING
|
|
|
|
|
|
|
|
logging.basicConfig(level=loglevel)
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
load_dotenv() # Load environment variables from .env file
|
|
|
|
set_loglevel(getenv("HEIMDALLR_LOGLEVEL"))
|
|
|
|
|
|
|
|
# Create basic tables
|
2022-07-25 02:32:07 +02:00
|
|
|
GuildSettingsModel.create_table()
|
|
|
|
JoinLeave.create_table()
|
|
|
|
|
2022-08-11 01:39:15 +02:00
|
|
|
# Load extensions
|
2022-10-15 02:51:21 +02:00
|
|
|
bot.load_extension("heimdallr.commands.admin")
|
2022-10-15 03:35:42 +02:00
|
|
|
bot.load_extension("heimdallr.commands.gatekeep")
|
2022-10-15 02:51:21 +02:00
|
|
|
bot.load_extension("heimdallr.commands.quote")
|
|
|
|
bot.load_extension("heimdallr.commands.infractions")
|
|
|
|
bot.load_extension("heimdallr.commands.self_roles")
|
|
|
|
bot.load_extension("heimdallr.commands.polls")
|
|
|
|
bot.load_extension("heimdallr.commands.bot_messages")
|
2022-07-21 20:50:23 +02:00
|
|
|
bot.start(getenv("DISCORD_TOKEN"))
|
2022-08-11 01:39:15 +02:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2022-10-15 03:35:42 +02:00
|
|
|
main()
|