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

使用discord.py开发机器人:on_message无法检测消息求助

解决discord.py机器人仅能识别自身消息的问题

嘿,我来帮你搞定这个头疼的问题!你重构代码后机器人只能抓到自己发的消息,服务器里其他人的消息完全没反应,这种情况在discord.py里大概率是意图(Intents)配置出了问题,毕竟重构时很容易把这块关键配置给漏掉。下面给你一步步排查的思路:

1. 先检查Discord开发者平台的意图开关

从Discord官方的政策更新后,message_content这个意图默认是关闭的,你得先在开发者平台开启它:

  • 打开Discord开发者门户,找到你的机器人应用
  • 进入「Bot」页面,往下滑找到「Privileged Gateway Intents」,把Message Content Intent的开关打开
  • 别忘了保存更改!

2. 代码里正确配置Intents

光在平台开了还不够,代码里必须初始化客户端的时候传入正确的Intents对象。比如:

import discord
from command_list import *
from resource_functions import grab_setting_from_category

# 初始化Intents,开启消息内容权限
intents = discord.Intents.default()
intents.message_content = True  # 这行是核心!没有它就读不到消息内容

# 用Intents创建客户端
client = discord.Client(intents=intents)
print("Main initialized")

# 示例on_message事件
@client.event
async def on_message(message):
    # 如果你想跳过机器人自己的消息,可以加这行(你说能识别自己的,所以也可以不加)
    if message.author == client.user:
        return
    
    # 测试用:打印收到的消息
    print(f"收到来自 {message.author.name} 的消息: {message.content}")
    # 你的其他业务逻辑放这里

# 启动机器人
client.run("你的机器人令牌")

如果你用的是commands.Bot类,配置逻辑也是一样的:

bot = commands.Bot(command_prefix="!", intents=intents)

3. 检查事件监听的正确性

  • 确认你的on_message函数是用@client.event(或@bot.event)正确装饰的,函数名不能写错(比如写成on_messages就完全不会触发)
  • 如果你用了commands.Bot并且自定义了on_message,一定要在函数末尾加上await bot.process_commands(message),否则不仅命令不会生效,还可能影响消息事件的触发

4. 服务器权限排查

最后确认机器人在目标服务器的角色拥有以下权限:

  • 查看频道
  • 读取消息历史
  • 发送消息(如果需要回复的话)
    权限不足也可能导致机器人接收不到消息事件。

重构代码的时候很容易把之前默认的配置给改丢,尤其是discord.py v2.x之后对Intents的要求更严格,先从上面这几点排查,应该就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:32