Как создать Телеграм-бота и запустить его на VDS
В этом руководстве пошагово расскажем о создании бота на Python и обо всем, что нужно для его запуска на VDS:
- Создадим VDS.
- Настроим окружение для разработки.
- Зарегистрируем нового бота в Телеграме.
- Напишем код простого бота.
- Запустим бота на VDS.
- Настроим автоматизацию.
Итак, приступим.
1. Создадим VDS
Перейдите в панель управления, выберите конфигурацию, операционную систему и нажмите «Создать».
Мы будем использовать gen2.1.1.10 и Ubuntu 24.04.2. На отдельной странице мы рассказали подробнее о выборе сервера для Телеграм-бота.
Когда сервер станет активным — подключитесь к нему. Команду для подключения по SSH можно скопировать из карточки сервера. Если используете SSH-ключ, не забудьте изменить путь к файлу ключа.
2. Настроим окружение для разработки
При создании нового сервера, мы всегда рекомендуем сразу обновить пакеты операционной системы до актуальных версий.
Сначала получите свежий список пакетов доступных для обновления:
sudo apt update
Установите доступные обновления:
sudo apt upgrade
В Ubuntu 24.04.2 уже предустановлен Python 3. Узнать точную версию можно командой:
python3 -V
Мы рекомендуем вести разработку в виртуальной изолированной среде — Virtual Environment (venv) для проектов Python. При использовании venv, все исполняемые файлы и библиотеки будут скопированы в выбранный каталог и приложение будет использовать именно их. Такой подход обеспечивает стабильность среды разработки и чистоту операционной системы.
Для этого сначала установите пакет для создания виртуальных изолированных сред в Python:
sudo apt install python3.12-venv
Затем создайте виртуальную изолированную среду:
python3 -m venv my_tgbot_env
где,
- my_tgbot_env — название виртуального окружения
Активируйте venv:
source my_tgbot_env/bin/activate
Перейдите в каталог проекта:
cd my_tgbot_env
Теперь установите самый популярный фреймворк для разработки Телеграм-ботов на Python:
pip install python-telegram-bot
На этом наше окружение для деплоя — готово.
3. Зарегистрируем нового бота в Телеграме
Найдите в Телеграме @BotFather — он отвечает за всю работу с ботами. Введите команду /start чтобы посмотреть все его возможности.
Для создания нового бота выберите /newbot. Потом введите последовательно название и username будущего бота. Название может быть любым, а username — уникальный. После этого получите подтверждение, что бот создан и его можно найти по адресу https://t.me/username_бота, а также токен для доступа к API и ссылку на официальную документацию.
Регистрация бота завершена, переходим к написанию кода.
4. Напишем код простого бота
Вернитесь в консоль подключения к VDS и создайте файл, в котором будет размещен код бота. Создать файл в Linux можно разными способами, например:
nano bot.py
Будет открыт новый пустой файл. В нашем примере бот будет понимать команды /start и /help, а также будет отправлять пользователю его же сообщение в ответ. Вставьте в новый файл следующий код:
import logging from telegram import Update from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes # Настройка логирования logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" # Обработчик команды /start async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: user = update.effective_user await update.message.reply_html( f"Привет, {user.mention_html()}!\nЯ простой бот. Отправь мне любое сообщение, и я его повторю." ) # Обработчик команды /help async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: await update.message.reply_text("Это справка. Я пока что умею только повторять твои сообщения.") # Обработчик текстовых сообщений (эхо-функция) async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: """Повторяет сообщение пользователя.""" await update.message.reply_text(update.message.text) def main() -> None: application = Application.builder().token(BOT_TOKEN).build() # Регистрируем обработчики команд application.add_handler(CommandHandler("start", start)) application.add_handler(CommandHandler("help", help_command)) # Регистрируем обработчик текстовых сообщений application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) application.run_polling() if __name__ == "__main__": main()
В переменную BOT_TOKEN вместо YOUR_TELEGRAM_BOT_TOKEN вставьте API-токен, полученный от @BotFather.
Сохраните файл и закройте его.
Код бота — готов.
5. Запустим бота на VDS
Запустите бота командой:
python3 bot.py
Теперь найдите своего бота в Телеграме по username, введите команду /start и напишите ему любое сообщение, в ответ от бота вы получите тот же самый текст.
6. Настроим автоматизацию
Для большего удобства, настроим автоматический запуск бота при старте операционной системы. Пригодится на тот случай, если сервер будет перезагружен.
Сначала нужно узнать путь к интерпретатору Python. Когда виртуальное окружение активно, введите команду:
which python3
В ответ получите примерно такой вывод:
/home/ubuntuuser/my_tgbot_env/bin/python3
Выполните команду для создания файла:
sudo nano /etc/systemd/system/tgbot.service
Будет открыт пустой файл в текстовом редакторе nano.
Вставьте в него текст:
[Unit] Description=my tgbot service After=network-online.target After=syslog.target [Service] Type=simple User=ubuntuuser Group=ubuntuuser ExecStart=/home/ubuntuuser/my_tgbot_env/bin/python3 /home/ubuntuuser/my_tgbot_env/bot.py [Install] WantedBy = multi-user.target
где,
- User — имя вашего пользователя в системе.
- Group — группа, в которую входит ваш пользователь.
- ExecStart — команда запуска. Тут укажите путь к интерпретатору Python и самому файлу с кодом нашего бота.
Сохраните файл.
Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reload
Добавьте новый сервис в автозагрузку:
sudo systemctl enable telegram-bot.service
Запустите сервис:
sudo systemctl start telegram-bot.service
Теперь наш бот будет запускаться при перезагрузке сервера, без участия человека. Автоматизация настроена.
Несколько команд для управления сервисом
Остановить бота:
sudo systemctl stop telegram-bot.service
Перезапустить бота:
sudo systemctl restart telegram-bot.service
Проверить, включен ли в автозагрузку:
sudo systemctl is-enabled telegram-bot.service
Отключить из автозагрузки:
sudo systemctl disable telegram-bot.service
Ответы на другие вопросы
- Какой минимальный срок аренды VDS?
- Какие операционные системы доступны для установки на VDS?
- Как использовать собственный SSH-ключ при создании сервера?
- Как подключиться к VDS?
- Возможно ли платить меньше за неиспользуемый VDS?