Недавно мы столкнулись в группе комьюнити нашего сервиса с волной спама. И написали антиспам бота, который удаляет спам сообщения и помогает блокировать нарушителей.

Я решил выложить этот небольшой проект в открытый доступ, чтобы вы, даже не обладая навыками программирования, смогли защитить свою группу от спамеров. Цель, статьи, чтобы любой мог защитить свою группу, перетянув несколько файлов в интерфейсе и задав несколько элементарных настроек за три минуты..

В статье вы найдете

  • ссылку на файлы проекта;

  • инструкцию, как его запустить без навыков программирования.

Бот умеет удалять спам сообщения, отправлять их на модерацию и дообучаться в случае ошибок.

Файлы бота модератора

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

По ссылке вы найдете как файлы проекта, так и конфигурацию, необходимую для развертывания на удаленном сервере для работы 24/7

Запускаем антиспам бота для работы 24/7

Шаг 0 - регистрация бота в BotFather

  • Переходим в специальный, официальный бот телеграма для управления ботами - @BotFather и в нем выбираем команду /newbot. Задаем имя бота, и главное, получаем его токен. Он нам пригодиться на следующих шагах.

  • Выдаем боту права на модерацию в группах. Для этого в @BotFather вводим команду /newbot, выбираем созданного бота и переходим в раздел Bot Settings.

Зададим настройки бота в Bot Settings
Зададим настройки бота в Bot Settings

Нас интересуют Allow Groups, Groups Privacy и Channal Admin Rights настройки.

Боту необходимо дать разрешения на работу в группах
Боту необходимо дать разрешения на работу в группах
В Allow Groups включаем группы
В Allow Groups включаем группы
В Groups Privacy выставляем следующую настройку
В Groups Privacy выставляем следующую настройку
В Channal Admin Rights даем те права, которые хотим дать (на скрине немного избыточные права).
В Channal Admin Rights даем те права, которые хотим дать (на скрине немного избыточные права).

Шаг 1 - добавление бота в группы

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

Важно сразу сделать его администратором. Это изменит ID-группы, которое нам понадобится для развертывания бота.

1) Добавить бота в чат, где он будет выполнять свои основные функции по защите чата от спамеров нужно со следующими правами:

— Удаление сообщений

— Блокировка пользователей

— Анонимность (опционально), чтобы бот писал от имени группы

2) Добавить бота в чат журнала (другая группа с ботом, где вы следите за его работой). Строго говоря прав администратора в ней не требуется, но лучше сразу их выдать, чтобы ID-группы изменилось и на следующем шаге вы смогли указать корректное.

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

Шаг 2 - регистрация на удаленном сервере

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

Ссылка на сайт Amvera.

Шаг 3 - создадим проект с типом Приложение

Перейдем в личный кабинет Amvera и создадим проект с типом Приложение. Для данного бота лучше выбрать тариф “Начальный Плюс”. Мы своего бота развернули именно на нем. Но для первого запуска выберем “Стандартный”, когда проект запустится, мы перейдем в раздел Управление и понизим тариф на нужный нам. Это позволит исключить фактор недостатки ресурса во время сборки.

Шаг 4 - загрузка файлов и запуск бота модератора

Просто перетягиваем все файлы, которые вы скачали в разделе “Через интерфейс” во флоу создания или “Репозиторий в папку code” созданного проекта, нажимаем далее. Если вы загрузили все файлы, Конфигурация заполнится автоматически.

Так выглядит загрузка файлов
Так выглядит загрузка файлов
Конфигурация заполнилась автоматически из загруженного файла amvera.yaml
Конфигурация заполнилась автоматически из загруженного файла amvera.yaml

Нажмите завершить. Проект начнет собираться, но пока уйдет в ошибку (мы еще не закончили настройку).

Такой статус не всегда является ошибкой, но если он сохраняется больше двух минут, следует поискать ошибку в Логе Приложения. Пока вы не зададите переменные и не загрузите датасет в постоянное хранилище, приложение будет в этом статусе.
Такой статус не всегда является ошибкой, но если он сохраняется больше двух минут, следует поискать ошибку в Логе Приложения. Пока вы не зададите переменные и не загрузите датасет в постоянное хранилище, приложение будет в этом статусе.

После первого запуска, перейдем в проект, в раздел Репозиторий, в папку Data (это важно) и загрузим в нее файл data.txt из тех файлов, что вы скачали. Папка Data это постоянное хранилие, где мы будем хранить датасет для обучения бота, который сможем потом дополнять.

Загрузка в папку Data в разделе репозиторий доступна только после первой попытки сборки (даже c не успешной). Загрузить наш файл data.txt c обучающим датасетом надо обязательно сюда, так мы не потеряем данные для дообучения при пересборке проекта.

Шаг 6 - добавление переменных

Добавить переменные (ID групп, токен бота и т.д.). Это необходимо, чтобы бот понимал, какие группы мониторить и куда отсылать сообщения на модерацию.

Это делается в разделе “Переменные”.

Для функционирования бота необходимо добавить следующие переменные окружения:

  • CHAT_IDS - айди основного чата, где будут классифицироваться сообщения.

Подсказка - ID канала можно получить, используя специализированных ботов, к примеру @username_to_id_bot

В него надо отправить ваши группы и он пришлет их ID.

ID имеет следующий формат -1002284505443 (не забудьте про минус в начале, он нужен!)

  • JOURNAL_CHAT_ID - айди чата-журнала (Создайте закрытый чат, где вы будете модерировать сообщения), куда бот будет отправлять свои действия (там вы сможете управлять ими: блокировать автора сообщения или отмечать срабатывание как ложное). 

Получить ID можно аналогично предыдущему пункту.

  • DATASET_PATH - абсолютный или относительный путь до файла data.txt (название лучше не менять). Указываем значение /data/data.txt

Это если вы ничего не меняли и файл загружен в корень Data (постоянного хранилища): /data/data.txt, при условии, что значение параметра persistanceMount = /data  

Но можно задать и свой путь.

  • TOKEN - токен бота телеграм (берется у @BotFather)

  • CHANNEL_ID - айди основного канала, чьи сообщения не нужно удалять. Это связано с тем, что если не указать этот параметр, сообщения привязанного канала, которые дублируются в привязанный чат при создании поста в основном канале, будут удаляться как пересланные от канала или бота. Это важно учесть.

  • TF_ENABLE_ONEDNN_OPTS - задаем значение 0

Важно: переменные нужно записывать, не оборачивая их в кавычки!

Переменные задаются внутри проекта в разделе “Переменные”. И выглядит это примерно вот так. Разумеется, ID у вас будут свои.

Обратите внимание, что все значения ID со знаком минус в начале. Я сам попался на это, пока писал статью.
Обратите внимание, что все значения ID со знаком минус в начале. Я сам попался на это, пока писал статью.

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

Кнопка перезагрузки справа вверху. Если она не активна, нажмите "пересобрать" в разделе "Конфигурация"
Кнопка перезагрузки справа вверху. Если она не активна, нажмите "пересобрать" в разделе "Конфигурация"

Подождите одну минуту. При запуске статус становится "Приложение запускается или работает с ошибкой", это нормально. Если все хорошо, статус проекта изменится на “Приложение запущено”.

Готово, бот запущен и работает!

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

Датасет хранится в нашем файле data.txt  и имеет следующий формат:

<тип сообщения> <сообщение>

Естественно, без <>

Т.е. первое слово обязательно должно быть типом сообщения с маленькой буквы. Их всего два - ham и spam. Ham - обычное, не спамерское сообщение. Spam - спамерское сообщение. Далее все слова, идущие после типа сообщения будут объединены в одно сообщение, имеющее тип, указанный первым словом. Рекомендуется использовать встроенные в бота возможности по добавлению строк. Cамостоятельно редактировать data.txt нужно только следуя инструкциям и формату содержания датасета.

Пример:

ham обычное не спамерское обращение

spam текст вашего спама

Важно: каждое сообщение - одна строка, то есть переносить строки нельзя! При добавлении через /add, перенос строк будет удаляться. Если строка будет начинаться со слов, отличных от ham или spam, будет ошибка.

Дообучение антиспам бота

Для этого заходим в нашу группу, где вы осуществляете модерацию и выполняете команду

/add текст сообщения который вы хотите добавить для переобучения бота
Можно как добавлять сообщения со спамом, который проскочил мимо бота, так и сообщения которые бот по ошибке удалил как спам.
Можно как добавлять сообщения со спамом, который проскочил мимо бота, так и сообщения которые бот по ошибке удалил как спам.

Так, за несколько итераций вы обучите бота качественно чистить спам и не удалять сообщения обычных пользователей.

Возможные ошибки

  • Если ваш проект в статусе “Приложение запущено”, но на команды бот пишет “Нет доступа”, вы неверно задали Переменные (ID-групп и т.д.), либо забыли их применить, перезапустив проект.

  • Сборка или запись “залипли” и кнопки не активны. Перейдите в раздел Конфигурация и нажмите “Применить” и “Собрать”. Если не поможет, можно пересоздать проект. Но лучше предварительно ознакомиться с логами.

  • Не хватает ресурса. При сборке лучше поставить тариф Стандартный и потом понизить до того, который вам нравится. Моя рекомендация для стабильной работы выбрать "Начальный Плюс”.

Протестировать что бот работает, вы можете в группе модерации, выполнив команду /add и добавив текст.

Отследить ошибки можно в Логе Сборки (для этапа сборки) и Логе Приложения, для этапа приложения.

Если что-то не получается, пишите в поддержку Amvera, вам помогут.

Итог

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

Надеюсь, этот код антиспам бота и инструкция помогут защитить вашу группу от спама. 

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