Стоп-слова в Telegram: как убрать рекламу и не задеть обычные сообщения
Как выбрать точный, частичный или пользовательский поиск, разделить списки по последствиям и проверить стоп-слова на ложные срабатывания до запуска в чате.
В чат регулярно приносят предложения заработка. Администратор добавляет в стоп-слова «работа», «деньги» и «личка», а вместе с рекламой исчезают просьбы порекомендовать мастера и вопросы о возврате покупки. Фильтр нашёл заданный текст. Ошибка возникла раньше: слишком широкое слово стало основанием для удаления.
Начните с повторяющихся формулировок реального нарушения, затем проверьте их на разрешённых сообщениях. В Defendy для этого есть три режима поиска и отдельные списки с разными последствиями. Главное ограничение: режим поиска общий для всей группы. Создать один список с точным поиском, а другой с частичным нельзя.
Для обсценной лексики сначала сравните этот подход с фильтром мата: общая политика общения и список точных рекламных фраз требуют разных проверочных примеров.
При проверке цитат отличайте текст текущего сообщения от оригинала, на который ответили. Разбор Rich-сообщений и опросов показывает, какие части попадают в извлечение, а какие требуют отдельной проверки.
Сначала запишите, что именно запрещено
«Не допускаем спам» недостаточно для выбора стоп-слов. Более полезное правило: «В общем чате нельзя размещать предложения стороннего заработка; вопросы о поиске работы разрешены». Теперь можно отличить нарушение от похожей, но нормальной реплики.
Условный пример: в районной группе повторяется сообщение «Доход без опыта, пишите в личку». Администратор выписывает три категории:
- удалить: повторяющееся рекламное предложение;
- оставить: «Ищу работу рядом с домом» и «Где обсуждают возврат денег?»;
- разобрать вручную: «Мне написали “доход без опыта, пишите в личку”. Это мошенники?».
Последняя реплика содержит всю рекламу, но автор предупреждает соседей. По одному совпадению нельзя установить намерение. Если такие обсуждения часты, заранее предусмотрите способ сообщить о подозрительном предложении модератору без публикации полного рекламного текста в общей ленте.
Не начинайте с чужого словаря на тысячи строк. Без контекста туда легко попадут фамилии, профессиональные термины и обычные глаголы. Для первой настройки достаточно небольшой подборки повторяющихся нарушений, которую вы можете объяснить построчно. Правила группы должны объяснять участникам само ограничение и способ оспорить ошибку.
Три режима поиска решают разные задачи
Точный: когда важно отдельное слово
Одиночная запись сопоставляется с целым нормализованным словом. Например, кот найдётся в «пришёл кот», но не в «коты» и не в «скотина». Это удобно для конкретного термина, если именно его употребление запрещено правилами.
Точный поиск не подбирает падежи и окончания. Запись реклама сама по себе не означает «рекламы», «рекламой» и «рекламный». Если нарушение выражается несколькими устойчивыми формами, можно перечислить их отдельно.
Есть важная особенность фраз: запись с пробелами в текущем точном режиме ищется как нормализованная последовательность. Не рассчитывайте на строгие границы каждого слова такой фразы. Для фразы с границами используйте двойные кавычки в пользовательском режиме, например "доход без опыта".
Частичный: когда нужен фрагмент
Частичный поиск находит запись внутри нормализованного сообщения. Основа реклам может охватить «реклама» и «рекламой». Но тот же принцип заставит кот сработать на «скотина».
Это буквальный поиск, а не знание русского языка. При нормализации частичного режима убираются пробелы и знаки-разделители, поэтому проверяйте и совпадения на стыке слов. Увеличение списка коротких основ часто увеличивает число случайных удалений быстрее, чем пользу.
Используйте этот режим, когда фрагмент достаточно характерный и его присутствие действительно запрещено в вашей группе. Для общих слов вроде «работ» или «куп» сначала ищите более узкую формулировку.
Пользовательский: когда нужны несколько условий
Одна запись становится законченным правилом. Например:
"доход без опыта" && "пишите в личку"
Оно требует обе фразы в одном сообщении. Между ними может быть другой текст. По отдельности ни «доход без опыта», ни «пишите в личку» это правило не удовлетворяют.
Основные элементы:
A && B: должны присутствовать обе части;!A: указанной части быть не должно; добавляйте её к положительному условию;"точная фраза": фраза с границами слов;*: любое количество символов;+: один или больше символов;?: один символ.
Это маски и условия, а не поле произвольных регулярных выражений. Не переносите сюда готовые regex из другого сервиса. Полный синтаксис с примерами есть в руководстве по стоп-словам.
Отрицательное условие действует на всё сообщение. Учебная запись кот* && !скот* исключит сообщение, где одновременно упомянуты кот и скот. По той же причине исключение !не спам опасно: автор рекламы может просто дописать эти слова. Исключение полезно против известной ошибки, но не доказывает добросовестность сообщения.
Проверьте правило на столе, прежде чем включать наказание
Ниже условный набор для записи "доход без опыта" && "пишите в личку" в пользовательском режиме. Это ожидаемые результаты разбора правила, не отчёт о тестировании работающей группы.
| Тестовое сообщение | Ожидаемое совпадение | Что это проверяет |
|---|---|---|
| «Доход без опыта. Пишите в личку» | Да | Обе фразы присутствуют |
| «ДОХОД БЕЗ ОПЫТА. Пишите в личку» | Да | Регистр не должен менять смысл правила |
| «Ищу работу рядом с домом» | Нет | Обычная просьба не попадает под запрет |
| «Пишите в личку, верну забытый зонт» | Нет | Одной общей фразы недостаточно |
| «Доход без опыта, подробности на сайте» | Нет | Изменённый шаблон потребует другого правила |
| «Остерегайтесь сообщений “доход без опыта, пишите в личку”» | Да | Цитирование не делает текст исключением |
Для последней строки правильная техническая работа фильтра всё равно может дать неправильное модераторское решение. Решите заранее: такую цитату допустимо удалить с объяснением или правило слишком мешает задачам группы? Если нельзя провести приемлемую границу, оставьте этот случай человеку.
Добавьте собственные проверки: изменённые окончания, перестановку слов, дефисы, необычные пробелы и подмену букв. В таблице проверки держите рядом ожидаемый и фактический результат. «Ничего не произошло» тоже требует объяснения: это допустимый текст, пропущенный шаблон или неверно настроенная группа?
Как собрать списки в Defendy
У группы есть список по умолчанию и до десяти дополнительных именованных списков. Основной нельзя удалить; дополнительные можно переименовать или убрать. Название помогает администратору, но не меняет поиск.
Разделяйте записи по причине и последствиям. Например, «Рекламные предложения» может только удалять сообщения, а отдельный проверенный список нарушений правил общения — удалять и добавлять предупреждение. Это пример политики, а не готовая рекомендация включить санкции за любые совпавшие слова.
Общими для группы остаются метод поиска и распознавание подмены букв. Для каждого списка отдельно задаются удаление сообщения, действие, срок и вес предупреждения. Если меняете общий режим, заново проверяйте старые списки: привычная запись может начать срабатывать иначе.
Пошаговая настройка:
- Откройте @defendy_bot, нажмите «Настройки» и выберите нужную группу. Для первых опытов используйте отдельную тестовую группу.
- Откройте «Стоп-слова», включите фильтр и осознанно выберите метод. Исходный метод поиска — частичный, поэтому не оставляйте его случайно.
- Откройте список по умолчанию или создайте именованный список.
- Перед тестом выберите действие «Нет». Если проверяете удаление, включите его отдельно и отправляйте только подготовленные тестовые сообщения.
- Нажмите «Добавить», проверьте целевой список и введите записи. Для TXT выберите правильный разделитель: строки или запятые. Для сложных фраз удобнее одна запись на строку.
- Нажмите «Сохранить» в форме добавления. Настройки-переключатели сохраняются при изменении; повторно откройте экран и убедитесь, что значения действительно сохранились.
- Отправьте весь набор от обычного участника, без административных привилегий и особых исключений. Сначала проверьте совпадения, затем отдельно последствия.
Загрузка TXT не снимает ограничения списка и тарифа. Если импорт не прошёл, прочитайте ошибку и проверьте фактическое содержимое списка перед повторной попыткой. Не считайте выбранный файл доказательством успешного добавления.
Подмена букв: полезная настройка, которую тоже нужно тестировать
Defendy не учитывает регистр. Дополнительное распознавание похожих латинских букв и букв-эмодзи включается отдельным переключателем и по умолчанию выключено. В многоязычном чате такая нормализация может одновременно находить обходы и сближать разные слова. Проверьте имена, термины и обычные сообщения на всех языках группы.
Это общий класс проблем, знакомый и другим разработчикам ботов. В документации Rose отдельно оговорено, что её нормализация не охватывает все визуально похожие символы. Синтаксис и конкретное поведение Rose нельзя переносить в Defendy; полезный вывод здесь — проверять свои примеры, а не обещать распознавание любой маскировки.
Удаление, предупреждение и мут проверяйте раздельно
«Нет» в действии списка означает отсутствие наказания участника. Если удаление включено, сообщение всё равно исчезнет. Обратная ситуация тоже возможна: выключенное удаление не отключает настроенный мут или предупреждение.
Предупреждение нельзя считать безобидным тестовым сигналом. Его вес добавляется к счётчику, а уже настроенный порог может привести к муту или бану. Перед включением варнов прочитайте настройки системы предупреждений, включая накопленные баллы тестового участника.
Для временного мута или бана явно выберите срок после выбора действия. У формы списка есть известная особенность: пустое или нулевое сохранённое значение может отображаться как «1 час». Одна эта подпись не подтверждает длительность. Ноль может означать бессрочное действие, а временный мут должен быть не короче 60 секунд. Проверяйте сохранённую настройку и результат в тестовой группе; статья не предполагает, что эта особенность уже исправлена.
Не создавайте перекрывающиеся списки в расчёте на автоматический выбор самого строгого наказания. Такая политика приоритетов не является настройкой фильтра. Уберите пересечения или отдельно проверьте сообщение, которое совпадает сразу с несколькими записями.
Что делать после ошибочного срабатывания
Сначала остановите повторение ошибки: уберите проблемную запись или временно отключите фильтр, если непонятно, какая запись виновата. Простое отключение удаления не поможет, если продолжает применяться наказание.
Дальше восстановите цепочку: текст сообщения, список, режим, распознавание подмены букв, действие и время события. Журнал модерации поможет, если он был включён и нужная категория событий записывалась. Отсутствие записи само по себе не объясняет, кто удалил сообщение: могли сработать другой фильтр или другой бот.
Ошибочный варн, мут или бан исправляйте отдельно, проверив участника и основание. Нужные операции описаны в командах модерации. Смена правила не отменяет уже применённое последствие и не возвращает удалённый оригинал сообщения; попросите автора опубликовать полезный текст заново после исправления.
Наконец, добавьте этот случай в набор проверки. Он должен оставаться там и после следующего импорта или смены режима. Хороший список постепенно становится точнее благодаря разобранным ошибкам, а не просто длиннее.
На чём основано руководство
Настройки, ограничения списков и алгоритмы сопоставления Defendy сверены 5 октября 2026 года. Для конкретных полей используйте справочник стоп-слов. Публичный материал разработчиков о нормализации: Rose, Advanced Blocklist Features, проверен в тот же день. Все сообщения и конфигурации в примерах условные; фактическое поведение своей группы нужно подтвердить тестами.