Discord.py命令失效问题:on_message正常但自定义命令无法工作
Discord机器人自定义命令失效问题修复
问题现象
自定义命令(如poll)无响应,但on_message事件逻辑(被提及后的回复)、info命令和默认help命令可正常运行。
核心问题与修复方案
1. on_message事件阻断命令处理
当自定义on_message事件时,discord.py的命令框架不会自动解析消息中的命令,必须手动调用bot.process_commands(message)触发命令处理流程。
修改后的on_message代码:
@bot.event async def on_message(message): if message.author == bot.user: return if bot.user.mentioned_in(message): await message.channel.send(f'***Do you mind?***') # 关键:添加此行让bot处理命令 await bot.process_commands(message)
2. poll命令循环逻辑错误
reactions是普通列表,不能用async for迭代(该语法仅适用于异步迭代器),会导致命令执行中断。
修改poll命令中的循环部分:
# 替换原有的async for循环 for reaction in reactions: await message.add_reaction(reaction) print('5')
3. 移除无效代码
原代码中删除初始命令的循环无实际作用(Bot刚初始化时bot.commands为空),可直接删除:
# 以下代码可删除 # for command in bot.commands: # bot.remove_command(command.name)
验证修复
- 重启机器人后,使用
br!poll "测试投票" 选项1 选项2测试命令是否正常触发 - 检查控制台输出的
1-5日志,确认命令执行流程无中断
内容的提问来源于stack exchange,提问作者PieyIsAPie
相关产品推荐
相关产品推荐

