MasterGroosha / aiogram-3-guide

Пишем Telegram-ботов с aiogram 3.x
https://mastergroosha.github.io/aiogram-3-guide/
MIT License
875 stars 134 forks source link

Скачать фото используя Router #39

Closed mrkirstar closed 1 year ago

mrkirstar commented 1 year ago

Что в оф. документации что в вашей книге, к сожалению не сказано как можно скачать фото, используя различные маршруты. Фото можно скачать только через объект Bot, но если его импортировать в файл с отдельным маршрутом, тогда получается что идет циклический импорт, так как этот файл уже импортирован dp.include_routers(). а объекты Message и PhotoSize не имеют метода download или get_file. Во второй версии aiogram это было проще.

MasterGroosha commented 1 year ago

Никуда не надо импортировать объект бота, он спокойно "прокидывается" как аргумент bot в конкретном хэндлере, например:

@router.message(F.text)
async def my_text_handler(message: Message, bot: Bot):
    await bot.send_message(...)

Про "прокидывание" аргумента bot написано в главе "Знакомоство с aiogram": https://mastergroosha.github.io/aiogram-3-guide/quickstart/#sugar

mrkirstar commented 1 year ago

спасибо большое за поддержку.

MasterGroosha commented 1 year ago

@mrkirstar кстати, про скачивание медиа тоже написано отдельно:

https://mastergroosha.github.io/aiogram-3-guide/messages/#downloading-media

mrkirstar commented 1 year ago

Да, по этой инструкции я и делал. но я не заметил что download_photo() принимает объект бот. и поэтому его импортировал из основного файла. когда получил ошибку циклического импорта. пришлось целый handler в основном файле писать, чтобы можно было воспользоваться bot.download(). Но после вы мне указали, на объект bot: Bot и все встало на свои места. Спасибо. А не планируете освятить тему платежей через бота в aiogram3? Было бы полезно.