Отменить команду в событии on_command?

#python #python-3.x #asynchronous #discord #discord.py

Вопрос:

я добавляю функцию в своего бота discord, которая позволит вам отключить команду в определенном канале. Все работает идеально, кроме фактического отключения командной части.

 @bot.event
async def on_command(ctx):
    try:
        with open('serverdata.json', 'r') as f:
            data = json.load(f)

        await update_server_data(data, ctx.channel.guild)

        storage = data[f'{ctx.channel.guild.id}']["channels"][f'{ctx.channel.id}']["disabled_commands"]

        if str(ctx.command) in storage:
            await ctx.channel.send(f'{ctx.command} is disabled in this channel!')
            # somehow stop command from working
    except:
        pass
 

Есть ли для этого какая-то встроенная функция или мне придется использовать другой метод? Я бы предпочел не добавлять новый код к каждой отдельной команде. Мы ценим любую помощь

Ответ №1:

Вы можете отключить команду, написав оператор if в самом определении команды, оператор if может написать сообщение пользователю и завершит функцию возвращением. Пример:

 @bot.command()
async def an_example_comand(ctx, *, some_parameters):
    if not command_allowed():
        await ctx.send("This command is not allowed in this channel.")
        return
    
    # Here should be the code to be executed if the command is allowed.


# The command_allowed() function should return a boolean.
# If it returns False then the command won't run.
    
 

Комментарии:

1. Есть ли способ отменить команды внутри события on_command? Или это единственный способ