Изначально разрабатывался чтобы решить проблему со спамерами в чатах Вастрик.Клуба, но может использоваться и в чатах других форков, да и просто в любых больших чатах.
- Пользователи Клуба с привязанным ботом автоматически добавляются в доверенные
- При эвенте "пользователь вошёл в чат" выдаётся простенькая капча
- Если пользователь уже в доверенных, то все проверки пропускаются
- Если пользователь в известных списках спамеров - нафиг
- Если в сообщении многовато эмодзи - нафиг
- Если в сообщении есть слова, которые маскируются под русские но имеют английские буквы внутри - нафиг. Именно этот аспект сейчас затюнен в основном на русскоязычные чаты и может сработать на нормальные слова из языков которые пишутся кириллицей, но пока что все известные кейсы добавлены в тесты.
- Если в сообщении есть стоп-слова типа "заработок в сети" - нафиг
- Дальше сообщение очищается от эмодзи, пунктуации, диакритиков и скармливается ML. Если ML считает что спам - нафиг.
- Если пользователь написал несколько нормальных сообщений, он добавляется в доверенные - спамеры крайне редко "втираются в доверие" и обычно выдают всё первым-вторым сообщением
- Автоматически бот только удаляет сообщения, банятся пользователи только вручную из админки чтобы снизить урон ложнопозитивных срабатываний
-
- Кроме блеклиста. Такие банятся сразу, но это можно выключить
- Если кого-то в чате забанил не бот, в админку приходит уведомление, возможно бот пропустил спам и его стоит добавить в датасет
Все команды вызываются реплаем на другое сообщение
- /spam - добавляет сообщение в датасет спама
- /ham - добавляет сообщение в датасет не-спама
- /check - прогоняет сообщение через все проверки
Создаём чат-админку, запоминаем ID. Переменные среды:
- DOORMAN_BOT_API: Токен телеграм бота. Обязательно
- DOORMAN_ADMIN_CHAT: ID чата админки. Обязательно
- DOORMAN_CLUB_SERVICE_TOKEN: Сервис токен для Клуба, создаётся тут: https://vas3k.club/apps/. Если переменная не задана, автоматический аппрув людей из Клуба пропускается.
- DOORMAN_CLUB_URL: Базовый URL для форков Клуба, например https://rationalanswer.club/
- DOORMAN_BLACKLIST_AUTOBAN_DISABLE: Установить в true или 1 чтобы бот не банил людей (не из Клуба, не approved, из блеклиста) при заходе сразу
- DOORMAN_LOW_CONFIDENCE_HAM_ENABLE: Установить в true или 1 чтобы отсылать в админку не-спам который имеет низкий конфиденс скор, полезно для чатов где спамеры постоянно проверяют качество ML на прочность
- DOORMAN_CHANNELS_AUTOBAN_DISABLE: Установить в true или 1 чтобы бот не банил сообщения от имени каналов (кроме тех, которые привязаны к текущей группе)
- DOORMAN_APPROVE_BUTTON: Установить в true или 1 чтобы к каждому удалённому сообщению добавлялась опция "это свой, знакомый, завсегдатай"
- https://lols.bot/ за борьбу со спамерами и API для бан-листов
- https://github.com/umputun/tg-spam/ за некоторые идеи и три четверти датасета
If you're willing to do the heavy lifting of translating all the text of this bot to other languages, please let me know first before running headfirst and creating a PR.