Часть 1. Простой Telegram бот на Python, метод getUpdates
Часть 2. Telegram бот на Python, отправка файлов, встроенная клавиатура
Часть 3. Telegram бот на Python, работа с геолокацией пользователяа
Из этой статьи вы узнаете, как с помощью Python можно создать Telegram бота используя для этого библиотеку requests. Этот урок будет полезен для начинающих разработчиков, для тех кто только начал познавать работу протокола HTTP в Python.
Requests - это Python HTTP библиотека, цель которого сделать запросы HTTP проще и удобнее для человека. Requests поможет вам легко разобраться с любой API.
Создаем бота
Для начала нужно создать бота и получить токен, для этого выполним пару простых шагов.
Шаг 1. Заходим в Telegram (для удобства можно воспользоваться web-версией), и с помощью поисковой строки находим отца всех ботов @BotFather
.
Шаг 2. В беседе с @BotFather
выполняем команду /newbot
и даем придуманное имя, и никнейм боту (я создал бота по имени «RamasTestBot»).
Шаг 3. В ответ мы получили сообщение, где указан токен и ссылка на нашего бота, переходим по ссылке и пишем боту любое сообщение.
Бот готов, сейчас можно переходить к самому интересному.
Telegram API входящие сообщения
Для того что бы получить входящие обновления бота, воспользуемся методом getUpdates
. Откроем в новой вкладке браузере ссылку, используя свой полученный ранее токен.
https://api.telegram.org/bot<ваш_токен>/getUpdates
В ответ мы должны получить массив объектов, где можно увидеть отправленные нами ранее сообщением боту, в моем случае это «/start» и «Hello» (если ответ пустой, отправьте своему боту еще одно сообщение, и обновите страницу с ссылкой).
Теперь осталось повторить все на Python. Напишем код, где будем отправлять GET запрос, и с помощью полученных данных в ответ (массива данных) научим программу понимать, что боту написали новое сообщение.
Для проверки выведем в консоль уникальный идентификатор пользователя, и его сообщение
import requests
import time
TOKEN = 'токен'
URL = 'https://api.telegram.org/bot'
def get_updates(offset=0):
result = requests.get(f'{URL}{TOKEN}/getUpdates?offset={offset}').json()
return result['result']
def run():
update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту
while True:
time.sleep(2)
messages = get_updates(update_id) # Получаем обновления
for message in messages:
# Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение
if update_id < message['update_id']:
update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту
print(f"ID пользователя: {message['message']['chat']['id']}, Сообщение: {message['message']['text']}")
if __name__ == '__main__':
run()
Telegram API отправить сообщение
Для того, что бы отправлять сообщение от имени бота, существует метод sendMessage
.
Откроем в новой вкладке браузера ссылку используя свой токен, и в параметрах укажем:
chat_id
: уникальный id пользователя, что бы бот понял кому именно ответить (в моем случае это 792035400).text
: Текст самого сообщения
https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=792035400&text=Привет, хорошо, а ты как?
Повторим все на Python.
import requests
import time
TOKEN = 'токен'
URL = 'https://api.telegram.org/bot'
def send_message(chat_id, text):
requests.get(f'{URL}{TOKEN}/sendMessage?chat_id={chat_id}&text={text}')
if __name__ == '__main__':
send_message(792035400, 'Привет, хорошо, а ты как?')
После каждого запуска программы мы увидим что наш бот отправляет сообщение Привет, хорошо, а ты как?
.
Создаем простого телеграм бота
С методами getUpdates, и sendMessage API Telegram мы разобрались, используя свои знания напишем программу которая научит нашего бота отвечать на сообщение.
import requests
import time
TOKEN = 'токен'
URL = 'https://api.telegram.org/bot'
def get_updates(offset=0):
result = requests.get(f'{URL}{TOKEN}/getUpdates?offset={offset}').json()
return result['result']
def send_message(chat_id, text):
requests.get(f'{URL}{TOKEN}/sendMessage?chat_id={chat_id}&text={text}')
def check_message(chat_id, message):
for mes in message.lower().replace(',', '').split():
if mes in ['привет', 'ку']:
send_message(chat_id, 'Привет :)')
if mes in ['дела?', 'успехи?']:
send_message(chat_id, 'Спасибо, хорошо!')
def run():
update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту
while True:
time.sleep(2)
messages = get_updates(update_id) # Получаем обновления
for message in messages:
# Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение
if update_id < message['update_id']:
update_id = message['update_id'] # Присваиваем ID последнего отправленного сообщения боту
# Отвечаем тому кто прислал сообщение боту
check_message(message['message']['chat']['id'], message['message']['text'])
if __name__ == '__main__':
run()
Теперь наш бот может поприветствовать, и ответить, как у него дела). Скоро я выпушу вторую часть, где покажу как отправлять файлы и выводить настраиваемую клавиатуру (вторая часть).
Дополнительную информацию о методах вы можете получить в документации.