1
0
Fork 0
mirror of https://code.lenaisten.de/Lenaisten/lenaverse-bot.git synced 2024-11-22 15:03:01 +00:00
lenaverse-bot/lenaverse_bot/core/verein.py

65 lines
1.9 KiB
Python

import functools
import logging
import discord
from .config import CONFIG, FileCommand, InfoCommand
_logger = logging.getLogger(__name__)
def reply_private(interaction: discord.Interaction, name: str) -> bool:
_logger.debug(f"User {interaction.user.name}({interaction.user.id}) used /{name}")
return interaction.channel_id not in CONFIG.ev_info.channels
@functools.singledispatch
def make_command(command) -> discord.app_commands.Command:
raise NotImplementedError
@make_command.register
def _(command: FileCommand) -> discord.app_commands.Command:
@discord.app_commands.command(
name=CONFIG.command_prefix + command.name,
description=command.description,
)
async def cmd(interaction: discord.Interaction) -> None:
if (file := await command.as_discord_file) is not None:
await interaction.response.send_message(
content=command.content,
suppress_embeds=True,
ephemeral=reply_private(interaction, command.name),
file=file,
)
else:
await interaction.response.send_message(
content=CONFIG.command_failed,
ephemeral=True,
)
return cmd
@make_command.register
def _(command: InfoCommand) -> discord.app_commands.Command:
@discord.app_commands.command(
name=CONFIG.command_prefix + command.name,
description=command.description,
)
async def cmd(interaction: discord.Interaction) -> None:
await interaction.response.send_message(
content=command.content,
suppress_embeds=True,
ephemeral=reply_private(interaction, command.name),
)
return cmd
COMMANDS = [
make_command(attr)
for name in CONFIG.ev_info.model_dump().keys()
if isinstance(attr := getattr(CONFIG.ev_info, name), InfoCommand)
]