繁体   English   中英

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

[英]Cancel command with before_invoke without printing error message (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.

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

为了使用 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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM