Аккаунт, который вы собираетесь забанить, вступил девять минут назад. Его первое сообщение — набор стикеров: двенадцать штук подряд, каждый рекламирует казино-канал. Вы их вычищаете, и не успеваете закончить, как другое новое имя вываливает стену эмодзи, а третье пишет строку текста, безобидную на вид, пока не заметишь: «буквы» в ней — премиум-эмодзи, ведущие куда-то ещё. Три аккаунта, три совершенно разных вброса, и ни одного из них — не ссылка.
Вот что на практике обычно стоит за запросом спам в телеграм группе: не одна проблема с одним решением, а несколько типов сообщений, каждый из которых глушится по-своему. Фильтр ссылок, за который хватаются первым, покрывает от силы треть.
Спам — это тип сообщения, а не только ссылка
Полезно перестать считать «спам» чем-то одним. В живой группе он приходит в разных формах, и каждая обходит свою слепую зону:
- Потоки стикеров. Десяток стикеров подряд, обычно с рекламой другого канала. Для Telegram стикер — вложение, а не текст, поэтому фильтр по словам его не видит вообще.
- Стены эмодзи. Первое сообщение из сорока эмодзи и ничего больше — или одно огромное, размноженное вступившим кластером. Слов для совпадения нет, ссылки для блокировки нет.
- Реклама премиум-эмодзи. Самое подлое. Премиум-эмодзи показывает одну картинку, а в тексте едет обычным символом-заглушкой — глаз видит рекламу, фильтр стоп-слов видит пустоту.
- Флуд повторами. Один аккаунт, одна строка шесть раз за десять секунд. Каждая копия сама по себе «чистая»; выдаёт только частота.
- Скрытые ссылки. Адрес спрятан за словом вроде «сюда», так что ничего похожего на ссылку в чате не видно.
- Сброс медиа. Очередь картинок или пересланных видео там, где группа ждёт слов.
Обычный спам ссылками — отдельная, хорошо изученная категория, и если воюете в основном с ним, подробная версия живёт в статье как остановить спам ссылок в Telegram-группе. Всё, что выше, — то, чего та статья не касается и что встроенные средства Telegram тихо игнорируют.
Почему встроенных средств Telegram не хватает
Владельцу группы Telegram даёт три инструмента, и каждый кончается рано. Права участников отключают ссылки, стикеры или медиа сразу для всех — заодно наказывая тех, кого вы хотели оставить. Встроенный агрессивный антиспам включается в супергруппах от 200 участников, но это чёрный ящик: логику не видно, настроить нельзя, а про участника, который тридцать раз повторил одну строку, у него нет никакого мнения. Ручной бан хорош ровно до того момента, когда три аккаунта с тремя разными вбросами появляются за минуту.
Проблема не в том, что Telegram не делает ничего. А в том, что группе нужно разбираться с каждым типом спама по-своему — здесь разрешить стикеры, но не ссылки, там блокировать сообщения из одних эмодзи, — а встроенные переключатели умеют только «всё или ничего».
Одно правило на тип, одна реакция на правило
TGuard запускает отдельный антиспам-движок, который судит сообщения, а не аккаунты. Он выключен, пока вы его не включите, и каждое правило задаётся для конкретного чата. В этом и весь смысл: «без стикеров» уместно в чате поддержки и неуместно в мем-чате, и вы не должны выбирать одну политику на оба.
У каждого правила своя реакция из четырёх уровней:
- Выключено — правило не смотрит.
- Записывать — фиксирует совпадение, но ничего не трогает. Отсюда должно начинаться любое новое правило.
- Удалять — сообщение уходит, отправитель остаётся.
- Удалять и банить — уходит и сообщение, и аккаунт.
Стоп-слова идут на уровень тоньше: реакция задаётся для каждого слова, поэтому казино может банить на месте, а бесплатно — только записывать, пока вы не посмотрите, что оно ловит. Эта разница важнее, чем кажется: она отделяет фильтр, которому доверяешь действовать самому, от того, который боишься включить.
Движок читает каждое сообщение, а не выборку — около 230 000 в секунду на тестах, — поэтому нет смысла проверять только подозрительные. Судятся все, и всё, что совпало, попадает в лог.
Что именно ловит каждое правило
Вот рабочий набор в том порядке, в каком к нему обычно приходят.
Стоп-слова. Ваш список, до 500 на чат, совпадение по подстроке или по слову целиком. Подстрока ловит airdrop внутри airdropbot; слово целиком не даёт кэш сработать на кэшбэк. К каждому слову можно добавить заметку и выключить его, не удаляя, — вы не теряете правило, на которое потратили время.
Ссылки, включая скрытые. Любая ссылка — https://, www., пути t.me и telegra.ph, которые права участников игнорируют, и голые домены без схемы. Ловит и адрес, спрятанный за словом, когда никакого URL в чате не видно. Тема ссылок сама по себе достаточно глубокая, чтобы иметь отдельную статью.
Частота сообщений. Больше N сообщений от одного отправителя за окно — пять за десять секунд по умолчанию, настраивается вплоть до тысячи в час. Это правило идёт первым и считает каждое сообщение, даже те, что другое правило вот-вот удалит, поэтому счётчик флуда никогда не занижает.
Стикеры. Стикер здесь — отдельный тип сообщения, намеренно отделённый от фото и видео. Чат, которому нормальны картинки, всё равно может заглушить рекламу стикер-паками, не задев тех, кто присылает скриншоты.
Эмодзи вместо слов. Срабатывает на сообщение, в котором нет ничего, кроме эмодзи — одно гигантское, стена из сорока, флаг, цифра-в-рамке, составные «семья + тон кожи», которые на деле стопка скрытых символов. ок 👍 оно не трогает; потоки реакций из одних эмодзи — убирает. И охватывает премиум-эмодзи, которые едут в тексте обычной заглушкой и иначе прошли бы мимо любого фильтра слов.
Медиа и аудио. Два отдельных переключателя, потому что чат, банящий сброс картинок, часто не против голосовых, и наоборот. Правило смотрит только на факт вложения и его тип — файл никто не открывает.
Известный абьюзер. Бот уже знает, какие аккаунты злоупотребляли в других ваших чатах. Считать ли это спамом само по себе — ваше решение для каждого чата: у одного владельца это мгновенный бан, у другого — строка в логе.
Сначала читайте лог, потом разрешайте кусаться
Самая полезная привычка скучна: переведите новое правило в записывать и оставьте на несколько дней. Каждое срабатывание попадает на страницу, которую можно прочитать, — отправитель, сработавшее правило, что сделала реакция, и сам текст сообщения, сохранённый даже когда ничего не удалялось. Вы узнаёте, что правило удалило бы, до того как доверите ему удалять, — так и ловится ложное срабатывание, которое забанило бы завсегдатая за увлечённую очередь эмодзи.
Настройки живут на своей странице, одна постоянная ссылка на чат, её можно сохранить в закладки или передать со-админу. Добавленное слово действует уже на следующее сообщение — без ожидания и перезапуска.
Как настроить
- Откройте @channel_guardian_bot и добавьте бота в группу администратором с правом удалять сообщения и банить.
- Откройте страницу защиты чата из меню бота.
- Включите правила под вашу проблему — стикеры и эмодзи против потоков реакций, частоту против флуда повторами, ссылки против URL-спама.
- Каждое новое правило сначала на
записывать. Не пропускайте этот шаг. - Через несколько дней прочитайте лог срабатываний. Посмотрите, что поймало каждое правило и что оно удалило бы.
- Правила, которым доверяете, переведите на
удалятьилиудалять и банить, а в список стоп-слов добавьте точные слова, которые повторяют ваши спамеры.
Спам кажется тем, за чем нужно сидеть и следить, потому что вброс всё время меняет форму. Это необязательно. Дайте каждой форме своё правило, дайте логу показать вам, что реально, — и группа наводит порядок сама, пока вы заняты другим.
Частые вопросы
Дать каждому типу спама своё правило. Антиспам-движок TGuard смотрит на каждое сообщение и реагирует на ссылки, стоп-слова, частоту сообщений, стикеры, сообщения из одних эмодзи, премиум-эмодзи, медиа и аудио. У каждого правила своя реакция, которую вы задаёте для чата — записывать, удалять или удалять и банить, — поэтому группа остаётся чистой без ручного чтения каждого сообщения.
Лишь отчасти. Агрессивный антиспам работает в супергруппах от 200 участников, но вы не видите, как он решает, и не можете его настроить, а целые категории он пропускает — потоки стикеров, стены эмодзи, рекламу премиум-эмодзи. И на флуд одной строкой ему сказать нечего. Настраиваемый движок, который разбирает каждый тип сообщения отдельно, эти пробелы закрывает.
Включить правило стикеров и правило эмодзи. TGuard считает стикер отдельным типом сообщения, поэтому чат, где разрешены фото, всё равно может блокировать наборы стикеров. Правило эмодзи срабатывает на сообщение, в котором нет ничего, кроме эмодзи — включая одно огромное, — и ловит премиум-эмодзи, которые читаются как обычный текст и проходят мимо фильтра по словам.
Да. Поставьте реакцию правила на удаление или на удаление с баном, и TGuard срабатывает в момент совпадения — без ручной модерации. Каждое новое правило первые несколько дней держите на «записывать»: каждое срабатывание фиксируется вместе с отправителем и текстом, поэтому вы видите, что правило удалило бы, до того как разрешите ему действовать.
Только если вы так настроите. Каждое правило выключено, пока вы его не включите, и действует в пределах одного чата, поэтому правило ссылок, уместное в канале объявлений, остаётся выключенным в чате разработчиков. Режим «записывать» позволяет неделю наблюдать за правилом до того, как оно начнёт удалять, — это честный способ отсеять ложные срабатывания.