You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:")

配置校验

如果改完代码还是不生效,检查两项基础配置:

  1. 你是用commands.Bot初始化的机器人实例,而不是原生的discord.Client,后者不支持命令框架的相关事件。初始化时要正确填写命令前缀,参考:bot = commands.Bot(command_prefix="你的前缀", intents=intents)
  2. 你已经开启了消息内容权限:既要在Discord开发者后台对应机器人的「Bot」页面打开Message Content Intent开关,也要在代码里配置intents开启对应权限,否则机器人无法读取用户发送的消息内容,自然无法识别命令、触发错误回调。

内容的提问来源于stack exchange,提问作者BDJanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:33:21