discord.py错误命令触发指定回复的代码问题排查
问题修复方案
你的代码无法生效是三个显性问题+一个配置类问题导致的:
- 笔误:调用消息发送方法时写错了方法名,
ctx.semd应为ctx.send,拼写错误会直接打断整个错误处理函数的执行。 - 错误类型不匹配:用户输入不存在的命令时,discord.py抛出的错误类是
commands.CommandNotFound,你写的commands.NotFound不属于命令错误范畴,永远无法被匹配到。 - 缺少事件注册装饰器:
on_command_error是机器人的事件回调函数,必须在函数上方添加对应实例的事件装饰器,否则discord.py不会把这个函数注册为错误处理逻辑。 - 逻辑冗余:所有错误判断都用独立
if的话,极端场景下会触发多条回复,把后续判断改为elif即可避免。
修复后的完整错误处理代码
注意代码里的bot要替换成你自己初始化的机器人实例名,如果你初始化时用的变量名是client,就把装饰器里的bot换成client。
@bot.event async def on_command_error(ctx, error): if isinstance(error, commands.MissingRequiredArgument): await ctx.send('Please pass in all requirements :rolling_eyes:.') elif isinstance(error, commands.MissingPermissions): await ctx.send("You dont have all the requirements :angry:") elif isinstance(error, commands.CommandNotFound): await ctx.send("what is this :face_vomiting:")
配置校验
如果改完代码还是不生效,检查两项基础配置:
- 你是用
commands.Bot初始化的机器人实例,而不是原生的discord.Client,后者不支持命令框架的相关事件。初始化时要正确填写命令前缀,参考:bot = commands.Bot(command_prefix="你的前缀", intents=intents) - 你已经开启了消息内容权限:既要在Discord开发者后台对应机器人的「Bot」页面打开
Message Content Intent开关,也要在代码里配置intents开启对应权限,否则机器人无法读取用户发送的消息内容,自然无法识别命令、触发错误回调。
内容的提问来源于stack exchange,提问作者BDJanson
相关产品推荐
相关产品推荐

