img

Погружение в aiogram (#3 types.Message)

В этой статье обсудим один из важнейших аргументов функции, который ТЫ, мой друг, будешь использовать в каждом своем боте. 

Ты спросишь меня: “Зачем он нам так нужен?” 

Работая с обработчиками сообщений (message_handler()), в обязательном порядке должен быть передан аргумент в функцию, типом types.Message. Он позволяет очень удобно манипулировать данными пользователя и, в целом, всем функционалом бота.  

Где использовать?

 

(Note для работы используй заготовку с GitHub)

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

 

Передаем аргумент в функцию и указываем аннотацию типов (вообще, делать это не обязательно, но оно дает нам колоссальные удобства при дальнейшей работе с данным аргументом).

 

При обращении к аргументу, благодаря аннотации типов, видим сколько методов и атрибутов он хранит внутри себя.

Проделай это у себя и посмотри, как много методов и атрибутов можно вызвать!

 

Так же не обязательно называть переданный аргумент message, ты можешь дать ему абсолютно любое имя, НО для удобства лучше придумывать названия аргументам, вкладывая смысл их предназначения. В соответствии с дзеном Python.

Пользовательские данные

 

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

Делаем простенький хэндлер, как в прошлой статье про эхо бота, но вместо отправки сообщения нам обратно, выведем аргумент в терминал с помощью функции print().

Вот что должно получится:

 

Запускаем нашего бота, и пишем ему любое сообщение!

 

В ответ видим ничего, НО не пугайсятесь, так и должно быть!

Заходим в любимое IDE и смотрим,  что отобразилось у нас в консолие.

 

Видим очень длинное текстовое поле, напоминающее словарь, НО это не он, не надо путать!

Данный аргумент представляет из себя класс

 <class 'aiogram.types.message.Message'>

Мы видим некоторую вложенность данных, но обо всём по порядку.

 

Значение атрибутов

 

  • message_id - уникальный идентификатор сообщения в этом чате
  • from_user.id - уникальный идентификатор пользователя
  • from_user.is_bot - булевое значение, указывающее, является ли пользователь ботом
  • from_user.first_name - имя пользователя
  • from_user.last_name - фамилия пользователя
  • from_user.username - имя пользователя (username) без «@» (может быть None)
  • from_user.language_code - код языка, на котором пользователь взаимодействует с ботом
  • chat.id - идентификатор чата
  • chat.first_name - имя пользователя чата
  • chat.last_name - фамилия пользователя чата
  • chat.username - имя пользователя (username) без «@» (может быть None) чата
  • chat.type - определяет тип чата (приватный/публичный)
  • date  -  дата отправки сообщения по времени Unix
  • text  -  фактический текст сообщения в формате

 

Для использования этих значений в своём проекте, необходимо к ним обратиться.

Делается это очень просто, вот пару примеров:

message.from_user.id

message.from_user.username

message.text

message.chat.type

 

Пишем боту любое сообщение и в терминале получаем следующий вывод. 

 

Заключение

 

Здесь мы слегка коснулись самую малость возможностей класса types.Message. В следующих же статьях будем изучать всё более интересные возможности работы бота и расширение его функционала.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Еще по теме:
img
Рассказываем, как скачать с гитхаб проект. Подробная инструкция со скриншотами
img
Рассказываем, что такое devtools, кто их придумал, зачем они нужны и какие задачи можно решить с помощью "инструментов разработчика"
img
В статье рассмотрим топ-20 библиотек, которые должны быть в арсенале каждого, кто занимается Data Science.
img
Настало время глубже погрузиться во взаимодействие человека с ботом. Сегодня изучим декоратор message_handler(). Узнаем, как боту реагировать на конкретные сообщения от пользователя и отвечать на его команды.
img
Продолжаем изучать функционал библиотеки aiogram для работы с Telegram ботом. И сейчас в этой статье мы узнаем, как бот может отправлять стикеры пользователю, с ним взаимодействующим.