Twitch 垃圾邮件发送者消息过滤器

问题描述 投票:0回答:1

我正在使用 Node.js 上的机器人来管理 twitch 聊天。 我们遇到了一个问题,有时机器人会袭击我们的频道并发送垃圾邮件,例如:

  • 88|неodeтыe голышкuнсы в т_еле_ж̴eч_кe dosia739
  • гolышkи шkoднuчku в-телеграмчике : Juice644 |82
  • 87|rолышкu wkоlьницы в теlеграм4икe /recrenт361
  • 89|спуctuл cпeрму на tрусы шкодниц - тeлеrрам aunkerе450
  • 62 oтсосала охрaнниkу,чтобы tот пустил 6ез смeнки,чеkай синегрaм:buster824
  • 88 парни 13 lett дрочаat dруг дpугу при подруге в тгшноu recrеnt361
  • 84 clib wkolьниц в телеrе -> Juice644
  • JN шkодницы 6aлyются b тyалете wколы в t.елеге strоgo376
  • 124_rолышku шкоdничkи в-теlегрaмчиke : rerent361
  • Le педомамки е6ут новорoждённых маль4uкоb, смotри те-л-еrу > aunkere450
  • 87|cлuв нeодетыx wkoдниц b..телеге olyаshaa123
  • 87|отсосала оxpаннику,чтобы тот устил без сменки,4еkай сuнeграm / recrеnt361
  • rolые wкоlьницы в_teлеrраме recrеnt361 Ap
  • rоленькue голышkи b-tеleграмчиwе recrеnt361 |38
  • wd ра3dетые гоlышkи b teлеgege muмino531
  • Dw cлиb шкoльнuц b telеге -> strogo376
  • 123_лютая заnpеwенка со шкodницami , те-leграмчик miradota328
  • 124_cлив нeодетых шkоlодpыг в t.е.лege juicе644
  • rоlышки wkолодрыги b тeleграмчиke juicе584 YW
  • гоlенькиe wkoднuчки в телегpamище - аunkere450 |48
  • голенькие шkоднu4kи b телеграmищe juicе644 |6
  • 18 rоlыe шkodницы b телегe дosia739
  • hJ гolые шkolьницы в_tеlегpамe mixazver451
  • 123_неодеtыe wкodницы в-tе-леграmчukе olyashaа123
  • Tl гoленькиe гoлыwки_в_tеleгpаме - steel537
  • 15 rоlышки шкоdнuчkи в-телеrрамчukе General301
  • 11 rолышkи шкоlодрыru в teлеграмчuке strоgo376
  • oK clив шkoльниц b тeleграме мumino531
  • 93 lюtая̾ заnpещенка со шкодницами , те-лerрамчuк juicе584
  • 124_oдноkлaсснuk e6ет 15 lетнюю в те_ле_rе > rosтislav441
  • Jv наказала сына и засtавиlа ли3aть пя̾ткu в этоm т.r. tx740

我不了解这些消息与普通聊天用户的相似之处以及如何区分这些消息

我现在的做法是添加最后一个字母和数字来检查它是否包含在消息中,但我认为它对未来不可靠,并且仅在垃圾邮件发生后才起作用

if (
    text.toLowerCase().includes('a739') ||
    text.toLowerCase().includes("e644") ||
    text.toLowerCase().includes("e450")
    //etc.
  ) {
    await apiClient.asUser(
      nyaka,
      async (ctx) =>
        await ctx.moderation.banUser(msg.channelId, {
          reason: `${user}: ${text}`,
          user: msg.userInfo.userId,
        })
    );
javascript node.js filter text twitch-api
1个回答
0
投票

只需检查句子中有多少个西里尔字母。如果它们超过阈值,请将其过滤掉。

在下面的示例中,您可以过滤掉包含超过 70% 西里尔文字的任何消息。

const messages = [
  'Привет, мир!',
  'Hello, world!',
  'Привет. How are you today?'
];

const validMessages = messages.filter(msg => !exceedsThreshold(msg, 0.7));

console.log({ validMessages });

function countCyrillicCharacters(str) {
  return str.match(/[А-Яа-яЁё]/g)?.length ?? 0;
}

function exceedsThreshold(text, threshold=0.1) {
  const ratio = countCyrillicCharacters(text) / text.length;
  console.log({ text, ratio });
  return ratio > threshold;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }

© www.soinside.com 2019 - 2024. All rights reserved.