使用JavaScript开发Discord Bot如何让相似消息回复相同内容并修复重复回复问题?
问题原因
- 你的
if条件写法错误:if (msg.content === 'hello', 'hey')使用了逗号运算符,最终判断值永远是真值'hey',所有消息都会触发回复 - 没有过滤机器人自身发送的消息:机器人发送的回复会再次触发消息事件,造成循环触发重复回复
- 你使用的是discord.js v13及以上版本,旧的
message事件已经废弃,改为messageCreate事件,旧事件存在重复触发的兼容问题 - 未做大小写不敏感处理,无法匹配大小写不同的相同提问
修复方案
修改后的代码如下:
import { Client, Intents } from 'discord.js' const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); client.on("ready", () => { console.log("Log In Successful!!") }) // 改用v13+支持的messageCreate事件 client.on("messageCreate", msg => { // 先过滤所有机器人发送的消息,避免循环触发 if (msg.author.bot) return; // 将用户消息转小写,匹配关键词实现大小写不敏感,用数组includes判断是否命中触发词 const triggerKeywords = ['hello', 'hey', 'who are you']; const lowerCaseMsg = msg.content.trim().toLowerCase(); if (triggerKeywords.includes(lowerCaseMsg)) { msg.reply("hi"); } }) client.login(process.env.TOKEN)
修改说明
- 新增
if (msg.author.bot) return逻辑,直接跳过所有机器人发送的消息,从根源避免循环回复 - 修复了条件判断逻辑,改用数组
includes方法判断消息是否命中触发词,避免逗号运算符导致的恒真问题 - 新增
trim()去除消息前后多余空格,toLowerCase()将消息统一转小写,实现大小写不敏感匹配,同时支持添加更多触发关键词到triggerKeywords数组中 - 将废弃的
message事件替换为官方推荐的messageCreate事件,兼容v13+版本的调用逻辑 - 删除了无用的重复
Discord导入,精简代码
内容的提问来源于stack exchange,提问作者Artificial Intellegence
相关产品推荐
相关产品推荐

