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

Я пишу бота на python aiogram , вопрос такой мне нужно сделать так чтобы когда пользователь загрузил боту фото в формате файла , то есть тип контента document, то в другой чат они приходили как обычные фотографии, так же в виде альбома. Код следующий:

@dp.message_handler(is_media_group = True, content_types=content_types=types.ContentType.ANY, state=FSMAdmin.photo)
async def load_photo(message: types.Message, state: FSMContext, album: List[types.Message]):
      """This handler will receive a complete album of any type."""
    media_group = types.MediaGroup()
    for obj in album:
        if obj.photo:
            file_id = obj.photo[-1].file_id
        else:
            file_id = obj[obj.content_type].file_id


        try:
            # We can also add a caption to each file by specifying `"caption": "text"`
            media_group.attach({"media": file_id, "type": obj.content_type})
        except ValueError:
            return await message.answer("This type of album is not supported by aiogram.")

    # await message.answer_media_group(media_group)
    await bot.send_media_group(chat_id=chat_id, media=media_group)
    print('Альбом отправлен в чат админов!')

На данный момент если отправить боту альбом фото в виде документов , то он просто отправит так же его в виде документа. Можно ли сделать так чтобы он получал на входе документы с фото, а пересылал в виде простых фото.

В другом варианте моего обработчика, фото сначала сохраняются, ну то есть документами в папку , но я боюсь что если брать из папки , то он будет присылать все фото за сегодня, а нужно только те что прислали в данный момент, может можно добавить какую-нибудь промежуточную папку чтобы он брал оттуда например photos/сегодняшняя дата/промежуточная папка, которая меняется чтобы он не отправлял все фото за сегодня/documents/и тут фото . Код сохранения фото:

date = f"{datetime.date.today()}"
    if not album:
        album = [message]
    for obj in album:
        if obj.photo:
            path = os.path.join('photos', date)
            await obj.photo[-1].download(destination_dir=path)
            print('Фото сохранены на сервер!')
        else:
            path = os.path.join('photos', date)
            await obj[obj.content_type].download(destination_dir=path)
            print('Файлы сохранены на сервер!')

Можно ли как то это обыграть? Чтобы они одной группой, отправлялись в другой чат?

UPD1: Я нашел такой вариант, здесь используют InputFile, а так же вот такой вариант с использованием Media.Group() как можно их совместить чтобы все подходило под требования?


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

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

скорее всего, нужно поменять ContentType тут

media_group.attach({"media": file_id, "type": obj.content_type})

либо указав напрямую content_type types.ContentTypes.PHOTO, либо так (псевдокод)


if obj.content_type == 'DOCUMENT':
    cnt_type = types.ContentTypes.PHOTO
else:
    cnt_type = obj.content_type
 
media_group.attach({"media": file_id, "type": cnt_type})

#UPD

немного узнав подробнее, могу предложить просто заменить ваш метод .attach() на следующее

media_group.attach({"media": file_id, "type": "photo"})
→ Ссылка