Discord Bot开发:用户无权限调用指令时发送错误提示的实现方法
Discord Bot 无权限调用指令提示实现方案
问题根因
你使用的@commands.has_permissions(manage_messages=True)装饰器会在触发权限校验失败时,直接抛出commands.MissingPermissions异常,不会进入clear函数内部执行逻辑,因此你在函数内编写的if/else判断完全不会生效。
实现方案
方案一:全局错误处理(推荐)
一次配置适配所有带权限校验的指令,无需为每个指令单独写错误逻辑,直接在你的Cog类或Bot主文件中添加如下监听代码即可:
@commands.Cog.listener() async def on_command_error(self, ctx, error): # 捕获权限不足异常 if isinstance(error, commands.MissingPermissions): await ctx.send("您没有权限使用该指令", delete_after=3) # 可扩展其他异常处理,例如参数输入错误 elif isinstance(error, commands.BadArgument): await ctx.send("指令参数输入错误,请核对后重试", delete_after=3)
方案二:单指令专属错误处理
如果仅需要为clear指令做权限提示,可单独为其绑定错误处理函数,代码放在clear函数的同层级位置即可:
@clear.error async def clear_error(self, ctx, error): if isinstance(error, commands.MissingPermissions): await ctx.send("您没有权限使用该指令", delete_after=3)
内容的提问来源于stack exchange,提问作者Marcos Souza
相关产品推荐
相关产品推荐

