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

Discord bot如何避免响应自身消息 无需每条命令单独加校验

解决方案

方案1:前置拦截过滤所有bot消息(最高效,适合绝大多数场景)

你只需要在message事件回调的最开头添加提前返回逻辑,所有bot发送的消息会被直接拦截,不会进入后续的命令判断逻辑,完全不需要在每个命令的条件里重复加校验:

client.on("message", message => {
  // 所有bot发送的消息直接跳过处理
  if (message.author.bot) return;

  // 后续命令逻辑不需要再加bot校验
  if(message.content === "ping"){
    message.channel.send("pong")
  } else if(message.content === "pong"){
    message.channel.send("ping")
  }
})

*提示:如果你使用的是discord.js v13及以上版本,原message事件已被废弃,替换为messageCreate事件即可,拦截逻辑完全不变。

方案2:命令逻辑抽离为映射表(适合命令较多的项目)

如果后续会加大量命令,可以把触发关键词和对应的处理逻辑抽成键值对,代码可维护性更高:

// 定义命令映射,key为触发的消息内容,value为对应的处理函数
const commandMap = {
  ping: (message) => message.channel.send("pong"),
  pong: (message) => message.channel.send("ping")
}

client.on("message", message => {
  if (message.author.bot) return;
  // 匹配到对应命令就执行
  if (commandMap[message.content]) {
    commandMap[message.content](message)
  }
})

内容的提问来源于stack exchange,提问作者IHZAQ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04