Найти тему
Дойти до IT

Как приручить обработчик: секреты успешного взаимодействия с aiogram

Оглавление

На одном из предыдущих уроков мы создали обработчик.

-2
@dp.message(CommandStart())
async def cmd_start(message: Message):
await message.answer('Привет!')

Задача этого обработчика — принимать определённые сообщения от пользователя и реагировать на них.

Помимо метода message.answer, есть и другие методы, например, message.reply:

-3
@dp.message(CommandStart())
async def cmd_start(message: Message):
await message.reply('Привет!')
await message.answer('Как дела?')

Этот метод не просто отправляет сообщение, а отвечает на конкретное сообщение пользователя.

У методов reply и answer есть дополнительные возможности, например отправка изображений:

-4
@dp.message(CommandStart())
async def cmd_start(message: Message):
await message.reply('Привет!')
await message.answer_photo(photo='https://ir.ozone.ru/s3/multimedia-1-n/c1000/6996103187.jpg',
caption='Подпись к изображению')

Был использован метод answer_photo, который имеет несколько аргументов: photo (ссылка на изображение/ID изображения/объект InputFile) и caption (подпись к изображению).

Если вы уже работали с другими фреймворками, такими как telebot, то могли заметить, что в нашем коде мы не указываем, кому отправить сообщение. Фреймворк aiogram автоматически определяет отправителя сообщения и отправляет ответ тому же пользователю.

Если необходимо изменить такое поведение, например, для функции рассылки, и отправлять сообщение другому пользователю по его ID, то в классе message есть метод bot:

-5
await message.bot.send_message(chat_id=123, text='123')

Мы указали получателя, передав его идентификатор (chat_id) в качестве аргумента. Класс Message включает в себя множество методов, с которыми можно ознакомиться по ссылке: https://docs.aiogram.dev/en/latest/api/types/message.html.

Логирование

Логирование это важный момент в процессе разработки. Благодаря выводу в терминал информации о происходящем в программе вы сможете найти ошибки или понять почему бот работает тем или иным образом. Для подключения логирования нужно ввести всего 2 строчки в бот:

-6
-7
import logging
...
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO) # Подключение логирования
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Exit')

Нужно импортировать модуль logging и вызвать его метод. После этого в терминале будет выводиться нужная информация:

-8

P.S. Даже если эта статья устареет, она всё равно будет полезна для меня как напоминание о некоторых командах, чтобы не искать их снова в интернете. Возможно, через пару лет я вернусь к этой статье и вспомню некоторые моменты. А тем, кто дочитал до конца, желаю, чтобы ваши труды, проекты и творческие работы всегда были востребованы! =)

Обязательно к прочтнению!