You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:39:00