лого
лого

Привет, Хабр!

В апреле я рассказывал, как написал антиспам-бота для Telegram на собственной нейросети. Тогда у бота были две команды для админов, ручное переключение режимов и обещание «когда-нибудь сделать публичный дашборд».

С тех пор прошло полгода. Бот всё так же бесплатный и всё так же пет-проект, который я допиливаю по вечерам. Но вокруг него наконец-то появилось нормальное окружение, а имеено сайт со статистикой, понятная инструкция и личный кабинет прямо в Telegram.

Коротко для тех, кто не читал первую статью: TAB (Telegram Antispam Bot) - бот, который сам находит и удаляет спам в чатах. Сообщения проверяет LSTM-модель с механизмом внимания, обученная на моей же библиотеке LANCETNIC. Готовые модели с HF я не брал - хотелось сделать свою модель.

Был дашборд, стал сайт

Первая версия tab.lancetnic.ru была честным дашбордом «для себя»: пара цифр и график. Теперь это полноценная страница проекта, на которую не стыдно дать ссылку админу незнакомого чата.

Динамика спама
Динамика спама

Что там есть:

  • Живая статистика. Сколько спама удалено, сколько спамеров забанено, сколько чатов использует бота. Данные обновляются сами, внизу видно, на какой момент они актуальны.

  • Карточки с метриками. Помимо общих цифр: прирост за 7 дней и сравнение с прошлой неделей, общее число сообщений, доля спама в трафике и процент ошибок.

  • График «Динамика спама» с переключателем периода: 7 дней, 30 дней, полгода, год или за всё время.

  • Тепловая карта спама по дням недели и часам.

Немного цифр

На момент написания статьи бот состоял в 68 чатах. Через него прошло 527 554 сообщения, из них 13 422 оказались спамом - это 2,54 % трафика (примерно каждое 39-е сообщение). Забанено 11 193 спамера. Процент ошибок у модели: 0,39 %.

Тепловая карта: спамеры работают по графику

Самое любопытное на сайте - тепловая карта. Похожий анализ я уже делал в декабре 2025, когда подводил итоги года. Теперь он доступен всем и считается в реальном времени.

Тепловая карта спам сообщений
Тепловая карта спам сообщений

Картина не меняется уже год. Спамеры активны с 8 до 18 по Москве, пик - около полудня в будни. Ночью почти тишина, в выходные заметно спокойнее, воскресенье - самый лайтовый день. В общем, у ботоферм вполне человеческий рабочий день. Видимо, они ориентированы на Центральный федеральный округ.

Инструкция, которую можно прочитать за пять минут

Раньше инструкция жила одним постом в Telegram-канале. Пост рос, обрастал уточнениями и в какой-то момент превратился в простыню. Вопросы в комментариях были одни и те же: «почему бот молчит?», «почему не тегает админов?».

Поэтому я переписал её с нуля и вынес на сайт: tab.lancetnic.ru/manual. Теперь это четыре шага со скриншотами и раздел частых вопросов.

  1. Добавить бота в чат и выдать ему права «Удаление сообщений» и «Блокировка пользователей». Этого уже достаточно, дальше тонкая настройка.

  2. Настроить чат через личный кабинет /lk: выбрать режим работы.

  3. Настроить белый список - кого бот не трогает (доверенные пользователи, рекламщики и т.д.)

  4. Команды для участников: /spam в ответ на подозрительное сообщение зовёт админов, /help показывает справку.

То самое сообщение
То самое сообщение

Отдельно расписал оба режима. Это самое частое, что у меня спрашивают.

  • Автоматический. Нейросеть проверяет каждое сообщение, спам удаляется сразу.

  • Стандартный. При подозрении на спам бот зовёт модераторов. Они жмут «✅ Это не спам» или «❌ Это спам». Первая кнопка оставляет сообщение и добавляет запись в датасет для дообучения, вторая удаляет сообщение и банит автора.

В обоих режимах бот банит автоматически, только если сработали два условия сразу: пользователь есть в глобальной базе спамеров и модель признала сообщение спамом. Так я страхуюсь от ложных банов.

Личный кабинет /lk и белый список

Это главное обновление которое произошло в октябре этого года. Раньше режим переключали командами /handbot и /autobot прямо в чате. Работало, но неудобно: команда видна всем участникам, а если у вас пять чатов, то пишешь пять раз.

Теперь всё управление переехало в личку с ботом.

Как это работает

  1. Пишете боту в личные сообщения /lk.

  2. Бот показывает список чатов, где вы создатель.

  3. Выбираете чат и в один клик меняете режим или открываете белый список.

Пока кабинет доступен только владельцам чатов, не всем администраторам. Остальным админам пока придётся попросить владельца.

Белый список

О нём просили давно. Типичная ситуация: в чате есть рекламодатель, который сотрудничает с админами, а бот честно режет его посты как спам. Или активный участник, чьи сообщения модель иногда путает с рекламой.

Теперь таких людей можно добавить в белый список. Бот их полностью игнорирует: сообщения не проверяются и не удаляются.

Добавить можно двумя способами:

  • отправить боту числовой ID пользователя;

  • переслать боту любое сообщение этого человека. Так проще: ID узнавать не нужно.

Удаляется пользователь так же. Кнопка «Показать список» выводит до 20 человек из белого списка чата.

Один нюанс: сообщения владельца и администраторов бот и так не проверяет так как они по умолчанию доверенные лица. Белый список нужен для всех остальных: модераторов без админских прав, доверенных участников, других ботов.

Что ещё поменялось под капотом

Сайт и кабинет, это только то, что видно. Но большая часть работы за полгода ушла на невидимое.

Модель. Летом я два месяца не дообучал модель. Как оказалось зря. Спамеры креативят быстрее, чем кажется, и бот начал пропускать откровенный спам. В июле собрал свежий датасет на 30 000 строк. Для класса «не спам» добавил комментарии из городских пабликов ВКонтакте, чтобы разнообразить обычную человеческую речь.

Потом было ещё несколько дообучений. В одном из них вместо оптимизатора Adam попробовал RAdam. Теперь смотрю, как он ведёт себя в проде.

Разметка руками админов. Кнопки «Это спам» / «Это не спам» в стандартном режиме по-прежнему кормят датасет. Так что админы чатов, сами того не зная, участвуют в обучении модели=). Спасибо им!

Третий уровень проверки. Раньше вердикт складывался из двух этапов: модель и база спамеров. Теперь их три. Что именно проверяется на третьем, не расскажу, иначе его быстро научатся обходить.

Сложные сообщения. Был тип спама, из которого бот не мог вытащить текст, чтобы отдать его модели. За полгода таких сообщений стало заметно больше, и на них начали жаловаться. В сентябре, кажется, получилось это победить. Пока осторожно оптимистичен.

Логи. Переписал логирование. Звучит скучно, но без этого невозможно разобрать спорный случай и понять, за что забанили человека. С июня 2025 таких случаев было два: пользователь числился в базе спамеров, а его сообщение модель приняла за спам.

Рефакторинг. Переписал обращения к модели и базе. Пользователю это незаметно, зато бот спокойно переживёт кратный рост числа чатов.

Что дальше

  • Спам на картинках. Самая больная тема. Спамеры всё чаще шлют текст картинкой или стикером, и модель для текста его просто не видит. Я протестировал Tesseract, EasyOCR и RapidOCR и ни один нормально не справился. Справились LLM (пробовал Qwen), но локально их не запустить, а API в месяц выйдет недёшево. Тут я пока не знаю что делать. Как вариант писать и обучать свою модель под задачу работы с изображениями, но я закопаюсь. Работу никто не отменял основную мою)

  • Архитектура модели. Хочу пересобрать её с учётом всего, что накопилось за полтора года работы. Есть подозрение что мой LSTM не работает как LSTM (возможно напишу подробную статью как решу вопрос).

  • Сайт. Дашборд буду расширять дальше. В планах веб-версия личного кабинета, чтобы настраивать чат и из браузера.

  • Техподдержка. Пока все вопросы в комментариях под инструкцией в канале. Позже появится что-то нормальное.

В Ы В О Д Ы

Я по-прежнему не считаю TAB «убийцей всего спама». Это пет-проект, который я делаю в свободное время. Но он работает в 68 чатах и уже удалил больше 13 тысяч спам-сообщений. Для домашнего проекта, начатого в чате автовладельцев, по-моему, неплохо.

Больше всего проекту помогает обратная связь. Каждая жалоба «бот пропустил вот это» в итоге превращается в строку датасета и делает модель чуть точнее. Так что если попробуете бота - пишите, что не так.

Если захотите посмотреть поближе:

Критику жду в комментариях =)

Комментарии (0)