我已经建立了一个*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命令有效吗?
答案 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}**")
这可确保该机器人实际上可以禁止提及该用户(经过测试和正常工作)