Sunday, February 18, 2018

Telegram-бот. Цензура чата (часть 1)

 

Задача

Есть желание ввести цензуру в Telegram-чате с помощью бота? Отлично! Ведь бот — компромисс и замечательный помощник в управлении чатом. Администрировать чаты, сдерживать "неспортивное" поведение, банить и ограничивать права участников Telegram-боты могут вполне самостоятельно и успешно.

Подготовка

Итак, приступаем. Создаем бота в рамках хакатона KonigHack 2018.
Верстаем презентацию: 


Оставляем ссылки на телеграм-чат для всех желающих поматериться и ссылку на исходники. Так появляется первая группа людей, которые получают фан от чата.

Как установить бота?

Теперь добавляем бота в группу и делаем его администратором:
https://t.me/GDGCensorChat.

При этом важно:

  • Группа должна быть открытой
  • Бот должен быть администратором группы.

Программируем основу бота

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

Возможные проблемы

Проблема 1

Не приходят сообщения из группы.

Решение

https://github.com/yagop/node-telegram-bot-api/issues/174#issuecomment-244632667

Настраиваем редактирование сообщений. Доступен метод, представленный 19 мая 2017
года: deleteMessage.

Проблема 2

При копировании кода бота, копируются также и старые версии библиотеки: https://github.com/yagop/node-telegram-bot-api.

Решение

Стандартное обновление. После обновления библиотеки, бот будет автоматически удалять сообщения с матерными словами.

Таким образом, основа бота готова.

Улучшаем обработку сообщений

Два часа провел в поиске сервиса API для удаления бранных слов.
Бесплатного сервиса, к сожалению, не нашел ☹️.

Что делает бот

  1. Обрабатывает каждое сообщение.
  2. Удаляет сообщение при обнаружении мата
  3. Формирует ответ пользователю.

Формирование ответа

Записываем и употребляем БНФ конструкции:

<ответ> ::= <слова до> <имя пользователя> <слова после> <смайл>: \n <цензурный текст> 

<слова до> ::=
А |
Ой, |
Хм...  |
Ого! |
Эй, |
Ой-вэй, |
Эх, |
Капец!

<имя пользователя>::=
<имя> <фамилия> |
<никнейм>

<слова после> ::=
негодует |
повысил градус беседы |
высказался |
сказанул |
ропчет |
щебечет |
гаркнул |
не подумал, что сказал |
додумался |
прозрел 

<смайл> ::=
😂 |
🙉 |
🙊 |
🙈 |
😱 |
🐤 |
🦄  |
🌸 |
💔 |

Обучение бота

Для обучения бота существуют две команды:
/t - проверка мата в словаре
/s - добавления нецензурного слова в словарь.

Для тестирования бота есть группа:
https://t.me/GDGCensorChat

Можно напрямую написать боту:

Размещение бота на сервере Heroku

  1. Создаем новый пайплайн с названием приложения: gdg-censor-bot
  2. Подключаем пайплайн к репозиторию VadimCpp/gdg-censor-bot
  3. Добавляем новое приложение в раздел production
  4. Заходим в BotFather и указываем домен приложения для нашего бота: https://gdg-censor-bot.herokuapp.com/
  5. При запуске приложения на продакте, webHook устанавливается автоматически.

Итого

Телеграм-боты - это клево! 👍
Телеграм боты - это сила! 💪👊
Стоит ли их использовать для своих задач? Однозначно! И даже не сомневайтесь!


Первая версия бота, сделанного на хакатоне находится в открытом доступе:
https://github.com/VadimCpp/gdg-censor-bot

Хотите помочь?

Просто присоединяйтесь к группе:
https://t.me/GDGCensorChat

Тут можно свободно тестировать все мыслимые и немыслимые бранные слова.

Обратная связь:
ВК: https://vk.com/vadimcpp
Телеграм: @vadimcpp

Продолжение

О том, какие вопросы надо решить создателям бота, можно почитать в части 2.