Python – язык программирования высокого уровня, который появился сравнительно недавно. Однако его простота и легкий синтаксис уже сделали язык лидером в программировании. Многие предпочитают Python для создания Telegram Bot.
Что требуется для создания бота
Сейчас боты крайне распространены, так как позволяют быстро и удобно получать информацию, музыку, книги. Даже платежная система Qiwi, имеет свой бот @qiwi_bot.
Телеграмм бот на Python – не такая уж и сложная задача. Однако необходимо понять, как работают программы на сервере. Нам понадобятся:
- Среда программирования Python.
- Если у вас установлена версия до 3.4, то следует скачать Gid и Pip. Первое – система управления версиями, второе – система управления пакетами Python. Pip позволяет устанавливать пакеты из командной строки.
- Регистрация на GitHub.com
- Регистрация на сервере Heroku.com.
Последние два позволят развернуть бот в сети.
Создаем бота
Перейдите в Telegram и найдите @Botfather. Это инструмент для создания новых ботов. Зайдите в него и введите имя бота для пользователей. Затем укажите имя для мессенджера.
Здесь же вы можете указать описание бота, определить для него команды. После того, как робот в мессенджере создан, он понимает только три предопределенные: /start, /help и /settings. Остальные следует определить в @Botfather.
В результате вы получите токен – символьно-числовую последовательность, уникальную для каждого бота Telegram. Именно с помощью этого идентификатора отправляются запросы на сайт https://api.telegram.org.
Каждый запрос имеет вид:
https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/КОМАНДА
Методы описаны в документации к Telegram Bot API и являются стандартными. Задача программиста при написании бота заключается в создании кода, который получает сообщения от пользователя и отправляет команду боту на выполнение действий. Запрос может выглядеть следующим образом:
https://api.telegram.org/ bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/sendMessage?chat_id=391911270&text=Hello
Это пример отправки сообщения для клиента Telegram. Обязательно необходимо знать параметр id_chat – это идентификатор чата. Узнать его можно из ответа, который присылает сервер, который имеет вид JSON-строки:
{«ok»:true,»result»:{«message_id»:4,»from»:{«id»:507226896,»is_bot»:true,»first_name»:»Anna»,»username»:»Annatuola_bot»},»chat»:{«id»:391911270,»first_name»:»Irina»,»last_name»:»12345678″,»type»:»private»},»date»:1514900499,»text»:»Hello»}}
По сути программа отправляет запросы, считывает ответы и выполняет парсинг полученной строки. В зависимости от сообщений пользователя выполняются те или иные действия.
Пишем бота для Telegram на Python
Сначала создадим программный код. Необходимо установить Python и среду разработки.
- Скачайте Python с официального сайта https://www.python.org/downloads/
- Установите, обязательно указав «Add Python to Path».
- Проверьте установку, открыв командную строку и набрав pip. Должен появится справочный материал по pip.
Откройте среду программирования IDLE. Это делается через пуск, в главном меню ищите раздел с установленным Python и выбирайте нужную команду. Отроется окно. Создайте в нем новый файл и вставьте программный код бота Telegram на Python.
import requests
import datetime
#Установка адреса бота
url = https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/
#Поиск последнего сообщения из массива чата с пользователем Telegram.
def lastUpdate(dataEnd):
res = dataEnd['result']
totalUpdates = len(res) - 1
return res[totalUpdates]
#Получение идентификатора чата Telegram
def getChatID(update):
chatID = update['message']['chat']['id']
return chatID
#отправка запроса sendMessage боту
def sendResp(chat, value):
settings = {'chat_id': chat, 'text': value}
resp = requests.post(url + 'sendMessage', data=settings)
return resp
#Get-запрос на обновление информации к боту. Результат – строка json. Метод .json позволяет развернуть ее в массив
def getUpdatesJson(request):
settings = {'timeout': 100, 'offset': None}
response = requests.get(request + 'getUpdates', data=settings)
return response.json()
#Главная функция
def main():
chatID = getChatID(lastUpdate(getUpdatesJson(url)))
sendResp(chatID, 'Ваше сообщение')
updateID = lastUpdate(getUpdatesJson(url))['update_id']
#Бесконечный цикл, который отправляет запросы боту на получение обновлений
while True:
#Если обновление есть, отправляем сообщение
if updateID == lastUpdate(getUpdatesJson(url))['update_id']:
sendResp(getChatID(lastUpdate(getUpdatesJson(url))), 'проба')
updateID += 1
sleep(1)
#Запуск главной функции
if __name__ == '__main__':
main()
Python чувствителен к пробелам и табуляции, поэтому выполните Format-Untabify Region.
Запустите здесь же в среде разработки. В созданном боте Telegram должно появиться сообщение «Ваше сообщение Проба».
Разворачиваем проект на сервере
Самое сложное – заставить наш проект для Telegram работать на сервере. Мы воспользуемся бесплатным сервисом Heroku.
- Устанавливаем окружение, набирая pip install pipenv – ее надо набрать в командной строке.
- Регистрируемся на Heroku.com
- Устанавливаем интерфейс командной строки Heroku (CLI)
https://devcenter.heroku.com/articles/getting-started-with-python#set-up - В командной строке набираем Heroku и Enter
- Вводим адрес электронной почты, с которым регистрировались на сервере, и пароль, придуманный при регистрации
- Создаем папку. Ее лучше создать в папке с Python. Для примера создадим папку run
- Набираем virtualenv run, чтобы инициализировать в ней virtualenv.
- Регистрируемся на github.com и создаем свой репозиторий
- Переходим в папку run с помощью cd run
- Клонируем репозиторий git командой git clone https:/github.com/ВАШЕ_ИМЯ/ВАШ РЕПОЗИТОРИЙ. ВАШЕ_ИМЯ – имя пользователя на github
- Скопируйте скрипт в папку созданного репозитория (она появится в run)
- Зайдите в папку run/scripts, чтобы запустить файл activate.bat. Если он сработал успешно, то перед адресом в командной строке будет стоять название вашей папки. Например, <run>
- Перейдем в папку run, затем в папку репозитория с помощью команды cd
- Установим модуль requests. Наберем pip install requests
- Чтобы создать зависимость введите pip freeze > requirements.txt
- В папке run создайте файл Procfile или Procfile.windows (для Windows) и сохраните в нем строку web: python bot.py, где bot.py – имя вашего файла с программой для бота
- В папке репозитория создайте файл __init__.py. Он будет пустым
Далее последовательно набирайте в командной строке
git init
Вы увидите сообщение об инициализации пустого репозитория.
git add .
Внимание, после add пробел и точка! Добавляет файлы в локальный депозиторий.
Выполнение команды занимает некоторое время, необходимо подождать.
git commit -m ‘short message that describe changes to commit’
Фиксирует изменения в репозитории.
git push -u https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ
Позволит развернуть проект на github.
Затем выполните команды:
heroku create имя проекта
В результате вы получите адрес вашего проекта, например, runbot.herokuapp.com.
git push heroku master
Ждем окончания процесса компиляции проекта.
heroku ps:scale web=1
heroku open
Последняя команда откроет ваше приложение на сервере. Бот на Питоне для Телеграмма начнет свою работу.
На сайте с документацией можно посмотреть другие Telegram Bot примеры на Python.