Простой Telegram бот на Python, метод getUpdates

Статьи

Простой Telegram бот на Python, метод getUpdates

Автор: Рамис, 28 мая 2020

Часть первая, вторая часть статьи здесь

Из этой статьи вы узнаете, как с помощью Python можно создать Telegram бота используя для этого библиотеку Requests. Я считаю, что это будет очень полезно для начинающих разработчиков, ведь если знать протокол HTTP, можно будет легко разобраться с любой API.

Requests - это библиотека Python HTTP, выпущенная под лицензией Apache License 2.0. Цель проекта - сделать запросы HTTP проще и удобнее для человека.

Создаем бота

Для начала Вам нужно создать бота и получить токен. Зайдите в Telegram (для удобства можно воспользоваться web версией), используя поисковую строку найдите отца всех ботов @BotFather, и с помощью беседы (команды /newbot) создайте бота и получаем Ваш токен.

Создаем бота

Я создал бота по имени «RamasTestBot», Вам нужно использовать другое имя.

Теперь вы можем найти своего бота по имени и написать ему сообщение, чтобы убедиться, что все сделали правильно.

Создаем бота

Бот готов, сейчас нам можно переходить к самому интересному

Telegram API входящие сообщения

Для того что бы получить входящие обновления бота воспользуйтесь методом getUpdates. Откройте в новой вкладке браузере ссылку, используя свой полученный ранее токен.

https://api.telegram.org/bot<ваш_токен>/getUpdates

В ответ вы должны получить массив объектов, где можно увидеть отправленные вами ранее сообщением боту, в моем случае это «/start» и «Hello» (если ответ пустой, отправьте своему боту еще одно сообщение, и обновите страницу с ссылкой).

Создаем бота

Теперь осталось повторить все на Python, с помощью библиотеки Requests мы сделаем get запрос, и используя полученные данные (массив данных) научим программу понимать, что боту написали новое сообщение. Для проверки выведем в консоль уникальный идентификатор пользователя, и его сообщение

import requests
import time

TOKEN = 'токен'
URL = 'https://api.telegram.org/bot'

def get_updates():
    result = requests.get(f'{URL}{TOKEN}/getUpdates').json()
    return result['result']

def run():
    update_id = get_updates()[-1]['update_id'] # Присваиваем ID последнего отправленного сообщения боту
    while True:
        time.sleep(2)
        messages = get_updates() # Получаем обновления
        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
import json

TOKEN = 'токен'
URL = 'https://api.telegram.org/bot'

def get_updates():
    result = requests.get(f'{URL}{TOKEN}/getUpdates').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() # Получаем обновления
        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()

Создаем бота

Теперь бот может поприветствовать, и ответить, как у него дела). Скоро я выпушу вторую часть, где покажу как отправлять файлы и вывести настраиваемую клавиатуру (вторая часть).

Дополнительную информацию о методах вы можете получить в документации.