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

同时使用on_message与@bot.command()时语音频道加入命令失效求助

嘿,我太懂这个坑了!当你在discord.py里同时用on_message事件和@bot.command()定义的命令时,最容易踩的雷就是自定义的on_message会打断命令的自动处理流程——因为一旦你自己实现了on_message函数,库默认的命令解析逻辑就会被绕过,导致你的join命令根本不会被触发。

解决办法超简单,只需要加一行代码:

在你的on_message函数末尾,手动让机器人处理消息里的命令就行:

@bot.event
async def on_message(message):
    # 这里写你原本的on_message逻辑代码
    # 比如消息过滤、自动回复之类的操作
    # ...
    
    # 关键!一定要加这行,让机器人去识别并执行命令
    await bot.process_commands(message)

原理说明:

默认状态下,discord.py会自动扫描每条消息,判断是不是命令并执行对应的函数。但当你自定义了on_message,这个自动流程就被覆盖了。bot.process_commands(message)就是在告诉机器人:“我自己的逻辑处理完了,你再检查下这条消息是不是命令,是的话就执行对应的函数吧。”

额外要注意的细节:

  • 如果你的on_message里有return语句,一定要把await bot.process_commands(message)放在return之前执行,不然这行代码根本不会运行。
  • 比如你有“忽略机器人自身消息”的逻辑,要把处理命令的代码放在判断之后,避免做无用功:
@bot.event
async def on_message(message):
    if message.author.bot:
        return
    # 你的其他业务逻辑
    # ...
    await bot.process_commands(message)

这么修改之后,你的join命令和on_message事件就能同时正常工作啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:38:14