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意图才能让机器人读取消息内容,不然它连你发的命令都看不到。步骤分两步:- 去Discord开发者平台里你的机器人页面,找到「Privileged Gateway Intents」,开启「Message Content Intent」
- 代码里像上面那样初始化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

