如何修复MissingPermissions错误不起作用? discord.py

时间:2019-06-21 17:45:29

标签: error-handling discord.py-rewrite

我已经建立了一个*ban命令,它使用了@commands.has_permissions(ban_members=True)装饰器。但是,我的错误处理程序似乎并没有接受if isinstance (error, MissingPermissions):

@client.command(name="ban", pass_ctx=True)
@commands.has_permissions(ban_members=True)
async def ban(ctx, member: discord.Member=None, *, reason: str=None):
    # command is here but irrelevant i think

@ban.error
async def ban_error(ctx, error):
    if isinstance(error, BadArgument): # members != @user
        await ctx.send("Please specify a **valid** user!")
    elif isinstance(error, MissingPermissions): # can't ban
        await ctx.send("You need the **ban members** permission")
    else:
        raise error

它没有被错误处理程序捕获,但是我的终端[vscode]确实产生了这种情况:discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 FORBIDDEN (error code: 50013): Missing Permissions我假设这就是MissingPermissions的作用?无论如何,我为为什么这不起作用而感到困惑,所以非常感谢您的帮助:)

还要注意,相同的代码在某种程度上对我的kick命令有效吗?

1 个答案:

答案 0 :(得分:0)

问题是我试图禁止具有管理员身份的人(不是gunna工作)。

但是,如果机器人无法禁止该人,我可能会添加一些错误:

try:
    await member.ban() # member: discord.Member
except discord.Forbidden: # the error being raised
    await ctx.send(f"I don't have permission to ban **{member}**")

这可确保该机器人实际上可以禁止提及该用户(经过测试和正常工作)