Как можно прикрепить caption к media group в Telegram (aiogram 3)?

@admin_router.message(F.text == 'get_news', AdminProtect())
async def start_change(message: Message, state: FSMContext):
    post = await get_post()
    media = []
    if post.photo_id:
        photo_ids = post.photo_id.split('|')
        media.extend([InputMediaPhoto(media=photo_id) for photo_id in photo_ids])
    if post.video_id:
        video_ids = post.video_id.split('|')
        media.extend([InputMediaVideo(media=video_id) for video_id in video_ids])
    if media:
        await message.answer_media_group(media=media, caption=f'{post.text}')

Я думал, что передать текст в сообщение можно при помощи caption, но нет. Может существует еще какой-то способ передавать различный файлы с подписью?


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

Автор решения: Рустам Рысаев

более того подпись может быть не обязательно у первой фотографии\файла.

# Хендлер для загрузки альбома фотографий
@dp.message_handler(is_media_group=True, content_types=types.ContentType.ANY, state="*")
async def handle_albums(message: types.Message, album: List[types.Message], state: FSMContext):
    """Обрабатываем альбом с текстом и фото"""
    user_id = message.from_user.id
    chat_id = message.chat.id

    if not album:
        return

    title, description = None, None
    
    for item in album:
        if item.content_type == types.ContentType.VIDEO and item.caption:
            title = item.caption.split("\n")[0] if item.caption else None
            raw_description = "\n".join(item.caption.split("\n")[1:]) if len(item.caption.split("\n")) > 1 else None

    if not title:
        for item in album:
            if item.content_type == types.ContentType.PHOTO and item.caption:
                title = item.caption.split("\n")[0]
                raw_description = "\n".join(item.caption.split("\n")[1:]) if len(item.caption.split("\n")) > 1 else None

→ Ссылка