Як хутка стварыць тэлеграм-бота ды выдаляць спам?!
Раздражают эти крипто-миллионеры из Дуб....Як яны задзяўблі
Прывітанне, сябры!
За апошнія некалькі дзён наш ТГ-канал сутыкнуўся з праблемай спаму чарговай крыпта-памо...кі.
Кожныя паў гадзіны ў чат з каментарамі пачалі прыходзіць паведамленні кшталту:
Раздражают эти крипто-миллионеры из Дубая? Тогда это для тебя... Многие не подозревали, но сейчас криптовалюта снова взлетает, и всего за пару месяцев люди приобретают машины и квартиры.
і гэтак далей.
Звычайнае выдаленне ды афармленне скарг на спам не дапамагло - паведамленні з'яўляліся зноў. У выніку за паў гадзіны працы мы стварылі невялікага чат-бота,які вырашыў нашую праблему. Ніжэй я пакрокава распавяду як яго запусціць.
Ствараем бота
Каб стварыць бота - дастаткова перайсці ў афіцыйны бот тэлеграма https://t.me/BotFather - і націснуць кнопку "старт".
Затым са спісу каманд выбраць /newbot
і ўвесці імя бота. (Павінна скончвацца на _bot).
У выніку мы атрымаем спасылку на нашага бота і HTTP API.
Усё! Бот створаны. зараз трэба заставіць яго працаваць.
Далучаем бота ў адміны групы
Пераходзім у дадатку тэлеграма да нашай групы (якую будзе кантраляваць бот) і дадаем нашага бота у адміны чата (шукаем па назве бота).
Пішам код бота
Увогуле вы можаце скарыстацца ужо напісаным кодам з нашага рэпазіторыю: https://github.com/bel-frontend/telegram_bot - Рэкамендую. Тут ёсць амаль усе што нам спатрэбіцца.
Ніжэй мы разглядзім код больш падрабязна. Бот будзе напісаны з выкарыстаннем Nodejs 20-й версіі (далей- ноды). (як усталяваць ноду - мы разглядалі раней.)
Пасля устаноўкі ноды выканаем каманду ў тэрмінале
npm init -y
.
Затым усталюем пакет node-telegram-bot-api
праз каманду
npm install -S node-telegram-bot-api
і створым файл bot.js
.
Затым дададзім у яго наступны код
const TelegramBot = require('node-telegram-bot-api'); const token = process.env.TELEGRAM_BOT_TOKEN; const bot = new TelegramBot(token, { polling: true }); const TARGET_CHAT_ID = process.env.TARGET_CHAT_ID; // Add your target chat ID in the .env file bot.on('message', (msg) => { const chatId = msg.chat.id; const text = msg.text; console.log(text, chatId.toString()); if (chatId.toString() === TARGET_CHAT_ID) { // Analyze messages and decide to delete if (text && shouldDeleteMessage(text)) { console.log('delete') bot.deleteMessage(chatId, msg.message_id).catch((error) => { console.error('Failed to delete message:', error); }); } } }); function shouldDeleteMessage(text) { // Simple example of a condition to delete a message // You can implement any analysis logic here // тут можам і ШІ далучыць ці што прасцей, як я зрабіў const forbiddenWords = ['test', 'крипто','криптовалюта','подписывайтесь на канал']; return forbiddenWords.some((word) => text.trim().toLowerCase().includes(word)); }
Затым ствараем файл .env
з параметрамі бота
TELEGRAM_BOT_TOKEN= TARGET_CHAT_ID=
сюды мы пазней запішам атрыманы намі токен і ID групы (яе мы атрымаем далей) . Трымайце гэтыя параметры у сакрэце і нікому іх не давайце.
Атрымліваем ID групы
атрымаць ID групы магчыма некалькімі спосабамі. Я далека не хадзіў і выкарыстаў наш бот для атрымання ID.
У кодзе вы пабачыце наступную строчку
console.log(text, chatId.toString());
Яна нам і дапаможа даведацца айдзі нашай групы. Далей па пунктах.
- Запусцім наш код камандай
node --env-file=.env bot.js
- Адчыняем наш чат і набіраем якісьці тэкст
- Глядзім логі запушчанага коду і бачым нешта падобнае да
test-text -1001092593475
лічбы з рыскай і будуць нашым ID. 4. Капіруем і дадаем у наш файл конфігу. Ужо на гэтым этапе наш бот можа працаваць.
Запускаем лакальна і тэсціруем
Запускаем зноў наш бот камандай
node --env-file=.env bot.js
і набіраем у нашым чаце што-небудзь з ключавымі словамі якія патрэбна выдаліць. Глядзім на вынікі. Бот павінен імгненна выдаляць паведамленні з вызначынамі ў
const forbiddenWords = ['test', 'крипто','криптовалюта','подписывайтесь на канал'];
словамі.
На гэтым этапе наш бот ужо працуе, але мы ж не хочам каб ён працаваў толькі калі наш ПК уключаны. таму нам трэба перанесці яго на сервер. (можна стварыць свой які ляжыць дома дзе пад тэлевізарам, але мы выберым воблачны варыянт) Таму -
Запускаем бота праз AWS (Апцыянальна) з выкарыстаннем нашага рэпазіторыю
Мы ужо разглядалі як запусціць свой уласны сервер, таму адразу пяройдзем да запуску EC2.
Пасля таго як запусцілі наш інстанс, запусцім тэрмінал выбраўшы наш інстанс ды націснуўшы кнопку connect
.
У тэрмінале паслядоўна запускаем наступныя каманды
# Update the package list sudo apt-get update # Install Docker sudo apt-get install -y docker.io # Start and enable Docker sudo systemctl start docker sudo systemctl enable docker # Verify Docker installation sudo docker --version # (Optional) Add your user to the Docker group to run Docker commands without sudo sudo usermod -aG docker $USER newgrp docker # Install git sudo apt install git
Зараз трэба перанесці наш праект на сервер.
git clone https://github.com/bel-frontend/telegram_bot.git cd telegram_bot/
Створым тут файл .env
камандай
nano .env
і уставім туды дадзеныя з лакальнага файла .env
TELEGRAM_BOT_TOKEN=xxxxxxxxxxxxxx TARGET_CHAT_ID=-xxxxxxxxxx
націскаем ctrl + x
затым y
, затым кнопку 'Enter'
І выканаем каманду
sudo chmod 777 ./deploy.sh
і запусцім скрыпт які запусціць наш бот.
./deploy.sh
Пасля паверым працу докера :
docker ps
І пабачым наступнае:
ubuntu@ip-172-31-20-44:~/telegram_bot$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7295f11173d telegram_bot "docker-entrypoint.s…" 21 seconds ago Up 20 seconds 0.0.0.0:3004->3000/tcp, :::3004->3000/tcp telegram_bot
што азначае што наш бот працуе.
І пераходзім у наш чат і тэсціруем працу бота.
Вынікі
У выніку мы атрымалі працуючы бот які дапаможа адбіцца ад навалы спаму, якая апошні час апанавала наш невялічкі чат. Вельмі спадзяюся што мой артыкул будзе для вас карысным і дапаможа вам і вашым чатам. Усім вялікі дзякуй што дачыталі нас да канца.
Па усіх пытаннях можаце пісаць нам на пошту ці тут у каментарах.
Каментары
(Каб даслаць каментар залагуйцеся ў свой уліковы запіс)