
Discord.js v14+ 中,message 事件已被移除,必须显式启用 GuildMessages 等意图(intents)并使用 messageCreate 事件,否则机器人完全无法监听文本消息。
discord.js v14+ 中,`message` 事件已被移除,必须显式启用 `guildmessages` 等意图(intents)并使用 `messagecreate` 事件,否则机器人完全无法监听文本消息。
在 Discord.js v14 及更高版本中,client.on('message') 已被彻底弃用,且默认情况下客户端不会接收任何消息事件——即使机器人拥有全部权限,也必须满足两个前提条件:
-
正确声明所需 Gateway Intents(网关意图),特别是
Guilds和GuildMessages; -
监听
messageCreate事件,而非已废弃的message。
此外,还需确保在 Discord Developer Portal 中为应用启用了对应意图:
- 进入应用 → Bot → 向下滚动至 Privileged Gateway Intents;
- 开启 ✅ MESSAGE CONTENT INTENT(若需读取消息内容,如
msg.content); - 同时确保在代码中声明
IntentsBitField(推荐方式)或字符串数组(兼容写法)。
✅ 正确配置示例(Discord.js v14+):
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds, // 必需:访问服务器基本信息
GatewayIntentBits.GuildMessages, // 必需:接收频道中的消息事件
GatewayIntentBits.MessageContent, // 如需读取 msg.content(如命令解析),必须启用 + Portal 开启
],
});
client.once('ready', () => {
console.log(`✅ Logged in as ${client.user.tag}!`);
});
client.on('messageCreate', (msg) => {
console.log(`? [${msg.channel.name}] ${msg.author.username}: ${msg.content}`);
if (msg.content === 'ping') {
msg.reply('Pong! ?');
}
});
client.login('YOUR_BOT_TOKEN_HERE'); // 替换为真实 Token
⚠️ 注意事项:
- 若未启用
MessageContent意图(代码中 + Portal 设置),msg.content将为空字符串,导致'ping'判断永远失败; -
GuildMessages仅允许接收非私信的服务器内消息;如需私信(DM),需额外添加DirectMessages意图; - 不要混用旧版字符串意图(如
"GUILD_MESSAGES")与新版GatewayIntentBits—— 虽部分兼容,但推荐统一使用GatewayIntentBits枚举以保障可维护性; - 确保机器人已被邀请进目标服务器,并赋予
View Channel和Send Messages权限(意图 ≠ 权限,二者缺一不可)。
? 总结:
消息收不到 ≠ Token 错误或权限不足,极大概率是意图未声明或事件名写错。牢记三要素:启用 Intent → Portal 开关同步 → 监听 messageCreate。完成这三步,你的 Discord 机器人即可稳定响应每一条消息。











