🤖🔞 Пишем Telegram-бота для фильтрации нецензурной лексики в чате
Представляю бесплатного Telegram-бота для фильтрации мата в чате Telegram. Telegram-бот разработан на JavaScript с использованием фреймворка grammY. В основе работы бота лежит база данных нецензурных выражений, состоящая из 5668 слов. Полный код проекта можно посмотреть в моем Github-репозитории.
Суть работы Telegram-бота очень проста: бот сверяет все поступающие сообщения от пользователей в чате с базой нецензурных выражений и в случае обнаружения совпадений удаляет сообщение пользователя и направляет уведомление пользователю об удалении.
Структура проекта
anti-spam-telegram-bot/ ├── .env ├── index.js ├── package.json ├── package-lock.json ├── README.md └── banword.txt
- index.js: Основной файл проекта, содержащий весь код логики бота.
- banword.txt: Файл с базой нецензурных выражений.
Пример файла .env:
TELEGRAM_BOT_TOKEN=your-telegram-bot-api-key
Создание Telegram-бота
Создадим экземпляр бота и инициализируем его с API-ключом Telegram:
const bot = new Bot(process.env.TELEGRAM_BOT_TOKEN);
Далее нам необходимо:
- Считать содержимое файла
banword.txt
с использованием функцииreadFileSync
из модуляfs
(файловая система) в кодировке 'utf-8'. - Разделить прочитанное содержимое на строки по символу новой строки (`\n`), создав массив строк.
- Преобразовать каждую строку в массиве: удалить начальные и конечные пробелы с помощью функции
trim()
и преобразовать все символы строки в нижний регистр с помощью функцииtoLowerCase().
- Отфильтровать массив, удаляя пустые строки (длиной 0).
const forbiddenWords = fs.readFileSync('./banword.txt', 'utf-8') .split('\n') .map(word => word.trim().toLowerCase()) .filter(word => word.length > 0);
Далее напишем обработчик событий для входящих текстовых сообщений:
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 бота и его функциональности. В планах доработать бота, чтобы он мог выдавать предупреждения пользователям и вести статистику запрещенных слов.