Телеграм бот на Python

В этой статье мы рассмотрим, как развернуть телеграм бота на python.

Статья содержит текстовую инструкцию и несколько видеопримеров на ее основе.

Видеопример №1

Загрузка через Git (и интерфейс) c базой данных SQlite

Содержание видео Таймкоды: - 00:00 - Про проект - 02:25 - Создание файла requirements.txt - 03:00 - Загрузка через интерфейс - 03:30 - Задание конфигурации - 04:35 - Загрузка SQLite - 05:30 - Загрузка через Git - 06:45 - Генерация конфигурационного файла amvera.yml через сервис генерации - 09:25 - Генерация конфигурационного файла amvera.yml через интерфейс и выполнение git pull

Видеопример №2

Загрузка через интерфейс

Инструкция с загрузкой через push в git

Возьмем готовый пример эхо бота от создателя библиотеки для работы с телеграмом python-telegram-bot.

Подсказка

Для ознакомления с принципом работы с git рекомендуем эту статью, которая позволит понять, как создавать git-репозиторий и вносить в него изменения.

Предварительная подготовка

  • В телеграме через поиск найти бот «BotFather» и запросить у него создание нового телеграм бота. Он попросит ввести название и username для бота, после чего выдаст токен.

  • Скопировать выданный токен и вставить его в файл примера эхо бота на место слова TOKEN в функции main()

  • Написать YAML файл или Dockerfile. Для yaml у нас есть генератор, поддерживающий ограниченный набор окружений, в остальных случаях рекомендуется использовать Dockerfile. Но в данном примере вам подойдет генератор yaml.

  • Создать файл с зависимостями requirements.txt

  • Привязать репозиторий к Amvera

  • Сделать push в master

Создание YAML файла

Подробно о том, как вручную составить файл конфигурации описано в документации. Мы же воспользуемся автоматическим графическим инструментом генерации.

python_config

  • Выбираем окружение Python и версию.

  • Указываем версию и путь до файла requirements.txt. Очень важно указать все используемые в проекте пакеты в этом файле, чтобы облако смогло их скачать через pip.

  • Указываем путь до файла, содержащего точку входа в программу (тот файл, который вы указываете интерпретатору питона, когда запускаете приложение). В нашем случае это файл echobot.py (если ваш файл находится не в корневой папке проекта, то нужно указывать путь относительно корня проекта. Если бы мой файл был в папке src, мы бы указали в этом поле src/echobot.py)

  • Если в процессе работы ваш бот собирает какие-то данные от пользователя, которые следует сохранять на диск, то их следует класть в папку data. В противном случае при перезапуске проекта все данные будут потеряны!

  • Порт можно указать любой, так как в нашем случае он не играет никакой роли (но в большинстве случаев мы рекомендуем использовать порт 80, именно он открыт в Amvera).

  • Нажимаем на кнопку Generate YAML, после чего начинается загрузка файла amvera.yml.

  • Скачанный файл кладем в корень нашего проекта.

Создание файла с зависимостями

  • Cоздать файл requirements.txt , в котором прописать строчку: python-telegram-bot

    Внимание

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

    Подсказка

    При развертывании телеграм-ботов частой ошибкой является неверное название «телебота» в requirements.txt. Телебот в requirements.txt должен называться pyTelegramBotAPI, а не telebot.

  • Вызвать pip install -r requirements.txt, чтобы установить этот пакет. Почему бы просто не установить пакет через pip install python-telegram-bot? Так тоже можно, но файл requirements.txt все равно понадобится для разворачивания в облаке, поэтому лучше сразу его создать.

  • Проверить, что все работает, можно запустив бот локально через python3 echobot.py и протестировав созданный бот в телеграм (ссылку на бот можно найти у BotFather).

  • Поместить ваш requirements.txt в корень репозитория.

Привязка git-репозитория и push в master

Возможно два варианта:

  1. Привязать к уже имеющемуся репозиторию (папке).

    • Инициализировать git репозиторий. Как установить git, если он ещё не установлен, описано тут.

    • В корне нашего проекта даем команду: git init (если гит уже инициализирован в вашем проекте, то этого делать не нужно)

    • Привязываем наш локальный гит репозиторий к удаленному репозиторию через команду, которая указана на странице проекта в amvera:

      git remote add amvera https://git.amvera.ru/<имя-пользователя>/<транслитерированное-имя-проекта>`
      
    • Проверяем, что все изменения закомичены, вызывая git status. Если там будет список файлов, то значит нужно их закомитить, выполнив:

      git add .
      git commit -m "Some informative msg"
      
    • Отправляем изменения в репозиторий Amvera

      git push amvera master
      

      На запрос пользователя и пароля укажите имя пользователя и пароль вашей учетной записи Amvera.

  2. Использовать выделенный репозиторий Amvera (а не привязывать свой).

    • Склонируем пустой репозиторий:

      git clone https://git.amvera.ru/<имя-пользователя>/<транслитерированное-имя-проекта>
      
    • Проверяем, что все изменения закомичены, вызывая git status. Если там будет список файлов, то значит нужно их закомитить, выполнив:

      git add .
      git commit -m "Some informative msg"
      
    • Отправляем изменения в репозиторий Amvera

      git push amvera master
      

      На запрос пользователя и пароля укажите имя пользователя и пароль вашей учетной записи Amvera.

Развертывание приложения

После того как проект запушится в систему, начнется сборка и на странице проекта статус поменяется на «Выполняется сборка».

Как только проект соберется, он перейдет в стадию запуска и статус сменится на «Выполняется развертывание», а после перейдет в «Успешно развернуто».

Если по какой-то причине проект не развернулся, можно обратиться к логам сборки и логам приложения для отладки (они могут идти с задержкой в 5-10 минут). Если Проект завис в статусе «Сборка» на долгое время, а логи сборки не отображаются, то стоит ещё раз проверить корректность amvera.yaml файла и requirements.txt файла.

Подсказка

Если логи пишутся в print, для их отображения надо выставить переменную окружения PYTHONUNBUFFERED в 1.

Важно

Сохраняйте файлы БД и иные изменяемые данные в постоянное хранилище, чтобы избежать их потери при обновлении проекта, когда производится «откат» папки код до состояния обновления репозитория. Папка data в корне проекта и директория /data, это разные директории.

Проверить, что сохранение идет в /data, можно зайдя в папку «data» на странице «Репозиторий».

Важно

Чтобы избежать ошибки 502, измените в вашем коде host 127.0.0.1 (или подобный localhost) на 0.0.0.0, и пропишите в конфигурации порт, который слушает ваше приложение (пример - 8080).

Если у вас не получается развернуть проект

Напишите наблюдаемую вами симптоматику на support@amvera.ru с указанием вашего имени пользователя и названия проекта, мы постараемся вам помочь.