Как скачать несколько картинок, отправленных пользователем боту, в телеграм?

Хочу сделать бота, который сохраняет все изображения, которые ему отправляет пользователь, но не знаю как это нормально сделать.Я пробовал, что-то написать, но что-то оставалось не скачанным, что-то скачивалось повторно, и это именно в тех случаях, когда фотографии отправляются объединённо. Вот код:

@dp.message_handler(content_types=['photo'])
async def handle_docs_photo(message):
    document_id = message['photo'][-1].file_id
    file_info = await bot.get_file(id)
    filename, file_extension = os.path.splitext(file_info.file_path)
    urllib.request.urlretrieve(f'https://api.telegram.org/file/bot{config.token}/{file_info.file_path}',
                                       name + file_extension)

По логике все должно работать, но не понимаю в чем проблема.


Ответы (1 шт):

Автор решения: Oleg

Если вы работаете с асинхронным приложением, старайтесь не использовать синхронные функции, ожидающие ввода/вывода. В вашем примере requests явно лишний, он будет блокировать весь исполняемый поток.

Скачать фото в aiogram можно очень просто:

@dp.message_handler(content_types=ContentType.PHOTO)
async def photo_handler(message: Message):
    photo = message.photo.pop()
    await photo.download('path_to_photo')

P.S.: Не забудьте позаботиться о наименовании, т.к. при совпадении имён файл может быть перезаписан

→ Ссылка