Добавить подпись альбому при его отправке в канал telegram ботом aiogram
Подскажите пожалуйста как можно добавить подпись к альбому с фотографиями который бот пересылает в канал.
@dp.message_handler(state=ClientStatesGroup.send_description)
async def handle_description(message: types.Message, state: FSMContext):
data = await state.get_data()
media = data['media_group']
await bot.send_media_group(chat_id='@channel', media=media)
Бот получает альбом собранный с помощью данной функции и хэндлера и сохраненным в хранилище FSM. Проблема в том, что с помощью данной функции создается структура похожая на список, но тип данных там <class 'aiogram.types.input_media.MediaGroup'> и в него нельзя добавить ключ caption со значением полученным из текста пользователя. Может есть возможность как то это обойти?
Ответы (2 шт):
В общем решение я нашёл. Если кому понадобится такое делать, то стоит media конвертировать в str и полученный str ещё раз конвертировать в list с помощью ast.literal_eval
string_media = str(media) # превращаем в str наш экземпляр класса MediaGroup
media_with_caption = ast.literal_eval(string_media) # Превращаем str в list
media_with_caption[0]['caption'] = message.text # Добавляем описание
Есть более простой способ используя Media group builder
media_group = MediaGroupBuilder(caption="Media group caption")
# Add photo
media_group.add_photo(media="https://picsum.photos/200/300")
# Dynamically add photo with known type without using separate method
media_group.add(type="photo", media="https://picsum.photos/200/300")
# ... or video
media_group.add(type="video", media=FSInputFile("media/video.mp4"))
await bot.send_media_group(chat_id=chat_id, media=media_group.build())