我有一个不和谐的机器人,我想阻止它运行,除非填充了某个参数。
这是机器人的当前代码:
@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.
但是我该怎么做呢? (检查下面的答案)
答案 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.