处理discord.py中的错误(未经许可)

时间:2020-08-12 02:46:19

标签: python discord discord.py

我正在尝试使用kick,ban,prune等命令制作一个审核机器人,并且拥有所有命令,但是我不知道如何处理发件人不提供的错误。没有许可。到目前为止,这是我的代码:

class MyClass {
  final int total;
  MyClass(this.total);
}

class Test {
  static int param = 10;
  static MyClass darkerText = MyClass(param);
}

main() {  
  print(Test.darkerText.total);
  
}

控制台中未显示任何错误,但消息未发送。

4 个答案:

答案 0 :(得分:1)

commands.MissingPermissions不是error.MissingPermissions

答案 1 :(得分:0)

问题在于,当具有无效权限的用户尝试使用该命令时,error捕获了该异常,但是error只是discord.py捕获的异常因为用户没有权限。因此,该函数正在捕获错误,没问题,但是您的if语句失败了,因为error.MissingPermissions不是错误的实例。它甚至不存在,因为error就是函数捕获的discord.py抛出的异常。其中没有MissingPermissions。因此,您捕获的错误中没有MissingPermissions之类的东西,因为那只是一个错误。您需要查看error是否是MissingPermissions缺少权限类(是)中discord.py的实例。因此,为了修复它,请导入MissingPermissions,您会很高兴。我已经在下面为您修复了代码。

from discord.ext.commands import MissingPermissions

# Code

@kick.error
async def kick_error(self, ctx, error):
    if isinstance(error, MissingPermissions):
        await ctx.send(":redTick: You don't have permission to kick members.")

对不起,如果解释不清楚。如果您愿意我可以尝试再次解释,或者有人可以对其进行编辑以使其更清晰,更准确。

答案 2 :(得分:0)

如果您遇到异常,也要:ctx is a required attribute that is missing

这是因为您的机器人不在课堂上。 解决方案:

from discord.ext.commands import MissingPermissions

# Code

@kick.error
async def kick_error(ctx, error):
    if isinstance(error, MissingPermissions):
        await ctx.send(":redTick: You don't have permission to kick members.")
简而言之,

删除self属性。这个答案似乎很愚蠢,但仅对专家而言。 我希望初学者会发现这很有帮助! :)

答案 3 :(得分:0)

@client.event
async def on_command_error(ctx, error):
    if isinstance(error, MissingPermissions):
        await ctx.send("You are missing permission(s) to run this command.")
    else:
        raise error

在你的错误处理程序中,总是引发错误