Як хутка стварыць тэлеграм-бота ды выдаляць спам?!
Раздражают эти крипто-миллионеры из Дуб....Як яны задзяўблі
Прывітанне, сябры!
За апошнія некалькі дзён наш ТГ-канал сутыкнуўся з праблемай спаму чарговай крыпта-памо...кі.
Кожныя паў гадзіны ў чат з каментарамі пачалі прыходзіць паведамленні кшталту:
Раздражают эти крипто-миллионеры из Дубая? Тогда это для тебя... Многие не подозревали, но сейчас криптовалюта снова взлетает, и всего за пару месяцев люди приобретают машины и квартиры.
і гэтак далей.
Звычайнае выдаленне ды афармленне скарг на спам не дапамагло - паведамленні з'яўляліся зноў. У выніку за паў гадзіны працы мы стварылі невялікага чат-бота,які вырашыў нашую праблему. Ніжэй я пакрокава распавяду як яго запусціць.
Ствараем бота
Каб стварыць бота - дастаткова перайсці ў афіцыйны бот тэлеграма https://t.me/BotFather - і націснуць кнопку "старт".
Затым са спісу каманд выбраць /newbot і ўвесці імя бота. (Павінна скончвацца на _bot).
У выніку мы атрымаем спасылку на нашага бота і HTTP API.
Усё! Бот створаны. зараз трэба заставіць яго працаваць.
Далучаем бота ў адміны групы
Пераходзім у дадатку тэлеграма да нашай групы (якую будзе кантраляваць бот) і дадаем нашага бота у адміны чата (шукаем па назве бота).
Пішам код бота
Увогуле вы можаце скарыстацца ужо напісаным кодам з нашага рэпазіторыю: https://github.com/bel-frontend/telegram_bot - Рэкамендую. Тут ёсць амаль усе што нам спатрэбіцца.
Ніжэй мы разглядзім код больш падрабязна. Бот будзе напісаны з выкарыстаннем Nodejs 20-й версіі (далей- ноды). (як усталяваць ноду - мы разглядалі раней.)
Пасля устаноўкі ноды выканаем каманду ў тэрмінале
text1npm init -y
.
Затым усталюем пакет node-telegram-bot-api праз каманду
text1npm install -S node-telegram-bot-api
і створым файл bot.js.
Затым дададзім у яго наступны код
text1const TelegramBot = require('node-telegram-bot-api'); 2 3 4const token = process.env.TELEGRAM_BOT_TOKEN; 5const bot = new TelegramBot(token, { polling: true }); 6 7const TARGET_CHAT_ID = process.env.TARGET_CHAT_ID; // Add your target chat ID in the .env file 8 9bot.on('message', (msg) => { 10 const chatId = msg.chat.id; 11 const text = msg.text; 12 console.log(text, chatId.toString()); 13 14 if (chatId.toString() === TARGET_CHAT_ID) { 15 // Analyze messages and decide to delete 16 if (text && shouldDeleteMessage(text)) { 17 console.log('delete') 18 bot.deleteMessage(chatId, msg.message_id).catch((error) => { 19 console.error('Failed to delete message:', error); 20 }); 21 } 22 } 23}); 24 25function shouldDeleteMessage(text) { 26 // Simple example of a condition to delete a message 27 // You can implement any analysis logic here 28 // тут можам і ШІ далучыць ці што прасцей, як я зрабіў 29 const forbiddenWords = ['test', 'крипто','криптовалюта','подписывайтесь на канал']; 30 return forbiddenWords.some((word) => text.trim().toLowerCase().includes(word)); 31}
Затым ствараем файл .env з параметрамі бота
text1TELEGRAM_BOT_TOKEN= 2TARGET_CHAT_ID=
сюды мы пазней запішам атрыманы намі токен і ID групы (яе мы атрымаем далей) . Трымайце гэтыя параметры у сакрэце і нікому іх не давайце.
Атрымліваем ID групы
атрымаць ID групы магчыма некалькімі спосабамі. Я далека не хадзіў і выкарыстаў наш бот для атрымання ID.
У кодзе вы пабачыце наступную строчку
text1 console.log(text, chatId.toString());
Яна нам і дапаможа даведацца айдзі нашай групы. Далей па пунктах.
- Запусцім наш код камандай
node --env-file=.env bot.js - Адчыняем наш чат і набіраем якісьці тэкст
- Глядзім логі запушчанага коду і бачым нешта падобнае да
text1test-text -1001092593475
лічбы з рыскай і будуць нашым ID. 4. Капіруем і дадаем у наш файл конфігу. Ужо на гэтым этапе наш бот можа працаваць.
Запускаем лакальна і тэсціруем
Запускаем зноў наш бот камандай
text1node --env-file=.env bot.js
і набіраем у нашым чаце што-небудзь з ключавымі словамі якія патрэбна выдаліць. Глядзім на вынікі. Бот павінен імгненна выдаляць паведамленні з вызначынамі ў
text1const forbiddenWords = ['test', 'крипто','криптовалюта','подписывайтесь на канал']; 2
словамі.
На гэтым этапе наш бот ужо працуе, але мы ж не хочам каб ён працаваў толькі калі наш ПК уключаны. таму нам трэба перанесці яго на сервер. (можна стварыць свой які ляжыць дома дзе пад тэлевізарам, але мы выберым воблачны варыянт) Таму -
Запускаем бота праз AWS (Апцыянальна) з выкарыстаннем нашага рэпазіторыю
Мы ужо разглядалі як запусціць свой уласны сервер, таму адразу пяройдзем да запуску EC2.
Пасля таго як запусцілі наш інстанс, запусцім тэрмінал выбраўшы наш інстанс ды націснуўшы кнопку connect.

У тэрмінале паслядоўна запускаем наступныя каманды
text1# Update the package list 2sudo apt-get update 3 4# Install Docker 5sudo apt-get install -y docker.io 6 7# Start and enable Docker 8sudo systemctl start docker 9sudo systemctl enable docker 10 11# Verify Docker installation 12sudo docker --version 13 14# (Optional) Add your user to the Docker group to run Docker commands without sudo 15sudo usermod -aG docker $USER 16newgrp docker 17 18# Install git 19sudo apt install git 20
Зараз трэба перанесці наш праект на сервер.
text1git clone https://github.com/bel-frontend/telegram_bot.git 2cd telegram_bot/
Створым тут файл .env камандай
text1nano .env
і уставім туды дадзеныя з лакальнага файла .env
text1TELEGRAM_BOT_TOKEN=xxxxxxxxxxxxxx 2TARGET_CHAT_ID=-xxxxxxxxxx
націскаем ctrl + x затым y, затым кнопку 'Enter'
І выканаем каманду
text1sudo chmod 777 ./deploy.sh
і запусцім скрыпт які запусціць наш бот.
text1./deploy.sh
Пасля паверым працу докера :
text1docker ps
І пабачым наступнае:
text1ubuntu@ip-172-31-20-44:~/telegram_bot$ docker ps 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e7295f11173d telegram_bot "docker-entrypoint.s…" 21 seconds ago Up 20 seconds 0.0.0.0:3004->3000/tcp, :::3004->3000/tcp telegram_bot
што азначае што наш бот працуе.
І пераходзім у наш чат і тэсціруем працу бота.
Вынікі
У выніку мы атрымалі працуючы бот які дапаможа адбіцца ад навалы спаму, якая апошні час апанавала наш невялічкі чат. Вельмі спадзяюся што мой артыкул будзе для вас карысным і дапаможа вам і вашым чатам. Усім вялікі дзякуй што дачыталі нас да канца.
Па усіх пытаннях можаце пісаць нам на пошту ці тут у каментарах.
Каментары
(Каб даслаць каментар залагуйцеся ў свой уліковы запіс)