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

Discord.py机器人无法注册命令触发CommandNotFound错误求助

Discord.py机器人无法注册命令触发CommandNotFound错误求助

Hey Kayla,别慌!刚上手Python和Discord机器人遇到这种问题真的超常见,我帮你梳理几个最可能的原因和解决办法,你可以挨个排查:

首先先提个小细节:你代码里写的import rand应该是笔误吧?正确的是import random,这个虽然不一定是命令没注册的直接原因,但会影响到roll命令的功能,先改过来哦。

接下来是核心排查点:

  • 检查命令前缀和Bot初始化是否正确
    你得确保初始化Bot的时候指定了正确的命令前缀,比如你想让命令用!触发,就得这么写:

    intents = discord.Intents.default()
    intents.message_content = True
    bot = commands.Bot(command_prefix='!', intents=intents)
    

    如果前缀设错了或者没设置,比如代码里漏写command_prefix,那机器人根本识别不了你输入的命令。

  • 务必配置正确的Intents(意图)
    Discord.py 2.0版本之后,必须开启message_content意图才能让机器人读取消息内容,不然它连你发的命令都看不到。步骤分两步:

    1. 去Discord开发者平台里你的机器人页面,找到「Privileged Gateway Intents」,开启「Message Content Intent」
    2. 代码里像上面那样初始化intents,把message_content设为True
  • 确认命令的定义格式没问题
    你的roll命令必须用@bot.command()装饰器来定义,函数名要和你输入的命令名一致,比如:

    @bot.command()
    async def roll(ctx):
        import random
        dice_result = random.randint(1, 6)
        await ctx.send(f"你掷出了{dice_result}点!")
    

    如果装饰器写错了,或者函数名和命令名不匹配(比如函数叫dice但你输入!roll),机器人就会提示找不到命令。

  • 检查机器人的服务器权限
    确保你的机器人在服务器里有「查看频道」「读取消息历史」「发送消息」这些基础权限,不然它可能接收到命令但没法回复,甚至根本看不到消息。

另外可以加个小验证:在代码里加一个on_ready事件,确认机器人正常上线:

@bot.event
async def on_ready():
    print(f'我已经以{bot.user}的身份上线啦!ID是{bot.user.id}')
    print('------------------------')

这样机器人启动后,VS Code的控制台会输出提示,你能确认它确实成功连接到Discord了。

备注:内容来源于stack exchange,提问作者Kayla Toomey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:40:27