15 июля 2024

🤖🔞 Пишем Telegram-бота для фильтрации нецензурной лексики в чате

🔥 Алексей. Занимаюсь frontend-разработкой и пишу SQL скрипты в одной it компании. Веду личный блог о моем опыте в IT и около IT на YouTube - https://www.youtube.com/@tehno.maniak
Представляю бесплатного Telegram-бота для фильтрации мата в чате Telegram. Telegram-бот разработан на JavaScript с использованием фреймворка grammY. В основе работы бота лежит база данных нецензурных выражений, состоящая из 5668 слов. Полный код проекта можно посмотреть в моем Github-репозитории.
🤖🔞 Пишем Telegram-бота для фильтрации нецензурной лексики в чате

Суть работы Telegram-бота очень проста: бот сверяет все поступающие сообщения от пользователей в чате с базой нецензурных выражений и в случае обнаружения совпадений удаляет сообщение пользователя и направляет уведомление пользователю об удалении.

Структура проекта

Структура фильтра нецензурных выражений
        anti-spam-telegram-bot/
├── .env
├── index.js
├── package.json
├── package-lock.json
├── README.md
└── banword.txt
    
  1. index.js: Основной файл проекта, содержащий весь код логики бота.
  2. banword.txt: Файл с базой нецензурных выражений.

Пример файла .env:

Пример файла .env
        TELEGRAM_BOT_TOKEN=your-telegram-bot-api-key
    
👨‍💻🎨 Библиотека фронтендера
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека фронтендера»

Создание Telegram-бота

Создадим экземпляр бота и инициализируем его с API-ключом Telegram:

index.js
        const bot = new Bot(process.env.TELEGRAM_BOT_TOKEN);
    

Далее нам необходимо:

  1. Считать содержимое файла banword.txt с использованием функции readFileSync из модуля fs (файловая система) в кодировке 'utf-8'.
  2. Разделить прочитанное содержимое на строки по символу новой строки (`\n`), создав массив строк.
  3. Преобразовать каждую строку в массиве: удалить начальные и конечные пробелы с помощью функции trim() и преобразовать все символы строки в нижний регистр с помощью функции toLowerCase().
  4. Отфильтровать массив, удаляя пустые строки (длиной 0).
index.js
        const forbiddenWords = fs.readFileSync('./banword.txt', 'utf-8')
  .split('\n')
  .map(word => word.trim().toLowerCase())
  .filter(word => word.length > 0);
    

Далее напишем обработчик событий для входящих текстовых сообщений:

index.js
        bot.on('message:text', async (ctx) => {
  const messageText = ctx.message.text.toLowerCase();

  const containsForbiddenWord = forbiddenWords.some((word) => messageText.includes(word));

  if (containsForbiddenWord) {
    try {
      await ctx.api.deleteMessage(ctx.chat.id, ctx.message.message_id);

      const warningMessage = 'В чате запрещен мат!';
      await ctx.reply(warningMessage);
    } catch (error) {
      console.error('Ошибка при удалении сообщения или отправке предупреждения:', error);
    }
  }
});
    

Данный код блокирует сообщения, содержащие запрещённые слова, и предупреждает пользователя о нарушении правил чата.

Запуск Telegram-бота

Чтобы данный Telegram бот работал, необходимо добавить его в чат, который мы хотим администрировать и наделить бота правами администратора на просмотр чата и удаление сообщений. О том, как разместить Telegram-бота на своем сервере, используя менеджер процессов pm2, я рассказал в своем видео на YouTube.

Заключение

В этой статье я рассмотрел основные составляющие моего Telegram-бота, необходимые для его работы. Полный код проекта можно посмотреть в моем GitHub репозитории. У себя на YouTube я сделал подробный обзор на своего Telegram бота и его функциональности. В планах доработать бота, чтобы он мог выдавать предупреждения пользователям и вести статистику запрещенных слов.

***

Статьи по теме

Комментарии

ВАКАНСИИ

Добавить вакансию
Go Team Lead
по итогам собеседования
Разработчик на Go в Еду
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ