Все посты
12 мин чтения

Как настроить фильтр по словам в Telegram-группе

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

В любом живом чате рано или поздно начинает повторяться одно и то же: «пишите в личку», «продам аккаунт», объявления об обмене крипты. Чистить это руками утомительно, а держать круглосуточного модератора незачем — с такой рекламой и спамом справляется фильтр по словам: бот сам удаляет сообщения, в которых нашлись нужные слова.

В Scarabeus этот фильтр называется фразовой модерацией. В отличие от ИИ-правил здесь нет догадок: правило либо нашло слова в сообщении, либо нет. Поэтому фразы удобны там, где формулировки предсказуемы, а цена ошибки высока.

При этом фразовое правило — не просто список запрещённых слов: конструктор собирает его из фрагментов, связанных между собой. Ниже — что означает каждая связь, как они сочетаются и почему одно и то же правило иногда ведёт себя не так, как ожидаешь. Все примеры с результатами «поймает» и «пропустит» проверены на том же механизме, который работает в боте.

Где настраиваются стоп-слова в Telegram-группе#

Раздел Модерация → карточка «Модерация по фразам». На самой карточке — переключатель, который включает и выключает весь блок, а кнопка «Настроить» открывает наборы правил.

Карточка «Модерация по фразам» в разделе «Модерация»

Сводка на карточке сразу показывает, сколько наборов и правил включено и в скольких наборах ещё не заданы санкции.

Правила живут внутри наборов. Набор — это тематическая пачка: «Крипта», «Реклама каналов», «Мат». Смысл деления не косметический: цепочка наказаний привязана к набору, поэтому реклама и оскорбления могут наказываться по-разному и не смешивать счётчики нарушений.

Как собрать первое правило#

Внутри набора нажмите «Добавить правило». Правило собирается из фрагментов двух видов:

  • фраза — конкретные слова, которые ищем в сообщении;
  • число — любая последовательность цифр, отображается как «любое число».

Между соседними фрагментами всегда стоит связь — ИЛИ или И. Кнопка «Добавить фрагмент» добавляет следующий кусок, «Сгруппировать» объединяет соседние фрагменты в группу.

Редактор правила: группа «куплю ИЛИ продам», связь И с расстоянием 10 и фраза «крипту»

Сверху редактора всегда висит превью — оно показывает, как правило прочитается на самом деле.

Возьмём для примера набор «Крипта»: в чате про настольные игры объявления об обмене валют не нужны. Самое простое рабочее правило — одна фраза:

Оно поймает прямые объявления и пропустит всё, что сформулировано иначе. Дальше начинается то, ради чего нужен конструктор.

И — обе части должны быть в сообщении#

Связь И означает, что в тексте должны встретиться оба фрагмента. Рядом со связью появляется поле «До n символов» — максимальное расстояние между ними.

  • Поймает: «обмен usdt по выгодному курсу».
  • Поймает: «usdt на обмен» — без строгого порядка неважно, какое слово идёт первым.
  • Пропустит: «обмен стикерами проходит каждую пятницу в нашем клубе настольных игр, а вопросы про usdt задавайте в другом чате» — между словами больше 40 символов.

ИЛИ — достаточно любой из частей#

Связь ИЛИ срабатывает, если найдена хотя бы одна из соседних частей:

  • Поймает: «куплю слона» — ИЛИ не требует ничего, кроме одного из слов, поэтому такое правило широкое.
  • Пропустит: «меняю марки».

Важная тонкость: ИЛИ связывает сильнее, чем И. Вот это правило:

читается как «обмен или p2p — и рядом usdt», а не как «либо обмен, либо p2p рядом с usdt». Явно та же связка выглядит так:

  • Пропустит: «обмен стикерами» — слово «обмен» само по себе ничего не ловит, ему тоже нужен «usdt» неподалёку.
  • Поймает: «p2p usdt» и «обмен usdt».

Если нужна другая группировка — выделите части кнопкой «Сгруппировать», тогда сначала ищется совпадение внутри группы, а уже его результат связывается с остальными фрагментами. Групп в правиле может быть несколько, но группа внутри группы недопустима.

Число — любые цифры#

Фрагмент «любое число» подставляется вместо любой последовательности цифр: суммы, количества, номера. Он нужен там, где слова предсказуемы, а числа — нет:

  • Поймает: «продам за 500», «отдам 2 штуки».
  • Пропустит: «продам совет» — цифр в нём нет.

«До n символов»: два подвоха#

Первый: 0 означает «без ограничения», а не «вплотную». Это самая частая ошибка. Если поставить 0, фрагменты просто должны где-то встретиться в сообщении — хоть в первой строке и в последней.

Второй: расстояние считается по тексту, из которого уже убраны пробелы.

  • Поймает: «некрипта», «не крипта» и «не кpиптa», где «p» и «a» написаны латиницей — пробелы удаляются, подменённые буквы возвращаются к кириллице, и во всех трёх случаях расстояние равно нулю.

Поэтому ограничение покрывает заметно больше, чем кажется на глаз. Правило обмен И ≤40 usdt из раздела выше поймает и «обмен стикерами по пятницам, а про курс usdt спросите в другом чате»: слова вроде бы далеко, но без пробелов между ними всего 27 символов.

Строгий порядок#

По умолчанию связь И не смотрит на порядок — как в примере «usdt на обмен» выше. Галочка «Строгий порядок» требует, чтобы части шли в тексте слева направо — ровно так, как они выставлены в форме. В схеме строгий порядок обозначается восклицательным знаком:

  • Поймает: «куплю usdt».
  • Пропустит: «usdt куплю».

Строгий порядок можно включить на всё правило целиком или только на группу.

Исключения#

Галочка «Исключение» превращает фрагмент в условие, которое отменяет срабатывание. Исключение остаётся обычной частью цепочки — со своей связью, как и все остальные, — и отличается только цветом. Работает оно по-разному в зависимости от уровня.

Исключение на верхнем уровне отменяет всё правило. Сначала проверяется основная часть, и если она совпала, но где-то в сообщении нашлось исключение — правило не срабатывает. Пример — набор «Реклама каналов», где собственные анонсы не должны попадать под раздачу:

  • Поймает: «подпишись на канал».
  • Отменит исключение: «подпишись на наш канал».
  • Отменит исключение: «наш канал: подпишись на канал» — где именно в сообщении нашлось исключение, значения не имеет.

Если «своих» вариантов несколько, исключение ставится на всю группу — тогда любой из них отменяет срабатывание:

  • Отменит исключение: «подпишись на официальный канал».
  • Поймает: «подпишись на канал».

Исключение внутри группы гасит только эту группу, а остальные ветки ИЛИ за её пределами продолжают работать. Как это выглядит в деле — в разделе про комбинации ниже.

На каждом уровне допускается одно исключение, вложенные исключения запрещены.

Комбинации: как части работают вместе#

Отдельные связи понятны; неожиданности начинаются, когда их сочетаешь. А именно сочетания и нужны, чтобы вычищать рекламу и спам, не задевая обычные разговоры. Ниже — основные комбинации и то, как на них реагирует правило.

Группа из И внутри ИЛИ#

Группа может сама быть связкой И — тогда она целиком становится одной из веток ИЛИ:

  • Поймает: «куплю usdt» — сработала группа.
  • Поймает: «есть p2p?» — сработала вторая ветка, группа не нужна.
  • Пропустит: «куплю слона» — в группе не хватило «usdt», а «p2p» нет.

Цепочка из трёх частей#

Связи И можно ставить подряд, у каждой своё расстояние. Сработает правило только если найдутся все части:

  • Поймает: «продам аккаунт telegram».
  • Пропустит: «продам аккаунт» — одной части не хватает.

Две группы через И#

Групп может быть несколько — например, синонимы с обеих сторон:

  • Поймает: «p2p btc», «обмен usdt» — любое слово из первой группы рядом с любым из второй.
  • Пропустит: «обмен марками».

Строгий порядок без ограничения расстояния#

Строгий порядок и расстояние независимы. С нулём порядок важен, а разрыв — нет:

  • Поймает: «обмен стикерами, а в самом конце про usdt».
  • Пропустит: «usdt, а потом обмен».

Строгий порядок только внутри группы#

Порядок можно потребовать от одной группы, не трогая остальное правило:

  • Поймает: «куплю usdt».
  • Пропустит: «usdt куплю» — внутри группы порядок нарушен.
  • Поймает: «usdt куплю через p2p» — группа не сработала, зато сработала ветка «p2p».

Число первым#

Число может стоять в любом месте цепочки. Вместе со строгим порядком это позволяет ловить «сумма, потом валюта», не трогая обратный порядок:

  • Поймает: «500 usdt».
  • Пропустит: «usdt 500».

Исключение внутри группы#

Самый тонкий случай: исключение гасит только свою группу, а соседняя ветка ИЛИ живёт своей жизнью:

  • Поймает: «обмен usdt» — группа сработала, исключения нет.
  • Отменит исключение: «обмен стикерами» — группа погашена, других веток в сообщении нет.
  • Поймает: «обмен стикерами и p2p» — группа погашена, но ветка «p2p» сработала сама.

Строгий порядок и исключение#

Исключение не участвует в порядке: строгий порядок проверяет основные части, а исключение ищется по всему сообщению:

  • Поймает: «куплю usdt».
  • Отменит исключение: «куплю у вас usdt».

Почему правило срабатывает не так: что происходит с текстом перед проверкой#

Это ключевой раздел: половина неожиданностей объясняется именно им. И правило, и сообщение приводятся к одному виду, и только потом сравниваются:

  1. текст переводится в нижний регистр — регистр никогда не важен;
  2. эмодзи удаляются;
  3. знаки препинания и символы заменяются на пробел;
  4. подмена букв распознаётся: в словах, где перемешаны алфавиты или буквы с цифрами, латиница и цифры возвращаются к кириллице — «к0манду» становится «командой», «кaнaл» с латинскими «a» — обычным «каналом». Число целиком (например, «100») так не переделывается;
  5. все пробелы удаляются.

Отсюда три следствия, которые стоит помнить:

  • Поиск идёт по подстроке, границ слов нет. Фраза бан найдётся в «банан», «банк» и «урбанизация». Короткие фразы почти всегда нужно уточнять связью И или заменять более длинными.
  • Пробелы и знаки внутри фразы не мешают. Правило спам сработает на «с п а м» и «с.п.а.м».
  • Фраза из одних эмодзи или знаков препинания не сработает никогда — после нормализации от неё ничего не останется.

Проверьте правило до того, как оно заработает#

Внизу редактора есть карточка «Проверить правило». Вставьте в поле «Текст для проверки» реальное сообщение и нажмите «Проверить».

Проверяется черновик, который сейчас открыт в форме, — сохранять правило не нужно. Санкций это не вызывает и в журнал не попадает. Ответ бывает трёх видов:

  • «Текст не проходит модерацию» — правило сработало бы;
  • «Текст проходит модерацию» — не сработало; ниже перечислено, чего именно не хватило: «В тексте не найдено: …»;
  • «Текст проходит модерацию» и при этом подсвечено исключение — правило сработало, но было отменено исключением.

Подсветка показывает текст уже после нормализации: без пробелов, эмодзи и знаков препинания. Выглядит непривычно, зато сразу видно, что именно сравнивает бот.

Карточка «Проверить правило»: текст «продам крипту» не проходит модерацию

Проверка ничего не сохраняет и никого не наказывает — она лишь показывает, сработало бы правило на этом тексте.

Почему правило не удаляет сообщения: санкции задаются у набора#

Цепочка наказаний задаётся только у набора: «После N нарушений — предупреждение, после следующего — мьют» и так далее. Ни у отдельного правила, ни у блока целиком своей цепочки нет — именно набор и есть та единица, которой назначается строгость. Поэтому правила и стоит раскладывать по наборам: «Крипта», «Реклама каналов», «Мат» наказываются по-разному.

Набор «Нецензурная лексика»: три правила и цепочка «без санкции → предупреждение → мьют»

Правила набора видны списком, а внизу карточки — его цепочка наказаний.

Если у набора не настроены санкции, его правила не сработают вообще — и в журнале не появится ни строки. Набор выглядит рабочим, но по факту бездействует. Если правило «не ловит», проверять стоит в первую очередь это.

Галочка «Свой счётчик нарушений» в редакторе правила нужна, когда одно правило не должно тянуть за собой остальные: его срабатывания считаются отдельно и не сдвигают общий счётчик набора. Обратная сторона — при выключении галочки накопленный счётчик этого правила удаляется, и эскалация начинается заново.

Что и когда проверяется#

  • Проверяется текст сообщения и подпись к медиа. Сообщение без текста текстовые слои не затрагивают.
  • Отредактированные сообщения проверяются заново — правка не спасает.
  • Админы чата и участники из белого списка пропускаются до всех проверок: ни срабатываний, ни счётчиков.
  • Слои идут по порядку: длина → дубликаты → фразы → регулярные выражения → ссылки. Первый сработавший слой завершает проверку, поэтому сообщение, пойманное по длине или дубликатам, до фраз уже не доходит.
  • Если сработали несколько фразовых правил, засчитывается первое по порядку — от него и берётся набор, а значит и цепочка наказаний.

В журнале модерации срабатывание отображается как «Фразы: название набора», там же видно, какое правило совпало и на какой ступени эскалации оказался участник.

Лимиты тарифов#

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

Частые вопросы#

Чем фразовые правила отличаются от обычных стоп-слов?

Стоп-слово запрещено само по себе. Фразовое правило умеет требовать несколько слов рядом, допускать синонимы через ИЛИ, учитывать порядок и не срабатывать, если в сообщении нашлось исключение. Поэтому оно реже задевает обычные разговоры.

Как заблокировать мат в Telegram-чате?

Заведите отдельный набор — например, «Нецензурная лексика», — сложите в него правила с вариантами написания через ИЛИ и назначьте набору цепочку наказаний. Пока у набора нет санкций, его правила не срабатывают.

Почему правило не удаляет сообщения?

Чаще всего у набора не настроена цепочка наказаний. Другие причины: блок «Модерация по фразам» выключен; сообщение поймал более ранний слой — длина или дубликаты; автор оказался админом чата или участником белого списка; на Ограниченном тарифе правило не попало в десятку активных.

Ловятся ли слова с пробелами и подменёнными буквами?

Да. Перед проверкой из текста убираются пробелы, эмодзи и знаки препинания, а латиница и цифры внутри слов возвращаются к кириллице. Поэтому «с п а м», «с.п.а.м» и «спам» для правила — одно и то же.

Проверяются ли подписи к фото и отредактированные сообщения?

Да. Правила смотрят текст сообщения и подпись к медиа, а отредактированное сообщение проверяется заново — правка не спасает.

Короткий чеклист#

  • Набору назначена цепочка наказаний — иначе правила молчат.
  • Значение «До n символов» — не 0, если вы имели в виду «рядом».
  • Нужен порядок слов — включён «Строгий порядок».
  • Короткие фразы вроде «бан» уточнены связью И, чтобы не ловить «банан».
  • Правило проверено на реальном сообщении в карточке «Проверить правило».
  • Собственные анонсы вынесены в исключение.

Другие инструкции по настройке модерации Telegram-групп — в журнале Scarabeus.

Читать дальше