Telegram-бот на Python: от первой строчки до запуска на Heroku
Твой программистНастройка
Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:
- свой токен;
- адрес Telegram API;
- ссылку на документацию.
Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.
Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ.
Далее начните беседу с ботом. Введите в поисковой строке его имя и нажмите /start. Отправьте любое сообщение: оно станет первым обновлением, которое получит бот.
Установка Python
Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии уже установлены.
Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.
Установка pip
Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip --version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:
$ sudo apt-get install python-pip
Установка pyTelegramBotAPI
Есть два способа установить эту библиотеку:
С помощью pip:pip install pytelegrambotapi Из исходников (требуется git):$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git $ cd pyTelegramBotAPI $ python setup.py install
Hello, bot!
Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеку и подключить токен Telegram-бота на Python:
import telebot
bot = telebot.TeleBot('TOKEN')
Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help:
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, f'Я бот. Приятно познакомиться, {message.from_user.first_name}')
Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text.lower() == 'привет':
bot.send_message(message.from_user.id, 'Привет!')
else:
bot.send_message(message.from_user.id, 'Не понимаю, что это значит.')
Запускаем бота следующей строкой:
bot.polling(none_stop=True)
Примечание. Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.
Ну вот и всё, простенький бот в Телеграмме готов.
Деплой Телеграм-бота на Heroku
Последним шагом будет развёртывание бота на сервере. Зарегистрируйтесь на GitHub, если у вас ещё нет там аккаунта, и установите Git. Для этого на Linux выполните следующую команду:
$ sudo apt-get install git-all
На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku. Установите virtualenv:
$ pip install virtualenv
Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv:
$ virtualenv my_env
Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env. Теперь нужно склонировать git-репозиторий. Введите команду:
$ git clone https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Поместите скрипт в папку, полученную в результате выполнения команды git clone. Вернитесь в папку my_env и запустите virtualenv:
На Windows:$ scripts\activate.bat На Linux/macOS:$ source bin/activate
Если вы успешно запустили virtualenv, приглашение командной строки должно начинаться с (my_env). Перейдите в папку репозитория и ещё раз установите модуль requests:
$ pip install requests
Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:
$ pip freeze > requirements.txt
Создайте Procfile. В этом файле следует разместить инструкции по работе со скриптом. Имя файла обязательно должно быть Procfile (Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):
web: python my_bot.py
Добавьте файл __init__.py в вашу папку. Он может быть пустым, но должен там быть. Отправьте коммит с изменениями в репозиторий:
$ git init $ git add . $ git commit -m 'короткое сообщение, описывающее изменения в коммите' $ git push -u https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Теперь развернём Telegram-бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.
Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду. Если у вас Ubuntu, используйте следующие команды:
$ sudo add-apt-repository "deb https://cliassets.heroku.com/branches/stable/apt ./" $ curl -L https://cli-assets.heroku.com/apt/release.key | $ sudo apt-key add - $ sudo apt-get update $ sudo apt-get install heroku
Теперь выполните следующие команды:
$ heroku login $ heroku create $ git push heroku master $ heroku ps:scale web=1 $ heroku open
С этого момента приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:
$ heroku logs --tail
Заключение
Поздравляем! Теперь вы знаете, как создать бота в Телеграм.
Кроме того, Telegram bot на Python можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в этом мессенджере есть два типа клавиатур:
- Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:

- Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:

Но и это полностью рабочий Телеграм-бот на Python: дополните словарём и получите полноценную беседу.