# cmd_discord.py from discord.ext import commands from cmd_common import common_commands as cc from modules.permissions import has_permission from modules.utility import handle_help_command from modules.utility import monitor_cmds def setup(bot, db_conn=None, log=None): """ Attach commands to the Discord bot, store references to db/log. """ @bot.command(name="greet") @monitor_cmds(bot.log) async def cmd_greet(ctx): result = cc.greet(ctx.author.display_name, "Discord") await ctx.send(result) @bot.command(name="ping") @monitor_cmds(bot.log) async def cmd_ping(ctx): result = cc.ping() await ctx.send(result) @bot.command(name="howl") @monitor_cmds(bot.log) async def cmd_howl(ctx): """Calls the shared !howl logic.""" result = cc.howl(ctx.author.display_name) await ctx.send(result) @bot.command(name="reload") @monitor_cmds(bot.log) async def cmd_reload(ctx): """ Dynamically reloads Discord commands. """ try: import cmd_discord import importlib importlib.reload(cmd_discord) cmd_discord.setup(bot) await ctx.send("Commands reloaded!") except Exception as e: await ctx.send(f"Error reloading commands: {e}") @bot.command(name="hi") @monitor_cmds(bot.log) async def cmd_hi(ctx): user_id = str(ctx.author.id) user_roles = [role.name.lower() for role in ctx.author.roles] # Normalize to lowercase if not has_permission("hi", user_id, user_roles, "discord"): await ctx.send("You don't have permission to use this command.") return await ctx.send("Hello there!") @bot.command(name="quote") @monitor_cmds(bot.log) async def cmd_quote(ctx, *args): """ !quote !quote add !quote remove !quote """ if not bot.db_conn: return await ctx.send("Database is unavailable, sorry.") # Send to our shared logic await cc.handle_quote_command( db_conn=bot.db_conn, log_func=bot.log, is_discord=True, ctx=ctx, args=list(args), get_twitch_game_for_channel=None # None for Discord ) @bot.command(name="help") @monitor_cmds(bot.log) async def cmd_help(ctx, cmd_name: str = None): """ e.g. !help !help quote """ await handle_help_command(ctx, cmd_name, bot, is_discord=True, log_func=bot.log) ###################### # The following log entry must be last in the file to verify commands loading as they should ###################### # Debug: Print that commands are being registered try: command_names = [cmd.name for cmd in bot.commands] # Extract command names bot.log(f"Registering commands for Discord: {command_names}", "DEBUG") except Exception as e: bot.log(f"An error occured while printing registered commands for Discord: {e}", "WARNING")