Суть работы 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 бота и его функциональности. В планах доработать бота, чтобы он мог выдавать предупреждения пользователям и вести статистику запрещенных слов.
Комментарии