
Discord Bot 默认无法读取服务器中的消息内容,需显式启用 message_content 和 members 权限(intents),并确保在 Discord 开发者门户中开启对应开关,否则 on_message 事件在服务器中将完全不触发。
discord bot 默认无法读取服务器中的消息内容,需显式启用 `message_content` 和 `members` 权限(intents),并确保在 discord 开发者门户中开启对应开关,否则 `on_message` 事件在服务器中将完全不触发。
Discord 自 v2.0 起对消息权限进行了严格限制:即使 Bot 拥有“查看频道”和“发送消息”等基础权限,若未启用 message_content intent,on_message 事件在服务器(Guild)中将完全不会被触发——这正是你遇到“Bot 响应 DM 但无视服务器消息”的根本原因。而私信(DM)不受此限制,因此调试时看似逻辑正常,实则服务器侧事件从未抵达。
✅ 正确配置步骤(缺一不可)
-
代码中启用必要 intents
messages=True 仅允许接收 Message 事件通知,但不包含消息实际内容;必须额外启用 message_content=True(且推荐同时启用 members=True,尤其当需访问 message.author.roles 或 guild.get_member() 等功能时):
import discord import os intents = discord.Intents.default() intents.messages = True # 接收消息事件通知(必要) intents.message_content = True # ✅ 关键:读取消息文本内容(必需!) intents.members = True # ✅ 推荐:获取成员信息(如判断角色、昵称等) client = discord.Client(intents=intents)
⚠️ 注意:intents.message_content 是明确需要手动开启的独立 intent,不可省略。
-
Discord 开发者门户中启用 Privileged Intents
- 进入 Discord Developer Portal → 选择你的应用 → "Bot" 标签页
- 向下滚动至 "Privileged Gateway Intents" 区域
- ✅ 勾选 "MESSAGE CONTENT INTENT"(必选)
- ✅ 勾选 "SERVER MEMBERS INTENT"(若启用了 intents.members=True)
- 保存更改
-
重新邀请 Bot(使用更新后的权限链接)
修改 intent 后,必须重新生成邀请链接并重邀 Bot,否则旧权限不会生效:- 在开发者门户 → "OAuth2" → "URL Generator"
- 勾选 bot scope,并在 "Bot Permissions" 中至少勾选 Send Messages、Read Message History
- 关键:在下方 "SCOPES & PERMISSIONS" 区域确认已勾选 applications.commands(非必须,但推荐)及正确权限值
- 复制新链接,用管理员身份重新添加 Bot 到服务器
? 验证是否生效
运行 Bot 后,在服务器中发送任意消息,观察控制台输出:
- 若 print(f"Received message: {message.content}") 成功打印 → 配置正确
- 若仍无输出 → 检查:① 代码中 intents.message_content=True 是否拼写正确;② 开发者门户开关是否开启;③ 是否使用新链接重邀 Bot
? 补充说明
- intents.message_content 是 Discord 强制要求的隐私保护机制,旨在防止 Bot 未经用户同意窃取消息内容。
- 即使 Bot 只需响应简单关键词(如 "hello"),也必须启用该 intent —— 因为 message.content 属性本身受其管控。
- 若未来需使用 slash commands,建议改用 discord.Bot(来自 discord.ext.commands)并配合 @bot.slash_command(),它默认兼容新 intent 规则且更易维护。
完成以上三步后,你的 Bot 将正常接收并响应服务器内所有符合条件的消息。










