Галоўная > Як хутка стварыць тэлеграм-бота ды выдаляць спам?!

Як хутка стварыць тэлеграм-бота ды выдаляць спам?!

спам
тэлеграм

Раздражают эти крипто-миллионеры из Дуб....Як яны задзяўблі

Прывітанне, сябры!
За апошнія некалькі дзён наш ТГ-канал сутыкнуўся з праблемай спаму чарговай крыпта-памо...кі.

Кожныя паў гадзіны ў чат з каментарамі пачалі прыходзіць паведамленні кшталту:

Раздражают эти крипто-миллионеры из Дубая? Тогда это для тебя... Многие не подозревали, но сейчас криптовалюта снова взлетает, и всего за пару месяцев люди приобретают машины и квартиры. і гэтак далей.

Звычайнае выдаленне ды афармленне скарг на спам не дапамагло - паведамленні з'яўляліся зноў. У выніку за паў гадзіны працы мы стварылі невялікага чат-бота,які вырашыў нашую праблему. Ніжэй я пакрокава распавяду як яго запусціць.

Ствараем бота

Каб стварыць бота - дастаткова перайсці ў афіцыйны бот тэлеграма 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());

Яна нам і дапаможа даведацца айдзі нашай групы. Далей па пунктах.

  1. Запусцім наш код камандай node --env-file=.env bot.js
  2. Адчыняем наш чат і набіраем якісьці тэкст
  3. Глядзім логі запушчанага коду і бачым нешта падобнае да
test-text -1001092593475

лічбы з рыскай і будуць нашым ID. 4. Капіруем і дадаем у наш файл конфігу. Ужо на гэтым этапе наш бот можа працаваць.

Запускаем лакальна і тэсціруем

Запускаем зноў наш бот камандай

node --env-file=.env bot.js

і набіраем у нашым чаце што-небудзь з ключавымі словамі якія патрэбна выдаліць. Глядзім на вынікі. Бот павінен імгненна выдаляць паведамленні з вызначынамі ў

const forbiddenWords = ['test', 'крипто','криптовалюта','подписывайтесь на канал'];

словамі.

На гэтым этапе наш бот ужо працуе, але мы ж не хочам каб ён працаваў толькі калі наш ПК уключаны. таму нам трэба перанесці яго на сервер. (можна стварыць свой які ляжыць дома дзе пад целявізарам, але мы выберым воблачны варыянт) Таму -

Запускаем бота праз AWS (Апцыянальна) з выкарыстаннем нашага рэпазіторыю

Мы ужо разглядалі як запусціць свой уласны сервер, таму адразу пяройдзем да запуску EC2.

Пасля таго як запусцілі наш інстанс, запусцім тэрмінал выбраўшы наш інстанс ды націснуўшы кнопку connect.

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

што азначае што наш бот працуе.

І пераходзім у наш чат і тэсціруем працу бота.

Вынікі

У выніку мы атрымалі працуючы бот які дапаможа адбіцца ад навалы спаму, якая апошні час апанавала наш невялічкі чат. Вельмі спадзяюся што мой артыкул будзе для вас карысным і дапаможа вам і вашым чатам. Усім вялікі дзякуй што дачыталі нас да канца.

Па усіх пытаннях можаце пісаць нам на пошту ці тут у каментарах.

Admin, 2024-06-30
Каментары

    (Каб даслаць каментар залагуйцеся ў свой уліковы запіс)

    ;