В этой статье обсудим один из важнейших аргументов функции, который ТЫ, мой друг, будешь использовать в каждом своем боте.
Ты спросишь меня: “Зачем он нам так нужен?”
Работая с обработчиками сообщений (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. В следующих же статьях будем изучать всё более интересные возможности работы бота и расширение его функционала.