Как скачать несколько картинок, отправленных пользователем боту, в телеграм?
Хочу сделать бота, который сохраняет все изображения, которые ему отправляет пользователь, но не знаю как это нормально сделать.Я пробовал, что-то написать, но что-то оставалось не скачанным, что-то скачивалось повторно, и это именно в тех случаях, когда фотографии отправляются объединённо. Вот код:
@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 шт):
Если вы работаете с асинхронным приложением, старайтесь не использовать синхронные функции, ожидающие ввода/вывода. В вашем примере 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.: Не забудьте позаботиться о наименовании, т.к. при совпадении имён файл может быть перезаписан