Часть первая - модуль получения обновлений.
Первый шаг - зарегистрировать бота в Telegram, пользуясь специальным ботом Botfather. Процедура несложная с интуитивным интерфейсом и подробно останавливаться на ней мы не будем. Главное - получить от данного действия токен - идентификатор, при помощи которого новый бот будет взаимодействовать с API Телеграма.
Если токен получен, можно переходить к созданию модуля получения обновлений. Это функция, которая получает на входе два параметра: вышеупомянутый токен и параметр offset. С токеном уже разобрались, а offset - это дословно отступ, номер сообщения, до которого сообщения считаются полученными. При запуске программы этот параметр назначается равным 0.
TOKEN = 'ваш_токен'
offset = 0 # начальный "отступ"
INTERVAL = 1 # Интервал проверки наличия новых сообщений (обновлений) на сервере в секундах
URL = 'https://api.telegram.org/bot' # Адрес HTTP Bot API
Далее - пишем функцию получения обновлений с сервера Telegram:
def get_updates(TOKEN, URL, offset):
# Формируем параметры запроса
data = {'offset': offset+1, 'limit': 5, 'timeout': 0}
# Отправка запроса обновлений
try:
request = requests.post(URL + TOKEN + '/getUpdates', data=data)
except:
print('Error getting updates') # сообщение об ошибке получения обновлений
return False # Завершаем проверку
if not request.status_code == 200: return False # Проверка ответа сервера
if not request.json()['ok']: return False # Проверка успешности обращения к API
# Проверка каждого элемента списка
for update in request.json()['result']:
offset = update['update_id'] # Извлечение ID сообщения
#Проверка на наличие сообщения
if not 'message' in update:
continue #переход к следующему обновлению
print ('\n\n', datetime.datetime.now().strftime('%H:%M:%S'),'Сообщение получено:')
print(update)
return(update, offset)
Как видно из кода, функция возвращает None, если обновлений на сервере нет, и сериализированный объект, если обновление есть. Пример такого обновления:
{'update_id': 400390656,
'message': {'text': 'сообщение текстовое',
'from': {'username': 'evillexus',
'id': 9111111111,
'last_name': 'А',
'first_name': 'Алексей'},
'chat': {'id': -100110111111, 'title': 'test', 'type': 'supergroup'},
'message_id': 266,
'date': 1488625362}}
Доступ к каждой части обновления осуществляется весьма просто:
# текст сообщения:
message_text = update['message']['text']# id отправителя:
# id отправителя:
from_id = update['message']['from]['id']
# id чата в котором получено сообщение:
chat_id = update['message']['chat']['id']
# имя отправителя:
first_name = update['message']['from']['first_name']
и т.д.
Эти значения нам понадобятся для того, чтобы обработать присланное сообщение и послать адекватный ответ. Об этом в следующем материале, а пока остановимся на программе, которая будет каждую секунду запрашивать обновления на сервере:
if __name__ == '__main__':
message = get_updates(TOKEN, URL, offset) # попытка получить обновление
if message:
print('Получено сообщение:\n')
message_text = update['message']['text']
print(message_text)