Пишем telegram-бота на python с помощью библиотеки telebot часть 2

от автора

Всем привет! Это вторая часть статьи, в которой я посвящу время запросам и серверам telegram. Если кто-то еще не видел первую часть, то рекомендую её почитать. В третьей части скорее всего будет описана работа с базами данных. Ну и если у вас опять возникли вопросы, то пишите мне в телеграм: dimagorovtsov

Что такое message?

Наверное многие, кто писал бота по моей предыдущей статье задались вопросом, что такое message и почему к примеру, чтобы отправить сообщение мы должны указать message.chat.id в параметрах функции send_message? Для того, чтобы узнать это давайте выведем message в консоль:

@bot.message_handler(commands=['start']) def start(message):     print(message)

Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:

{     'content_type':'text',     'message_id':573,     'from_user':{         'id':687595402,         'is_bot':False,         'first_name':'Dmitry',         'username':'dimagorovtsov',         'last_name':'Gorovtsov',         'language_code':'ru'     },     'date':1565206363,     'chat':{         'type':'private',         'last_name':'Gorovtsov',         'first_name':'Dmitry',         'username':'dimagorovtsov',         'id':687595402,         'title':None,         'all_members_are_administrators':None,         'photo':None,         'description':None,         'invite_link':None,         'pinned_message':None,         'sticker_set_name':None,         'can_set_sticker_set':None     },     'forward_from_chat':None,     'forward_from':None,     'forward_date':None,     'reply_to_message':None,     'edit_date':None,     'media_group_id':None,     'author_signature':None,     'text':'/start',     'entities':[         <telebot.types.MessageEntity object at 0x03807F50>     ],     'json':{         'message_id':573,         'from':{             'id':687595402,             'is_bot':False,             'first_name':'Dmitry',             'last_name':'Gorovtsov',             'username':'dimagorovtsov',             'language_code':'ru'         },         'chat':{             'id':687595402,             'first_name':'Dmitry',             'last_name':'Gorovtsov',             'username':'dimagorovtsov',             'type':'private'         },         'date':1565206363,         'text':'/start',         'entities':[             {                 'offset':0,                 'length':6,                 'type':'bot_command'             }         ]     } }

К примеру из всей этой информации мы хотим получить id чата, из которого я отправлял сообщение. Для этого обратимся к ключу chat.

Запрос:

print(message.chat)

Ответ:

{'type': 'private', 'last_name': 'Gorovtsov', 'first_name': 'Dmitry', 'username': 'dimagorovtsov', 'id': 687595402, 'title': None, 'all_members_are_administrators': None, 'photo': None, 'description': None, 'invite_link': None, 'pinned_message': None, 'sticker_set_name': None, 'can_set_sticker_set': None}

Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:

print(message.chat.id)

Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:

687595402

Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.

Запрос:

print(message.from_user)

Ответ:

{'id': 687595402, 'is_bot': False, 'first_name': 'Dmitry', 'username': 'dimagorovtsov', 'last_name': 'Gorovtsov', 'language_code': 'ru'}

Теперь достанем значение у ключа first_name:

print(message.from_user.first_name)

Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:

Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!

Теперь смотрите, для того, чтобы отправить сообщение в какой-либо чат нам необходимо указать несколько параметров в функцию send_message. Первый параметр — это chat_id, собственно сам id чата. Второй — text, текст сообщения. И как вы догадались, вместо того, чтобы писать message.chat.id, мы можем написать свои данные! Вот так можно прислать сообщение самому себе, если указать в параметрах свой id:

bot.send_message(<ваш id>, 'Текст сообщения')

Ну а когда мы пишем message.chat.id, мы подразумеваем, что бот отправит сообщение в чат, из которого его вызвали.

Заключение

Ну а на этом всё! Надеюсь вы поняли как получать данные от сервера, обрабатывать их и использовать где нужно. Спасибо за внимание.


ссылка на оригинал статьи https://habr.com/ru/post/462905/