img

Погружение в aiogram (#4 message_handler())

Введение 

 

Настало время глубже погрузиться во взаимодействие человека с ботом. Сегодня изучим декоратор message_handler(). Узнаем, как боту реагировать на конкретные сообщения от пользователя и отвечать на его команды.

icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту

Ну что, давай начинать! 

Note: Для дальнейшей работы, необходимо использовать версию интерпретатора Python 3.9, и библиотеку aiogram версии 2.25.1.

Шаблон проекта можешь скачать с GitHub по ссылке → жми сюда (НЕ ЗАБУДЬ УКАЗАТЬ ТОКЕН СВОЕГО БОТА!)

Немного теории 

 

message_handler() или хэндлер обработки сообщений нужен для того, чтобы реагировать на входящие сообщения в Telegram-боте и содержать в себе функцию ответа. C его помощью можно указать, какие команды или сообщения от пользователя будет обрабатывать бот, и вызвать соответствующую функцию при их вводе. 

Переходим к практике.

Практика 

 

Сейчас мы разберём две ситуации использования хэндлера (на самом деле их гораздо больше, но об этом в следующих статьях):

  1. Получение ботом команд от пользователя (/commands)
  2. Получение ботом текстовых сообщений и их обработка (text/text_contains)

Получение команд

 

Для приёма команд от пользователя, необходимо написать следующий декоратор с параметром commands = []

В параметры хэндлера необходимо передать в виде списка команду, которую бот будет обрабатывать. В данном случае это команда start.

Также обязательно после декоратора создаём асинхронную (async) функцию (не забываем в качестве параметра передать наш message: types.Message), назвать её можно как угодно, но лучше дать имя, созвучное с обрабатываемой командой. 

Напишем простейшую логику обработки. При получении команды start, бот будет отправлять сообщение пользователю, что он начал работу.

Запускаем в работу скрипт, заходим в бота и пишем команду start. 

Обрати внимание, что команда записывается следующим образом: /текст_команды

После отправки получаем ожидаемый результат.

Если указать команду без / , то в ответ получим…

НИЧЕГО, так как теперь start для бота считается обычным сообщением, а их обработку мы ещё не сделали.

В аргументе commands можно указать разное количество команд.

 

При использовании их всех, бот будет обрабатывать общую для них функцию.

Чтобы расширить функционал бота, необходимо создавать разные декораторы хендлера для обработки отдельных команд.

Не забудь давать индивидуальные названия функциям.

Видим, что при использовании команд получаем ожидаемый результат. 

Получение сообщений от пользователя

 

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

Также не забывай передавать в качестве аргумента функции параметр message: types.Message.

Пропишем простейшую логику, будем вежливыми и на приветствие ответим приветствием.

Проверим работу скрипта.

Замечательно! Наш бот поздоровался с нами!

В таком исполнении обязательно указывать правильный текст сообщения, соблюдая регистры.

Видим, что когда указали начало слова в верхнем регистре, то бот уже нам ничего не ответил.

Для того чтобы бот обрабатывал не конкретное сообщение, а любое его вхождение, необходимо в хендлере указать параметр text_contains.

Теперь наш хендлер будет обрабатывать любое вхождение слова “дела”. 

Обратите внимание, что слово, должно иметь 100% совпадение (такое как регистры букв).

Приоритет обработчиков

 

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

Заключение

 

В этой статье познакомились с основными параметрами декоратора message_handler(), но это ещё не всё (в следующих статьях будем знакомиться с новыми возможностями). С помощью использования таких простых приемов можно построить достаточно обширную логику работы бота. Дальше изучим, как бот может отвечать нам стикерами, фотографиями, документами, видео, аудио и многое другое. 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Подробнее о курсе
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Подробнее о курсе
Фронтенд-разработчик с нуля
Погрузитесь в мир веб-разработки, освоив основные инструменты работы: HTML, CSS, JavaScript
Подробнее о курсе
Разработка приложений на Flutter и Dart
Научись создавать кроссплатформенные приложения на Flutter, освой язык Dart
Подробнее о курсе
Автоматизированное тестирование на Python
Изучите автоматизацию тестирования на Python чтобы стать востребованным специалистом
Подробнее о курсе
Еще по теме:
img
SQL или NoSQL, вот в чём вопрос! И как раз с этим вопросом мы поможем сегодня разобраться. Что использовать в каких случаях, где есть какие преимущества и как возможно использовать их все вместе.
img
Вебхуки позволяют различным системам обмениваться данными в реальном времени. В этой статье мы разберём, что такое вебхук, как он работает, где и зачем его использовать, а также как настроить.
Весенние скидки
30%
50%
60%
До конца акции: 30 дней 24 : 59 : 59