Телеграм бот для удаления спама
habrahabr.ruРешил написать эту публикацию т.к. устал объяснять одно и то же людям, которые хотят использовать моего телеграм бота @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
Source habrahabr.ru