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

如何让Node.js开发的Discord机器人删除含特定词汇的消息?

解决Discord机器人误删消息及过滤不良词汇问题

你的代码存在三个核心问题:

  • 错误绑定了messageDelete事件:这个事件是消息被删除后才触发的,此时再调用删除操作完全无效,逻辑完全颠倒,这也是你出现误删问题的根源。
  • 未正确调用删除方法:message.delete只是引用了方法本身,必须加括号message.delete()才会执行删除操作。
  • 匹配逻辑过于严格:===是完全相等匹配,只能检测内容和"Bad word"完全一致的消息,无法识别包含该词汇的内容。

正确的实现代码(以Discord.js v14+为例):

client.on("messageCreate", async (message) => {
  // 跳过机器人自身消息,避免循环处理
  if (message.author.bot) return;

  // 定义需要过滤的不良词汇列表
  const forbiddenWords = ["Bad word", "其他违规词汇"];

  // 检查消息是否包含任一不良词汇,支持大小写不敏感匹配
  const hasForbiddenWord = forbiddenWords.some(word => 
    message.content.toLowerCase().includes(word.toLowerCase())
  );

  if (hasForbiddenWord) {
    try {
      // 删除违规消息
      await message.delete();
      // 可选:向用户发送违规提示(需确保机器人有频道发言权限)
      await message.channel.send(`${message.author},你的消息包含违规内容,已被系统删除。`);
    } catch (err) {
      console.error("处理违规消息时出错:", err);
    }
  }
});

关键说明:

  • 使用messageCreate事件:这是Discord.js v14及以上版本中监听用户新消息的标准事件(旧版Discord.js使用message事件)。
  • 跳过机器人消息:防止机器人处理自己发送的提示消息,引发无限循环。
  • 灵活的匹配逻辑:通过includes检测包含关系,结合toLowerCase()实现大小写不敏感的过滤,覆盖更多违规场景。
  • 异步处理:message.delete()是异步操作,必须用await等待执行完成,避免出现Promise未处理的报错。
  • 异常捕获:加入try-catch块处理权限不足、消息已被删除等异常情况,避免机器人崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:11