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

从文本文件提取命中敏感词实现消息自动过滤功能异常问题咨询

问题修复方案

核心问题根因

  • 敏感词读取分割后没有做空白过滤:用split("\n")分割文件内容后,若文件存在末尾空行、每行首尾残留空格,会产生空字符串元素。任意字符串调用includes('')都会返回true,会直接导致所有敏感词都被判定为命中,出现全量推送的问题。
  • 匹配逻辑重复且大小写规则不一致:筛选blocked数组时你将消息内容转小写做匹配,后续遍历blocked时又用原始大小写的消息内容做二次校验,既冗余又容易出现大小写不匹配的漏判。
  • 重复执行操作:遍历blocked数组时每遍历一个敏感词就执行一次消息删除、一次通知发送,会触发重复删消息报错、重复推送通知的问题。

修复后代码

const fs = require('fs');
// 读取敏感词并做预处理:修剪空白、过滤空行
const badwords = fs.readFileSync("./badwords.txt","utf8")
  .toLowerCase()
  .split("\n")
  .map(word => word.trim())
  .filter(word => word); // 过滤空字符串

// 匹配得到所有命中的敏感词
const blocked = badwords.filter(word => message.content.toLowerCase().includes(word)); 

if (blocked.length) {
  // 仅命中时执行操作,加错误捕获避免删除已失效消息报错
  message.delete().catch(err => console.error('消息删除失败:', err));
  // 一次性拼接所有命中敏感词发送通知
  log_channel.send(`消息已删除,命中敏感词:${blocked.join('、')}`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:18:03