OokamiPupV2/cmd_discord.py

96 lines
3.1 KiB
Python

# 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 <text>
!quote remove <id>
!quote <id>
"""
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:
bot.log(f"Registering commands for Discord: {list(bot.commands.keys())}", "DEBUG")
except Exception as e:
bot.log(f"An error occured while printing registered commands for Discord: {e}", "WARNING")