OokamiPupV2/cmd_twitch.py

114 lines
4.2 KiB
Python

# cmd_twitch.py
from twitchio.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):
"""
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")
@monitor_cmds(bot.log)
async def cmd_greet(ctx):
result = cc.greet(ctx.author.display_name, "Twitch")
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")
async def cmd_howl(ctx):
response = cc.handle_howl_command(ctx)
await ctx.send(response)
@bot.command(name="hi")
@monitor_cmds(bot.log)
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")
@monitor_cmds(bot.log)
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"
await cc.handle_quote_command(
db_conn=bot.db_conn,
log_func=bot.log,
is_discord=False,
ctx=ctx,
args=args,
get_twitch_game_for_channel=get_twitch_game_for_channel
)
@bot.command(name="help")
@monitor_cmds(bot.log)
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, 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:
bot.log(f"Registering commands for Twitch: {list(bot.commands.keys())}", "DEBUG")
except Exception as e:
bot.log(f"An error occured while printing registered commands for Twitch: {e}", "WARNING")