Решил написать эту публикацию т.к. устал объяснять одно и то же людям, которые хотят использовать моего телеграм бота @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)
abdurohman
11.02.2018 02:50А можно ли добавить функцию к боту, например, статистику пользователей: кто кого добавил или сколько на период пользователь пригласил пользователей? Или это идея для отдельного бота?
shikhov
Большинство спамеров как раз заходят в чат, день-два молчат, а потом выдают спам. Я сделал проще: если первое сообщение содержит ссылки или слова про криптовалюту — бан, удаление спама, удаление сообщения о входе пользователя и удаление сообщение о том, что кого-то кикнули. Другие участники даже могут и заметить ничего. Для моего маленького чатика работает отлично.
itforge Автор
Мой бот универсальный, он удаляет спам независимо от тематики спама.
Optik
Ваш бот ничем по логике не отличатеся от прочих. Ну разве что есть еще такой, что смотрит на содержимое (эвристика там или nlp не знаю). У всех этих ботов есть один жирный минус — они настолько ненавидят спам, что готовы линчевать обычного пользователя. И если пропущенный спам никого не удивит, то забаненный по ошибке пользователь это серьезная проблема.
В своей реализации прошел по тем же граблям. В итоге бот просто зовет админов, чтобы они приняли решение. По пользователям ведется статистика, чтобы реагировать на их первые N сообщений (дальше вероятность, что это спаммер стремится к нулю). Если упоминают человека, то линк ровно такой же как и у канала, но при этом это ложное срабатывание. Но это уже не привинчивал, потому что в тех каналах, где был бот, спаммеры почти перестали появляться и интерес продолжать пропал (после рестарта сервера забыл перезапустить и заметил только через 2 недели случайно, ну а так как проблема ушла то и оживлять не стал).
itforge Автор
Как раз из-за таких людей как вы я и написал статью, хотя я смотрю, статья тоже не помогла. Я в статье два раза написал, что бот никого никогда не банит и вот снова вы опять про бан. Бот всего лишь удаляет сообщения со ссылками от новорегов, в первые 24 часа. Конечно, там может быть false positive, но судя по отзывам админов всех всё устраивает за редким исключением. Некоторые админы вообще высказывают пожелания в боте, который удаляет все ссылки всегда — так всех достал спам.
Если у вас в чатах две недели не работал бот и вы не заметили спама, то у вас, видимо, какие-то очень секретные чаты, не отмеченные в каталогах и не имеющие внешних ссылок из интернета. Спамерам вообще по барабану, насколько хорошо у вас осуществлялась модерация несколько недель назад, они просто парсят каталоги чатов, спискис статистики, логи чатов и т.д. и окучивают автоматом все найденные чатики.
medvedevia
Спамеры тоже пользуются Bot-API, или используются обычное API (которое для всех пользователей)?
itforge Автор
Спамеры используют client API (обычное API), иначе бы им пришлось каждого бота добавлять руками в чат т.к. бот не может сам зайти в чат.
Optik
Прошу прощения, пропустил часть деталей. Из-за рекламного характера читал по диагонали. Но как бы ваши априорные суждения ничуть не лучше. Чаты все были с внешними ссылками, спам был проблемой, по поведению можно было определить количество разных платформ спаммеров. Как минимум одна платформа точно следила за реакцией и пробовала менять поведение. Две разделяли спам по времени в разных каналах. Но тотально решить проблему скорее всего помогли еще действия самого телеграмма. Не знаю что именно помогло, но в то же самое время, в чатах где за порядком следили без автоматики проблема оставалась еще длительное время. Ну и, имхо, спаммерам по-прежнему хватает чатов (поэтому весь спам достаточно тупой в исполнении) где можно не заморачиваясь работать, поэтому из «трудных» каналов проще уйти, чтобы меньше привлекать внимание самого телеграмма.
UksusoFF
Спамеры иногда и хитрее бывают. Я тут на одном форуме стареньком подтираю спам, так там регистрируются, пишут в течении пары недель по одному-два сообщению в день, причем по теме. А потом выдают что-нибудь про увеличение всяких органов.