Решил написать эту публикацию т.к. устал объяснять одно и то же людям, которые хотят использовать моего телеграм бота @daysandbox_bot. Итак, несколько месяцев назад я разработал бота для удаления спама по очень простому признаку: если человек зашёл в чат и провёл в нём менее суток, то любые ссылки или forward сообщения от этого человека удаляются. Всё. Никаких нейронных сеток, анализа частотности, модерируемых white- и black-листов и прочих сложных вещей. На удивление бот приобрёл некоторую популярность и работает уже более чем в шестистах чатиках. Далее я попытаюсь развёрнуто описать принцип работы бота, чтобы в дальнейшем давать ссылку на эту статью.


Принцип работы бота


С момента добавления в чат бот отслеживает события захода новых пользователей в группу и тем самым знает, когда кто зашёл в чат и сколько времени он уже провёл в чате. В силу ограничений telegram API я не могу узнать, когда к чату присоединились те пользователи, которые уже были на момент добавления бота в чат. Бот никак не анализирует сообщения от пользователей, существующи на момент добавления бота. Итак, бот знает, когда новые пользователи зашли в чатик. Если бот видит, пользователь провёл в чате меньше суток и запостил сообщение, удовлетворяющее определению спама, то бот удаляет такое сообщение. Он не банит пользователя, не ставит ему read-only права, бот просто удаляет сообщение со спамом. Если пользователь запостит не-спам сообщение, то оно будет опубликовано. Какие сообщения считаются спамом? Во-первых, любые сообщения содержащие ссылку: URL, email или username. Во-вторых, любые forward-сообщения т.е. сообщения пересланные из другого чата. Для правила username есть исключение, если username ссылается на пользователя, то такое сообщение разрешается. Бот удаляет только те сообщения с username, которые ссылаются на группу или канал. Это сделано для того, чтобы не было ложных срабатываний, когда новый пользователь просто пытается обратиться к какому-то участнику чата по его username.


Что бот daysandbox_bot НЕ делает


  • Бот не банит никого и никогда
  • Бот никак не фильтрует сообщения от тех участников чата, что уже были в чате на момент добавления бота
  • Бот фильтрует сообщения только тех пользователей, которые провели в чате менее суток. Если пользователь провёл в чате больше суток, его сообщения никак не обрабатываются ботом
  • Бот никак не анализирует текст сообщения, он просто удаляет сообщения со ссылками. Всё.

Как правильно добавить бота в чат


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


  • Заходим в чатик, кликаем на название чатика сверху
  • В открывшемся окне сверху справа от надписи "Информация о группе" кликаем на иконку из трёх точек
  • В открывшемся меню кликаем на "Управление группой"
  • В открывшемся меню кликаем на "Администраторы"
  • В открывшемся окне снизу кликаем на "Добавить администратора"
  • В открывшемся окне в строке поиска вводим daysandbox_bot
  • В обновившихся результатах поиска кликаем на DaySandBox бота, у него должна быть жёлтая иконка пакмэна.
  • В открывшемя окне выставляем боту права на удаление сообщений, все остальные права отключаем.
  • Жмём "Сохранить"

Логирование действий бота в телеграм канал


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


  • Создаём канал. Добавляем туда бота, как админа.
  • Пишем /setlog в канал. Перенаправляем это сообщение в тот чат, где установлен бот.
  • Теперь бот будет знать в какой канал копировать удалённые сообщения.

Чтобы отключить логирование в канал, зайдите в чатик и напишите команду /unsetlog


Вы можете управлять форматом сообщений, пересылаемых в канал. Для этого напишите в чатик команду /setlogformat format1. Доступные форматы: json, simple, forward. Можно указать несколько форматов через запятую, например: /setlogformat json,forward. Чем отличаются эти форматы вы можете выяснить путём эксперимента.


Настройки бота


У бота есть несколько настроек.


Напишите в чатик /daysandbox_set safe_hours=N для задания времени, в течении которого сообщения новых пользователей анализируются на признаки спама. По-умолчанию, этот период равен суткам. Вы можете указать количество часов от нуля до 8760 (один год). Период равный нулю часам по сути деактивирует бота.


Напишите в чатик /daysandbox_set publog=yes чтобы разрешить боту писать сообщения в чат о том, что сообщение какого-либо пользователя было удалено. По-умолчанию, бот именно это и делает.


Текущие значения этих двух настроек можно получить командами /daysandbox_get safe_hours и /daysandbox_get publog.


Немного статистики


Мне лень рисовать красивые графики, скажу лишь, что бот за день бот удаляет от 10 до 15 тысяч сообщений и работает более чем в 600 чатиках.


Open Source


Исходники бота находятся в открытом доступе на github.


Другие мои боты


Возможно, вас заинтересуют другие боты, которые я разработал:


  • @nosticker_bot — бот, удаляющий любые стикеры, опубликованные в чат. Невероятно, но факт, он уже работает в 100 чатиках :)
  • @joinhider_bot — бот, удаляющий сообщения о том, что пользователь зашёл в группу или вышел из группы
  • @coinsignal_robot — бот, показывающий цену и объёмы торгов любой крипто-моенты с сайта coinmarketcap.com. Также бот позволяет конвертировать курс монет. Например, сколько bitcoin будет 10 litecoin, или сколько рублей будет 100 dogecoin.

Контакты для связи


Мой телеграм @madspectator
Группа для обсуждения моих ботов: @tgrambots

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


  1. shikhov
    10.02.2018 20:12

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


    1. itforge Автор
      10.02.2018 20:17

      Мой бот универсальный, он удаляет спам независимо от тематики спама.


      1. Optik
        11.02.2018 11:12

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

        В своей реализации прошел по тем же граблям. В итоге бот просто зовет админов, чтобы они приняли решение. По пользователям ведется статистика, чтобы реагировать на их первые N сообщений (дальше вероятность, что это спаммер стремится к нулю). Если упоминают человека, то линк ровно такой же как и у канала, но при этом это ложное срабатывание. Но это уже не привинчивал, потому что в тех каналах, где был бот, спаммеры почти перестали появляться и интерес продолжать пропал (после рестарта сервера забыл перезапустить и заметил только через 2 недели случайно, ну а так как проблема ушла то и оживлять не стал).


        1. itforge Автор
          11.02.2018 13:23

          Как раз из-за таких людей как вы я и написал статью, хотя я смотрю, статья тоже не помогла. Я в статье два раза написал, что бот никого никогда не банит и вот снова вы опять про бан. Бот всего лишь удаляет сообщения со ссылками от новорегов, в первые 24 часа. Конечно, там может быть false positive, но судя по отзывам админов всех всё устраивает за редким исключением. Некоторые админы вообще высказывают пожелания в боте, который удаляет все ссылки всегда — так всех достал спам.

          Если у вас в чатах две недели не работал бот и вы не заметили спама, то у вас, видимо, какие-то очень секретные чаты, не отмеченные в каталогах и не имеющие внешних ссылок из интернета. Спамерам вообще по барабану, насколько хорошо у вас осуществлялась модерация несколько недель назад, они просто парсят каталоги чатов, спискис статистики, логи чатов и т.д. и окучивают автоматом все найденные чатики.


          1. medvedevia
            11.02.2018 14:00

            Спамеры тоже пользуются Bot-API, или используются обычное API (которое для всех пользователей)?


            1. itforge Автор
              11.02.2018 14:28

              Спамеры используют client API (обычное API), иначе бы им пришлось каждого бота добавлять руками в чат т.к. бот не может сам зайти в чат.


          1. Optik
            11.02.2018 23:50

            Прошу прощения, пропустил часть деталей. Из-за рекламного характера читал по диагонали. Но как бы ваши априорные суждения ничуть не лучше. Чаты все были с внешними ссылками, спам был проблемой, по поведению можно было определить количество разных платформ спаммеров. Как минимум одна платформа точно следила за реакцией и пробовала менять поведение. Две разделяли спам по времени в разных каналах. Но тотально решить проблему скорее всего помогли еще действия самого телеграмма. Не знаю что именно помогло, но в то же самое время, в чатах где за порядком следили без автоматики проблема оставалась еще длительное время. Ну и, имхо, спаммерам по-прежнему хватает чатов (поэтому весь спам достаточно тупой в исполнении) где можно не заморачиваясь работать, поэтому из «трудных» каналов проще уйти, чтобы меньше привлекать внимание самого телеграмма.


    1. UksusoFF
      11.02.2018 11:04

      Спамеры иногда и хитрее бывают. Я тут на одном форуме стареньком подтираю спам, так там регистрируются, пишут в течении пары недель по одному-два сообщению в день, причем по теме. А потом выдают что-нибудь про увеличение всяких органов.


  1. abdurohman
    11.02.2018 02:50

    А можно ли добавить функцию к боту, например, статистику пользователей: кто кого добавил или сколько на период пользователь пригласил пользователей? Или это идея для отдельного бота?


    1. itforge Автор
      11.02.2018 02:50

      Это явно идея для другого бота.