
本文介绍如何在基于 discord.js v14 的基础机器人中,通过监听 messageCreate 事件实现关键词触发的自动回复,支持大小写不敏感匹配,并提供可扩展的实践方案。
本文介绍如何在基于 discord.js v14 的基础机器人中,通过监听 `messagecreate` 事件实现关键词触发的自动回复,支持大小写不敏感匹配,并提供可扩展的实践方案。
要在 Discord 机器人中实现“用户发送 Hai,机器人自动回复 Halo”这类基础自动响应,核心在于正确注册并处理 messageCreate 事件——这是 discord.js v14 中替代已弃用 message 事件的标准方式。
首先,请确保你的机器人具备读取消息内容的权限。在 Client 初始化时,需启用对应网关意图(gateway Intents):
const { Client, Events, GatewayIntentBits } = require('discord.js'); const { Token } = require('./config.json'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, // ✅ 必须启用:接收消息事件 GatewayIntentBits.MessageContent, // ✅ 若需读取消息文本(v14 默认受限,必须显式声明) ], });
⚠️ 注意:从 discord.js v14 起,MessageContent 意图需在开发者门户中手动开启(Discord Developer Portal → Bot → Privileged Gateway Intents),否则 message.content 将为空字符串,导致关键词匹配失效。
接下来,在 client.on(“ready”, …) 之后添加自动回复逻辑:
client.on("messageCreate", (message) => { // 过滤掉机器人自己发送的消息,避免自触发循环 if (message.author.bot) return; const content = message.content.trim(); const lowerContent = content.toLowerCase(); if (lowerContent === 'hai' || lowerContent.includes('hai')) { message.reply({ content: 'Halo!' }); } });
✅ 示例效果:
- 用户发送 Hai → 机器人回复 Halo!
- 用户发送 Apa kabar, hai? → 匹配成功,回复 Halo!
- 用户发送 HALO → 不匹配(因未包含 ‘hai’),无响应
? 进阶建议(提升健壮性与可维护性):
const autoReplies = { 'hai': 'Halo!', 'halo': 'Hai juga!', 'terima kasih': 'Sama-sama ?', }; client.on("messageCreate", (message) => { if (message.author.bot) return; const key = message.content.trim().toLowerCase(); if (autoReplies[key]) { message.reply({ content: autoReplies[key] }); } });
最后,别忘了保留原有的 client.login(token) 调用。完整流程无需重启服务即可生效(开发阶段可结合 nodemon 提升调试效率)。
总结:自动回复的本质是「监听 → 过滤 → 匹配 → 响应」四步闭环。只要确保意图配置正确、权限开启到位、逻辑规避自触发,即可快速构建可靠的基础交互能力。后续可进一步集成正则表达式、模糊匹配或自然语言处理模块以支持更复杂的场景。