matchy/py/matchy.py

71 lines
1.8 KiB
Python
Executable file

"""
matchy.py - Discord bot that matches people into groups
"""
import logging
import discord
from discord.ext import commands
import config
import state
import cog
import match_button
State = state.load_from_file()
logger = logging.getLogger("matchy")
logger.setLevel(logging.INFO)
intents = discord.Intents.default()
intents.message_content = True
intents.members = True
bot = commands.Bot(command_prefix='$',
description="Matchy matches matchees", intents=intents)
@bot.event
async def setup_hook():
await bot.add_cog(cog.MatchyCog(bot, State))
# TODO: This line feels like it should be in the cog?
bot.add_dynamic_items(match_button.DynamicGroupButton)
@bot.event
async def on_ready():
logger.info("Logged in as %s", bot.user.name)
def owner_only(ctx: commands.Context) -> bool:
"""Checks the author is an owner"""
return State.get_user_has_scope(ctx.message.author.id, state.AuthScope.OWNER)
@bot.command()
@commands.dm_only()
@commands.check(owner_only)
async def sync(ctx: commands.Context):
"""Handle sync command"""
msg = await ctx.reply("Reloading state...", ephemeral=True)
global State
State = state.load_from_file()
logger.info("Reloaded state")
await msg.edit(content="Syncing commands...")
synced = await bot.tree.sync()
logger.info("Synced %s command(s)", len(synced))
await msg.edit(content="Done!")
@bot.command()
@commands.dm_only()
@commands.check(owner_only)
async def close(ctx: commands.Context):
"""Handle restart command"""
await ctx.reply("Closing bot...", ephemeral=True)
logger.info("Closing down the bot")
await bot.close()
if __name__ == "__main__":
handler = logging.StreamHandler()
bot.run(config.Config.token, log_handler=handler, root_logger=True)