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

如何检测数组中的重复序列以识别应用内selfbot用户行为

数组指定重复序列检测实现方案

你之前实现的单个元素出现次数统计,只能判断单个字符的出现频率,无法确认这些字符是否按照固定顺序连续出现,因此不能满足固定序列的检测需求。要识别selfbot发送的周期性重复消息,你可以按以下方案实现:

1. 基础序列匹配功能

核心思路是遍历待检测数组,逐个位置和目标序列做全量匹配,统计目标序列的出现次数,代码实现如下:

// 定义待匹配的目标重复序列
const targetSequence = ["a", "b", "c", "f", "b"];
// 用户消息对应的字符数组
const userMessageArray = ["a", "b", "c", "f", "b", "a", "b", "c", "f", "b", "a", "b", "c", "f", "b", "a", "b", "c", "f", "b", "a", "b", "c", "f", "b"];

/**
 * 统计目标序列在源数组中的出现次数
 * @param {Array} sourceArr 待检测的源数组
 * @param {Array} targetSeq 要匹配的目标序列
 * @returns {Number} 目标序列的出现次数
 */
function countSequenceMatch(sourceArr, targetSeq) {
  const sourceLen = sourceArr.length;
  const targetLen = targetSeq.length;
  let matchCount = 0;

  // 源数组长度比目标序列短,不可能匹配直接返回0
  if (sourceLen < targetLen) return 0;

  for (let i = 0; i <= sourceLen - targetLen; i++) {
    let isMatch = true;
    // 从当前位置开始逐个对比目标序列元素
    for (let j = 0; j < targetLen; j++) {
      if (sourceArr[i + j] !== targetSeq[j]) {
        isMatch = false;
        break;
      }
    }
    if (isMatch) {
      matchCount++;
      // 匹配成功后跳过已匹配的位置,避免重叠计数,符合selfbot整段重复发送的特征
      i += targetLen - 1;
    }
  }
  return matchCount;
}

// 测试调用
const resultCount = countSequenceMatch(userMessageArray, targetSequence);
console.log(resultCount); // 示例数组返回结果为5,即目标序列重复了5次

2. Selfbot检测逻辑优化

为了提升检测准确率,降低误判概率,你可以配合以下规则一起判定:

  • 设定重复次数阈值:比如目标序列连续重复超过3次即可判定为异常,你提供的示例中序列重复了5次,明显符合自动发送的bot特征
  • 追加时间维度校验:如果这些序列对应的消息发送时间间隔完全一致或者误差极小,几乎可以100%判定为selfbot自动发送
  • 结合账号历史行为判断:排除用户手动发送固定暗号、刻意刷屏的特殊场景,结合账号之前的发送习惯综合判定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:10