Discord Bot: организация подкоманд и групп с примерами кода

Организация подкоманд/групп Discord — это способ организации и структурирования команд внутри бота Discord. Такая организация обычно используется для создания модульных и расширяемых команд ботов. Вот несколько методов, которые вы можете использовать для реализации подкоманд или сгруппированных команд в средах ботов Discord, таких как discord.py или discord.js:

  1. Использование операторов if-else или switch:

    @bot.command()
    async def my_command(ctx, subcommand, *args):
       if subcommand == 'subcommand1':
           # Handle subcommand1 logic
           await ctx.send('Subcommand 1 executed')
       elif subcommand == 'subcommand2':
           # Handle subcommand2 logic
           await ctx.send('Subcommand 2 executed')
       else:
           await ctx.send('Invalid subcommand')
  2. Использование декораторов команд:

    @bot.group()
    async def my_command(ctx):
       if ctx.invoked_subcommand is None:
           await ctx.send('Invalid subcommand')
    @my_command.command()
    async def subcommand1(ctx):
       # Handle subcommand1 logic
       await ctx.send('Subcommand 1 executed')
    @my_command.command()
    async def subcommand2(ctx):
       # Handle subcommand2 logic
       await ctx.send('Subcommand 2 executed')
  3. Использование библиотеки расширений команд, например discord-commands:

    from discord_commands import Command
    @Command()
    async def my_command(ctx):
       await ctx.send_help()
    @my_command.subcommand()
    async def subcommand1(ctx):
       # Handle subcommand1 logic
       await ctx.send('Subcommand 1 executed')
    @my_command.subcommand()
    async def subcommand2(ctx):
       # Handle subcommand2 logic
       await ctx.send('Subcommand 2 executed')
  4. Реализация пользовательского обработчика команд:

    def handle_command(command, args):
       if command == 'subcommand1':
           # Handle subcommand1 logic
           print('Subcommand 1 executed')
       elif command == 'subcommand2':
           # Handle subcommand2 logic
           print('Subcommand 2 executed')
       else:
           print('Invalid subcommand')
    # Example usage
    command = 'my_command'
    subcommand = 'subcommand1'
    args = ['arg1', 'arg2']
    handle_command(subcommand, args)