Discord机器人CommandNotFound报错及消息监听器无响应问题
问题原因及解决方案
核心问题1:自定义on_message阻塞命令处理
在Cog中自定义on_message监听器后,会覆盖Discord.py默认的消息处理逻辑,导致bot无法解析命令,这就是black命令提示找不到的原因。必须手动触发命令处理流程,才能让命令被识别。
核心问题2:未启用message_content意图(Discord.py v2.x+ 强制要求)
Discord.py 2.0及以上版本需要显式开启message_content意图,否则无法读取消息内容,监听器里的message.content == "hello"判断永远不成立,自然不会触发响应。
修复步骤:
启用消息内容意图
创建Bot实例时添加意图配置:import discord from discord.ext import commands # 启用默认意图+消息内容意图 intents = discord.Intents.default() intents.message_content = True # 替换成你实际使用的命令前缀 bot = commands.Bot(command_prefix="!", intents=intents)修改
on_message监听器,补充命令处理
在监听器函数末尾添加命令处理调用,确保bot能同时处理自定义消息逻辑和命令:@commands.Cog.listener() async def on_message(self, message): if message.content == "hello": await message.channel.send("HI!") # 关键:让bot处理命令 await self.bot.process_commands(message)确保命令调用格式正确
调用命令时必须加上你设置的前缀,比如前缀是!,则发送!black而非直接发black,否则bot会将其视为普通消息,无法识别为命令。
内容的提问来源于stack exchange,提问作者OrcaDrive
相关产品推荐
相关产品推荐

