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

discord.py触发CommandNotFound报错如何保持Python控制台整洁

报错根源

两个discord.py程序使用了同一个Bot Token登录,Discord网关会将账号收到的所有消息事件推送给所有在线的同Token客户端。使用@bot.commands装饰器的客户端检测到消息符合指令前缀规则时,会自动尝试匹配对应指令,匹配不到就会抛出CommandNotFound异常,和两个程序是否部署在同一台设备没有直接关系。

解决方法

根据你的实际需求二选一即可:

  • 方法1:直接过滤指定报错(快速实现控制台无冗余输出)
    在使用指令装饰器的Bot程序中添加全局错误事件处理,单独屏蔽指令不存在的报错,其他类型错误保留正常输出逻辑,参考代码如下:
    from discord.ext import commands
    
    @bot.event
    async def on_command_error(ctx, error):
        # 捕获到指令不存在的错误时直接返回,不打印控制台报错
        if isinstance(error, commands.CommandNotFound):
            return
        # 其余错误按默认逻辑抛出,方便排查其他问题
        raise error
    
    *该修改不会影响现有已注册指令的正常响应,仅屏蔽无对应指令的报错输出。
  • 方法2:从根源规避事件串流(长期稳定推荐)
    两个独立功能的Bot不要共用同一个Token,去Discord开发者后台创建第二个独立Bot应用,给其中一个程序替换为新的Bot Token。两个Bot使用独立身份登录后,不会再收到对方的事件推送,从根源避免这类跨实例的异常触发,也不会出现后续多实例重复响应消息、抢事件处理权的问题。

额外注意:如果你确实需要同Token跑两个实例拆分逻辑,记得在仅用on_message做消息处理的那个程序里,不要写await bot.process_commands(message)这行代码,避免两个实例同时争抢指令处理权触发其他异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:27:25