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

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)

验证修复

  1. 重启机器人后,使用br!poll "测试投票" 选项1 选项2测试命令是否正常触发
  2. 检查控制台输出的1-5日志,确认命令执行流程无中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:43:13