# cmd_twitch.py from twitchio.ext import commands import globals from cmd_common import common_commands as cc from modules.permissions import has_permission from modules.utility import handle_help_command def setup(bot, db_conn=None): """ This function is called to load/attach commands to the `bot`. We also attach the db_conn and log so the commands can use them. """ @bot.command(name="greet") async def cmd_greet(ctx): result = cc.greet(ctx.author.display_name, "Twitch") await ctx.send(result) @bot.command(name="ping") async def cmd_ping(ctx): result = cc.ping() await ctx.send(result) @bot.command(name="howl") async def cmd_howl(ctx): response = cc.handle_howl_command(ctx) await ctx.send(response) @bot.command(name="hi") async def cmd_hi(ctx): user_id = str(ctx.author.id) # Twitch user ID user_roles = [role.lower() for role in ctx.author.badges.keys()] # "roles" from Twitch badges if not has_permission("hi", user_id, user_roles, "twitch"): return await ctx.send("You don't have permission to use this command.") await ctx.send("Hello there!") # @bot.command(name="acc_link") # @monitor_cmds(bot.log) # async def cmd_acc_link(ctx, link_code: str): # """Handles the Twitch command to link accounts.""" # from modules import db # twitch_user_id = str(ctx.author.id) # twitch_username = ctx.author.name # # Check if the link code exists # result = db.run_db_operation( # bot.db_conn, "read", # "SELECT DISCORD_USER_ID FROM link_codes WHERE LINK_CODE = ?", (link_code,), # bot.log # ) # if not result: # await ctx.send("Invalid or expired link code. Please try again.") # return # discord_user_id = result[0][0] # # Store the Twitch user info in the users table # db.run_db_operation( # bot.db_conn, "update", # "UPDATE users SET twitch_user_id = ?, twitch_username = ?, datetime_linked = CURRENT_TIMESTAMP WHERE discord_user_id = ?", # (twitch_user_id, twitch_username, discord_user_id), bot.log # ) # # Remove the used link code # db.run_db_operation(bot.db_conn, "write", "DELETE FROM link_codes WHERE LINK_CODE = ?", (link_code,), bot.log) # # Notify the user # await ctx.send(f"✅ Successfully linked Discord user **{discord_user_id}** with Twitch account **{twitch_username}**.") @bot.command(name="quote") async def cmd_quote(ctx: commands.Context): if not bot.db_conn: return await ctx.send("Database is unavailable, sorry.") parts = ctx.message.content.strip().split() args = parts[1:] if len(parts) > 1 else [] def get_twitch_game_for_channel(chan_name): # Placeholder for your actual logic to fetch the current game return "SomeGame" result = await cc.handle_quote_command( db_conn=bot.db_conn, is_discord=False, ctx=ctx, args=args, get_twitch_game_for_channel=get_twitch_game_for_channel ) await ctx.send(result) @bot.command(name="help") async def cmd_help(ctx): parts = ctx.message.content.strip().split() cmd_name = parts[1] if len(parts) > 1 else None await handle_help_command(ctx, cmd_name, bot, is_discord=False) ###################### # 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: globals.log(f"Registering commands for Twitch: {list(bot.commands.keys())}", "DEBUG") except Exception as e: globals.log(f"An error occured while printing registered commands for Twitch: {e}", "WARNING")