Хабрахабр

Решения проблемы спам-ботов, добавляемых в телеграм-группы

Я автор нескольких популярных ботов для администрирования телеграм групп: @daysandbox, @watchdog_robot и других. Привет. Обычно ещё уточняют, что это арабские спам-боты. Каждый день в группе поддержки и в личных сообщениях я вижу один и тот же вопрос: как мне защититься от спам-ботов, добавляемых в группу. Но это всё следствия, а причина во многих случаях одна и та же и её легко поправить. Люди пытаются найти анти-спам бота, который будет удалять ссылки, удалять сообщения с арабскими символами, удалять пользователей с арабскими символами в именах и всё в таком духе. Причина простая, но не очевидная.

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

Спам появляется по следующему сценарию:

  • участник группы добавляет спам-бота в группу
  • анти-спам бот видит факт добавления бота
  • анти-спам бот, вызывает метод telegram API, ограничивающий спам-бота в правах записи сообщений в группу. Например, он делает это для всех новых пользователей или только для тех, логин которых содержит в конце слово "bot". Это не суть важно.
  • Проходит некоторое время между моментами захода спам-бота в группу и обработкой телеграм сервера запроса об ограничении этого бота в правах записи в чат. В этот момент спам-бот может отправить сообщение в чат.
  • Анти-спам бот не видит это сообщение, потому что боты не видят сообщения других ботов. Так устроен телеграм.

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

От типа группы зависит, что и как могут делать внутри группы администраторы, простые пользователи и боты. Существует два типа телеграмм групп: публичная и частная. Для частной группы наличие ссылки для входа не обязательно. Обязательное условие для публичной группы — существование ссылки вида "https://t.me/XXX", по которой можно зайти в группу.

Создадим группу с настройками по-умолчанию. Рассмотрим процесс создания группы с нуля. Попробуем добавить любого бота простым участником группы. У нас получится частная группа без ссылки-приглашения. Как решить проблему? Добавился! Это ограничит только простых пользователей, администраторы группы по прежнему смогут добавлять новых участников (и ботов) руками. Единственный способ запретить добавлять ботов в частную группу — это запретить добавлять вручную вообще каких-либо новых участников, это делается с помощью галочки "Управление группой -> Разрешения -> Добавление участников".

Теперь создадим ссылку-приглашение для входа в группу: "Управление группой-> Информация о группе -> Ссылка-приглашение -> Создать ссылку-приглашение". С самым простым случаем разобрались. Для каждого администратора создаётся своя ссылка-приглашение, изначально её знает только администратор, её создавший. Получим ссылку вида "https://t.me/joinchat/...". В любой момент времени администратор может сгенерировать новую ссылку-приглашение, при этом старая ссылка перестанет работать. Теперь администратор может разместить эту ссылку там, где он посчитает нужным, и любой пользователь может присооединиться к чату по этой ссылке.

Спам-бот (и вообще любой бот) может попасть в чат только, если кто-то добавит туда бота вручную. Важное замечание: спам-боты не могут зайти в группу по ссылке-приглашению. Самая частая причина появления спам-ботов в частных чатах — это когда администраторы создают ссылки-приглашения, но не отключают (через Управление группой -> Разрешения) возможность добавлять новых пользователей вручную.

Нам также придётся придумать публичный адрес вида "https://t.me/XXX", без этого не получится сделать группу публичной. Теперь посмотрим, что будет, если мы переведём группу из частного режима в публичный с помощью "Управление группой -> Информация о группе -> Публичная группа". В чём отличие публичной группы от частной группы, имеющей ссылку-приглашение? Пусть это будет "https://t.me/habr_test". Публичную группу можно найти через внутренний поиск телеграма, а также можно посмотреть любое сообщение группы через веб по адресу "https://t.me/habr_test/X", где X — это порядковый номер сообщения в группе.

Самое интересное, что в неё больше нельзя приглашать ботов. Итак, наша группа стала публичной, у неё изменились свойства видимости, и не только. При попытке добавить бота будет возникать ошибка "Не удалось добавить пользователя. Если в "Управление группой -> Разрешения" разрешено приглашать новых пользователей, то пользователи могу приглашать новых пользователей, но только обычных людей, не ботов. То что надо! Попробуйте позже".

Иммунитет от заражения группы ботами даёт одно из двух действий: Вывод.

  • запрет обычным участникам добавлять ботов (Управление группой -> Разрешения)
  • перевод группы в публичный режим т.е. назначение группе адреса вида "https://t.me/habr_test"

S. P. Конечно, множество телеграм-спама генерируется не bot-API ботами, а ботами использующими обычные пользовательские аккаунты, но проблема и её решение, описанные в статье, имеют место быть. Заголовок статьи получился немного кликбейтовым. И они имеют место быть каждый день, и я уже заколебался отвечать одно и то же на одни и те же вопросы, поэтому и написал эту статью.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть