
本文详解如何在基于 discord.js v14 的基础机器人中,通过监听 messageCreate 事件实现关键词触发的自动回复,并提供可直接运行的代码示例、大小写处理技巧及关键注意事项。
本文详解如何在基于 discord.js v14 的基础机器人中,通过监听 `messagecreate` 事件实现关键词触发的自动回复,并提供可直接运行的代码示例、大小写处理技巧及关键注意事项。
要在 Discord 机器人中实现“用户发送 Hai,机器人自动回复 Halo”这类基础自动响应,核心在于正确监听并处理用户消息事件。discord.js v14 已弃用旧版 message 事件,必须使用 messageCreate 事件,且需确保已启用对应 Gateway Intent。
✅ 正确配置与实现步骤
首先,确认你的 index.js 中已声明 GuildMessages 和 MessageContent 意图(后者对读取消息内容为必需):
const { Client, Events, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.json');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages, // ← 必须启用
GatewayIntentBits.MessageContent, // ← 必须启用(否则 message.content 为空)
],
});然后,在 client.on("ready", ...) 之后添加 messageCreate 监听器:
client.on("messageCreate", (message) => {
// 忽略机器人自身消息,避免自触发循环
if (message.author.bot) return;
const content = message.content.trim();
// 简单关键词匹配:支持大小写不敏感的完整词或子串
if (/^hai$/i.test(content)) {
message.reply({ content: 'Halo!' });
}
});? 说明:此处使用正则 /^hai$/i 实现精确匹配整条消息为 hai(忽略大小写),比 includes() 更严谨(例如避免 haiya 或 bahai 被误触发)。如需支持模糊匹配(如包含“hai”即可),可改用 content.toLowerCase().includes('hai')。
⚠️ 关键注意事项
- 权限检查:确保机器人在目标频道拥有 Send Messages 和 Read Message History 权限;
- Intent 启用:若未开启 MessageContent intent,message.content 将始终为空字符串,导致匹配失效;
- Bot 身份过滤:务必添加 if (message.author.bot) return,防止机器人响应其他机器人的消息造成死循环;
- 生产环境建议:避免硬编码关键词和回复,推荐使用配置文件或数据库管理响应规则,便于维护与扩展。
完成上述修改后,重启机器人,即可在服务器中测试:当用户在有权限的文本频道发送 Hai(任意大小写),机器人将立即以 Halo! 回复。此模式可轻松扩展为多关键词、多回复、甚至结合正则或自然语言简单判断,是构建交互式机器人的坚实起点。










