Часть первая - модуль получения обновлений.
Первый шаг - зарегистрировать бота в 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)