
Discord 自 2022 年起将 MESSAGE_CONTENT 设为特权意图,若未在开发者后台显式启用并申请审核,WebSocket 收到的 MESSAGE_CREATE 事件中 d.content 字段将为空(即使 token 和 channel ID 正确),导致消息内容无法显示且连接异常中断。
discord 自 2022 年起将 `message_content` 设为特权意图,若未在开发者后台显式启用并申请审核,websocket 收到的 `message_create` 事件中 `d.content` 字段将为空(即使 token 和 channel id 正确),导致消息内容无法显示且连接异常中断。
要使你的 WebSocket 客户端完整接收所有用户(包括非你自己)在指定频道中发送的文本消息内容,必须同时满足以下三个条件:
✅ 1. 正确配置 Gateway Intents
你当前使用的 intents: 512 仅对应 GUILDS 意图(十进制 512 = 2⁹),而 MESSAGE_CONTENT 的 intent 值为 16(即 2⁴)。若需接收消息内容,需将 intents 设置为 512 | 16 = 528(按位或):
payload = {
op: 2,
d: {
token: "YOUR_BOT_TOKEN", // 注意:此处应为 bot token,非 user token
intents: 528, // 512 (GUILDS) + 16 (MESSAGE_CONTENT)
properties: {
$os: "linux",
$browser: "chrome",
$device: "chrome"
}
}
};
⚠️ 注意:intents: 512 仅能收到频道元数据(如 channel_id, author),但 d.content、d.embeds、d.attachments 等字段在无 MESSAGE_CONTENT 权限时一律被 Discord 网关过滤为空。
✅ 2. 在 Discord Developer Portal 启用特权意图
- 进入 Discord Developer Portal → 选择你的应用 → Bot 侧边栏
- 向下滚动至 Privileged Gateway Intents 区域
- ✅ 勾选 MESSAGE CONTENT INTENT
- 保存更改
? 特别提醒:若你的机器人服务对象为 100+ 个服务器,Discord 要求你提交合规性审核。未通过审核的 bot 在大型服务器中仍将收不到 content 字段(返回空字符串),即使代码和设置正确。
WebSocket 8.18.2下载WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
✅ 3. 使用 Bot Token(而非 User Token)
你的代码中 token 字段应填写 Bot 用户的 token(格式形如 MTIzNDU2Nzg5MDEyMzQ1Njc4OQ...),而非个人账号的 User Token。User Token 不支持 Gateway intents 配置,且违反 Discord API Terms,可能导致 token 封禁与连接被主动断开。
? 验证是否生效
启用后,重连 WebSocket,观察 MESSAGE_CREATE 事件中的 d.content:
- ✅ 正常情况:d.content 为非空字符串(如 "Hello world!")
- ❌ 仍为空:检查是否遗漏审核、是否误用 User Token、或目标频道是否启用了“消息内容筛选”(如管理员设置了敏感内容过滤)
? 补充建议:增强健壮性
- 添加 error 和 close 监听器,避免静默断连:
ws.addEventListener("error", e => console.error("WebSocket error:", e)); ws.addEventListener("close", e => console.warn("WebSocket closed:", e.code, e.reason)); - 使用 d.author.username 时,注意该字段在跨平台场景下可能为 null(推荐优先使用 d.author.global_name || d.author.username)。
完成以上三步后,appendMessageWithFrame(final) 将能稳定显示所有用户(包括他人)的头像、昵称与完整消息内容,WebSocket 连接也将保持稳定。











