使用 before_invoke 取消命令而不打印错误消息 (discord.py)

时间:2021-07-18 19:29:46

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

我有一个不和谐的机器人,我想阻止它运行,除非填充了某个参数。

这是机器人的当前代码:

@bot.before_invoke
async def checkguild(message):
    command = message.command
    if command != 'settings':
        if not message.guild.id in globaldb.servers_setup.val:
            for required_setting in REQUIRED_SETTINGS:  # Iterates through the required settings to make sure they're all defined.
                if not get_guild_db(message.guild).settings.has(required_setting):
                    # Prevent command from running, and call the on_command_error function instead of just throwing an error.
            globaldb.set('servers_setup', globaldb.servers_setup.val + [message.guild.id])
            globaldb.save()  # Otherwise add the server to the database as set up.

我想按照中间的评论说,

# Prevent command from running, and call the on_command_error function instead of just throwing an error.

但是我该怎么做呢? (检查下面的答案)

1 个答案:

答案 0 :(得分:0)

为了使用 discord.ext.commands 提供的错误系统,我们必须引发它的 CommandError 异常。

这将像这样实现:

@bot.before_invoke
async def checkguild(message):
    command = message.command
    if command != 'settings':
        if not message.guild.id in globaldb.servers_setup.val:
            for required_setting in REQUIRED_SETTINGS:  # Iterates through the required settings to make sure they're all defined.
                if not get_guild_db(message.guild).settings.has(required_setting):
                    # Prevent command from running, and call the on_command_error function instead of just throwing an error.
                    raise discord.ext.commands.CommandError(f'Before using this bot, please set the `{required_setting}` setting.')
            globaldb.set('servers_setup', globaldb.servers_setup.val + [message.guild.id])
            globaldb.save()  # Otherwise add the server to the database as set up.