基于Node.js的Twitch聊天机器人垃圾消息过滤优化问询
针对Twitch垃圾机器人的高效过滤方案
当前方案的核心问题
你现在采用的逐个添加后缀匹配的方式属于事后被动防御,只能在垃圾消息出现后手动补全规则,不仅效率低下,还极易被垃圾机器人通过更换后缀快速绕过,长期可靠性完全无法保障。
先提炼垃圾消息的共性特征
从你遇到的情况来看,这类垃圾机器人消息通常有以下共性,可作为过滤依据:
- 包含固定格式的后缀(如
a739、e644这类字母+3位数字的组合) - 发送账号多为新注册账号(创建时间短、无粉丝积累、无历史发言记录)
- 短时间内批量发送,或同一内容重复推送
- 内容多为违规广告、无意义乱码,和正常用户发言逻辑不符
多维度的高效过滤方案
1. 用正则表达式匹配通用后缀模式
不用逐个添加后缀,直接匹配这类字母+数字的组合格式,覆盖同类型的所有后缀:
// 匹配"字母+3位数字"结尾的模式,i表示忽略大小写 const spamSuffixRegex = /[a-zA-Z]\d{3}$/i; if (spamSuffixRegex.test(text)) { await apiClient.asUser( nyaka, async (ctx) => await ctx.moderation.banUser(msg.channelId, { reason: `${user}: ${text}`, user: msg.userInfo.userId, }) ); }
如果后缀格式有变化(比如数字和字母顺序调换、长度改变),可调整正则规则,比如/[a-zA-Z\d]{4}$/i可匹配任意4位字母数字混合的结尾。
2. 从账号维度做前置过滤
垃圾机器人基本都是新注册的小号,可通过Twitch API获取账号信息做判断:
// 获取当前发言用户的详细信息 const userDetails = await apiClient.users.getUserById(msg.userInfo.userId); const accountAge = Date.now() - new Date(userDetails.createdAt).getTime(); const oneDay = 24 * 60 * 60 * 1000; // 1天的毫秒数 // 结合账号年龄和消息内容判断:注册不满1天+匹配垃圾后缀,直接封禁 if (accountAge < oneDay && spamSuffixRegex.test(text)) { await apiClient.asUser( nyaka, async (ctx) => await ctx.moderation.banUser(msg.channelId, { reason: "新账号发送垃圾消息", user: msg.userInfo.userId, }) ); }
3. 消息频率/重复度检测
维护一个简易缓存,检测同一账号短时间内的重复发言或高频发送行为:
// 用Map缓存用户最近一次发言的时间,过期时间设为5分钟 const userMessageCache = new Map(); const now = Date.now(); const cacheExpiry = 5 * 60 * 1000; // 清理过期缓存 userMessageCache.forEach((timestamp, userId) => { if (now - timestamp > cacheExpiry) { userMessageCache.delete(userId); } }); // 检测:用户5分钟内发过消息+当前消息匹配垃圾后缀,直接封禁 if (userMessageCache.has(msg.userInfo.userId) && spamSuffixRegex.test(text)) { // 执行封禁逻辑 } else { userMessageCache.set(msg.userInfo.userId, now); }
4. 关键词组合过滤
如果垃圾消息包含固定违规话术,可搭配关键词列表做双重验证:
const spamKeywords = ["免费代练", "刷粉丝", "抽奖链接"]; // 根据实际违规内容补充 const hasSpamKeyword = spamKeywords.some(keyword => text.toLowerCase().includes(keyword)); // 匹配后缀或关键词,任一条件触发封禁 if (hasSpamKeyword || spamSuffixRegex.test(text)) { // 执行封禁逻辑 }
进阶优化方向
- 收集垃圾消息和正常消息样本,用TensorFlow.js训练简单的文本分类模型,实现自动识别
- 开启Twitch内置的自动审核工具,配合自定义规则使用,减少手动开发的工作量
内容的提问来源于stack exchange,提问作者nyakawaiiidesu
相关产品推荐
相关产品推荐

