gpt4 book ai didi

python-3.x - Discord.py:我的程序似乎无法区分错误(MissingPerms、BotMissingPerms),因此使用了错误的处理程序

转载 作者:行者123 更新时间:2023-12-03 08:20:11 24 4
gpt4 key购买 nike

我试图捕捉一些可能由用户错误地使用命令产生的错误。
为了测试这一点,我创建了一个按需引发错误的命令和一个应该捕获它们的函数。
问题是,我试图捕捉 commands.BotMissingPermisions , commands.MissingPermissionscommands.CommandOnCooldown似乎被忽略并处理为 commands.CommandInvokeError .其他错误,例如 TooManyArgumentsNotOwner被捕获就好了。

那是我的代码:

Import discord
from discord.ext Import commands

bot = commands.Bot(command_prefix='~')

@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('missing perms')
elif isinstance(error, commands.BotMissingPermissions):
await ctx.send('bot missing perms')
elif isinstance(error, commands.CommandOnCooldown):
await ctx.send('cooldown')
elif isinstance(error, commands.CommandInvokeError):
await ctx.send('invoke')
else:
await ctx.send('should not happen')

@bot.command
async def doError(ctx, type : int):
if(type == 0):
raise commands.MissingPermissions
elif(type == 1):
raise commands.BotMissingPermissions
elif(type == 2):
raise commands.CommandOnCooldown

bot.run(token)

这是我第一次在这里提问,所以如果您需要更多信息,请告诉我

最佳答案

您 try catch 的命令错误旨在在执行命令的回调之前引发(来自检查、转换器等)。回调中引发的异常将包含在 CommandInvokeError 中。 ,所以很清楚它们来自哪里。

例如,您可能有一个错误处理程序,例如

@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.TooManyArguments):
await ctx.send('too many arguments')
elif isinstance(error, commands.CommandInvokeError):
await ctx.send('invoke')
else:
await ctx.send('should not happen')

和类似的命令
@bot.command
async def doError(ctx, type : int):
raise commands.TooManyArguments

如果您实际上向命令传递了太多参数,那么命令处理机制将产生 TooManyArguments异常并将其传递给处理程序。另一方面,如果您的回调产生 TooManyArguments异常,然后命令机器将处理该异常,将其包装在 CommandInvokeError 中,然后将其传递给处理程序。

关于python-3.x - Discord.py:我的程序似乎无法区分错误(MissingPerms、BotMissingPerms),因此使用了错误的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com