取消命令

时间:2019-05-31 15:34:26

标签: python python-3.x discord.py discord.py-rewrite

我正在制作一个命令,以启用/禁用每个通道的机器人命令。尽管在数据库中找到命令时无法取消命令。

$(document).ready(function() {
  event.preventDefault();
  $('#calendar').fullCalendar({
    defaultDate: '2019-05-31',
    editable: true,
    eventLimit: true, 
    events: [  
      {% for i in sales_events %} // gives error
        { title: "i.title", }
      {% endfor %}
    ]
  });
});

该代码有效,它检查命令是否在数据库中,如果是,则机器人说“该命令在该通道中被禁用”。但是,继续执行实际命令。

我希望它不再继续执行实际命令,而只说“该命令在该通道中被禁用”。如果在数据库中找到了该命令。

1 个答案:

答案 0 :(得分:1)

您可以编写引发自定义异常的检查,然后在所有命令中的自定义异常处理程序中处理该异常。下面的代码仅要求您编写一些command_is_disabled函数来实际确定该命令是否被禁用。

from discord.ext.commands import DisabledCommand, check, Bot

bot = Bot("!")

class DisabledInChannel(DisabledCommand):
    pass

def check_disabled():
    def predicate(ctx):
        if command_is_disabled(ctx.command.name, ctx.channel.id):
            raise DisabledInChannel(f"{ctx.command.name} is disabled in {ctx.channel.name}")
        return True
    return check(predicate)

@bot.command()
@check_disabled()
async def some_command(ctx):
    ...

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, DisabledInChannel):
        await ctx.send(error.message)
    else:
        raise error