January 28, 2023

Телеграм бот для Subspace

В этом гайде я расскажу, как вы можете создать собственного бота в Telegram для управления и мониторинга вашей ноды Subspace.

Гайд состоит из 2х частей:

1) Создание бота Telegram и получение API ключей

2) Установка и настрйока бота на вашу ноду

1.1) Регистрируем бота

Пишем в телеграме https://t.me/BotFather в сообщении

/newbot

Придумываем название(произвольно) и имя ( должно ОБЯЗАТЕЛЬНО заканчиваться на bot,
Пример: abcde_bot или abcdetestBot )

Сохраняем HTTP API token, который выдал BotFather, он нам пригодится

1.2) Получаем api_hash для telegram-api-server

При использовании стандартного сервера Telegram ограничения и тайм-ауты, после которых бот может перестать отвечать.

Для того, чтобы наш бот был стабилен и доступен - мы развернем свой собственный telegram-api-server на нашей ноде.

Переходим и авторизовываемся в официальный раздел apps в веб-версии Telegram: https://my.telegram.org

Переходим в раздел API development tools

Заполняем поля:
App title: Любое название на английском языке
Shortname: Любое название английском языке без пробелов
Url: Произвольная ссылка или IP
Platform: Desktop
Description: Придумайте любое описание

После чего нажимаем Create application.

В случае успеха ( не всегда с первого раза, иногда отдает "ОШИБКА" без описания) получаем что-то подобное

Сохраняем себе api_id и api_hash

На это регистрация бота и приложения для него завершена.

2.1) Устанавливаем бота на сервер

Клонируем репозиторий:

git clone https://github.com/mrShakedown/subspace-bot.git

mv ./subspace-bot/* ~/

Создаем сервис для бота:

nano - текстовый редактор

nano /etc/systemd/system/telegram-bot.service

туда вписываем:

[Unit]
Description=Telegram-bot
After=network.target
[Service]
Type=simple
ExecStart=/root/bot.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

Для сохранения и выхода из редактора: CTRL+O, CTRL+X

Создаем скрипт для запуска бота:


nano /root/bot.sh

туда вписываем:

#!/bin/bash
python3 /root/bot.py

Выдаем права на исполнение:
chmod +x /root/bot.sh

Правим конфигурацию:

nano /root/config.py

Где:

token = 'YOUR_TOKEN' - Ваш токен бота

data_path = '/dev' - путь, для отслеживания места

timer = 10 - частота проверки условия для алертов и их отправки (в секундах)

admin_id = 123 - Ваш уникальный ID учетной записи, поолучить можно у бота https://t.me/my_id_bot (человек с другим ID не сможет пользоваться вашим ботом)

2.2) Подготовка окружения

Устанавливаем библиотеку для работы бота https://github.com/eternnoir/pyTelegramBotAPI

apt install python3-pip
pip install pyTelegramBotAPI

Устанавливаем окружение для telegram-api-server (официальное руководство)

cd ~

git clone --recursive https://github.com/tdlib/telegram-bot-api.git

cd telegram-bot-api

mkdir build && cd build/

apt-get install libssl-dev build-essential checkinstall zlib1g-dev cmake openssl ccache gperf -y

Собираем

cmake -DCMAKE_BUILD_TYPE=Release ..

cmake --build . --target install

Создаем сервис для работы telegram-api-server

nano /etc/systemd/system/telegram-api.service

Туда вписываем:

[Unit]
Description=telegram-api-server
After=network.target
[Service]
Type=simple
ExecStart=telegram-bot-api --api-id=123 --api-hash=123 -p 8080
[Install]
WantedBy=multi-user.target

где:
api-id и api_hash
отсюда

и p = порт на ваш выбор, по умолчанию 8080

Для сохранения и выхода из редактора: CTRL+O, CTRL+X

Сохраняем и запускаем

Обновляем созданные сервисы для бота и апи-сервера

source ~/.bash_profile

Запускаем

systemctl enable telegram-api.service

systemctl enable telegram-bot.service

systemctl restart telegram-api.service telegram-bot.service

Итог:

У вас на сервере запущен бот, к которому только вы имеете доступ, с помощью которого можно отслеживать состояние ноды в ручном (список команд в /help)

или автоматически(алерты по нажатию /on или /off )

Основной список команд можно получить у бота в чате:
/help - покажет команды на настоящий момент

Также вы можете добавить свои команду непосредственно в bot.py и перезапустить сервис (systemctl restart telegram-bot.service)

По мере добавления разных фич - гайт будет обновляться ( очень хочется сократить

P.s. я не профессиональный прогер, адекватная критика не возбраняется (fork it)