Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Преимущества облачного сервера для Telegram-бота
Чтобы бот заработал, его необходимо зарегистрировать в Telegram. За регистрацию отвечает BotFather.
Шаг 1. Найдите пользователя @BotFather. В приветствии можно изучить общую документацию о ботах и API. В самом низу нажимаем кнопку «Запустить», в ответ получим список возможных команд и что они делают.
Шаг 2. Нам нужно зарегистрировать нового бота, поэтому выбираем команду:
Шаг 3. Теперь необходимо придумать имя нашего бота. Указываем что угодно, для примера напишем:
Шаг 4. Следующий шаг – необходимо придумать логин. Обратите внимание, чтобы логин заканчивался на «bot» в любом его виде, либо «*Bot», либо «_bot»:
Сложность этого шага заключается в том, чтобы найти свободный никнейм. Если такой логин занят, мы получим соответствующее извещение.
При успешной регистрации в ответ получим приветственное сообщение и ключ для HTTP-API. Сохраните ключ в надёжном месте.
Если потерялся сохранённый ключ, узнать его можно при помощи команды /token. Далее выберите бота, для которого нужен новый ключ. Заново создавать бота не потребуется.
Проверка и настройка бота
После завершения регистрации ищем бота в списке контактов. На текущий момент он ничего не умеет делать, просто прочитывает сообщения. С логикой работы разберёмся позже.
Вернёмся в @BotFather и попросим его показать наших ботов:
В появившемся списке выберем нужного бота и посмотрим, что с ним можно сделать.
По названиям кнопок будет понятно, что можно изменить имя, описание (приветствие при первом подключении), загрузить аватар. Из этого меню можно указать список доступных команд для бота с их описанием. Сами команды работать будут только с использованием дополнительной логики, реализованной сторонними программами-клиентами.
Подготовка рабочего пространства
Для запуска бота нам понадобится рабочее пространство. В нашем случае мы будем использовать облачный сервер. Подойдёт даже самая простая конфигурация, а из операционных систем порекомендуем Ubuntu или Debian. Но отметим, ввиду того, что обновления для Debian выходят с большим опозданием, скорее всего, версии нужных пакетов не будут соответствовать минимальным требованиям программ-клиентов и придётся собирать нужную версию Python из исходников.
Выбор языка программирования
Самые распространённые боты написаны на языке Python. Установить Python на облачный сервер можно командой:
sudo apt-get install python3 python3-pipПосле установки проверить версию:
Одной из последних версий является 3.11, но для работы нашего примера подойдёт и 3.7.
Установка python-telegram-bot
Создадим каталог для виртуального окружения, зайдём в него и установим копию Python:
mkdir bot_env && cd bot_envАктивируем виртуальное окружение:
После успешной активации перед строкой для ввода команд появится venv. Теперь установим клиент:
pip install python-telegram-botДеактивировать виртуальное окружение можно, набрав:
Предусмотрена возможность запускать скрипты без его явной активации, в таком случае необходимо набирать полный путь, вместо python3.
При деактивированном окружении в нашем примере набираем:
./bot_env/venv/bin/python3Примеры ботов можно найти на этой странице. Для демонстрации работы используем пример echobot.py, сохраните его в домашнюю папку (по умолчанию это /root). Если используется виртуальное окружение, директория будет /root/bot_env. Необходимо в 67 строке заменить слово TOKEN на ключ, полученный при регистрации.
Загрузить пример можно сначала на свой компьютер, отредактировать файл и загрузить через файловый менеджер, например WinSCP.
Запустить пример можно, набрав в консоли:
После успешного запуска в ответ получим:
telegram.ext._application - INFO - Application startedНаш бот echobot.py умеет читать сообщения и отсылать ответ. Найдём в Телеграм пользователя с ником, который мы указывали при регистрации: @{никнейм}Bot и нажмём кнопку «Запустить» или отправим команду /start.
Если всё сделали верно, в ответ получим приветствие с вашим именем и ссылкой на профиль. При дальнейшем общении бот будет отправлять сообщения с полученным текстом.
echobot.py – самый простой демонстрационный бот. На странице примеров python-telegram-bot есть более сложные рабочие заготовки, которые можно сразу опробовать и применить для своих нужд с минимальными правками.
Чтобы бот автоматически запускался при загрузке системы, создадим свою службу в Systemd. Systemd доступен в новых версиях Ubuntu и в Debian версии 8.
Если не использовалось виртуальное окружение, нам потребуется полный путь к Python. Узнать, где он установлен, можно командой:
В ответ получим строку вида:
Перейдём в каталог Systemd:
- в Debian:
/usr/lib/systemd/system/ - Ubuntu:
/lib/systemd/system/
И создадим файл bot.service:
[Unit]
Description=My Python Bot
After=network.target network-online.target
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
ExecStartPre=/bin/mkdir -p /var/run/bot
PIDFile=/var/run/bot/service.pid
ExecStart=<путь к питону> <путь к скрипту бота>
[Install]
WantedBy=multi-user.targetВозможные значения ExecStart:
- без
venv:ExecStart=/usr/local/bin/python3 /root/echobot.py - в
venv:ExecStart=/root/bot_env/venv/bin/python3 /root/bot_env/echobot.py
Сохраняем файл, выставляем разрешения не ниже 644, перезагружаем Systemd:
Добавляем службу бота в автозагрузку:
systemctl enable bot.serviceПроверить состояние службы можно командой:
В ответ получим информацию о службе. Нас интересуют 2 пунка:
Loaded: loaded
Active: inactiveСлужба добавлена (loaded), но не запущена (inactive), запустить её можно, перезагрузив облачный сервер или выполнив команду:
Ещё раз проверяем состояние службы, значение «Active» должно стать active (running) и быть зелёного цвета.
Представленный пример на Python представлен как самый простой. Telegram – достаточно популярный, существуют клиентские программы, написанные на разных языках: Java, PHP, NodeJS и прочее. Все имеют готовые примеры для подключения и получения сообщений, нужную логику работы реализует сам пользователь.
В сети можно найти разные готовые скрипты викторин, опросников или прочих развлечений.
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.