Aiogram: как обработать только одно «сообщение» из message.content_group?

Доброго времени суток. Уже несколько раз сталкивался с различными проблемами при обработке группы медиа в Телеграм посте: то кнопки (reply_markup) не прикрепляются, то подписи (caption) редактируются сразу ко всем фото/видео поста.

Суть проблемы сейчас:
Нужно сделать подпись к любому типу поста. Хендлер ловит все типы контента. Если это текст - всё просто. С медиа, а точнее с группой медиа, сложнее.

Написал почти полностью рабочий код, где описание редактируется там, где оно есть. Но иногда на канале посты с картинками или видео не содержат описания.
@dp.channel_post_handler(content_types=['any'])
async def auto_redactor(message: types.Message):

    text = message.text
    caption = message.caption

    if (isinstance(text, str)):
        await message.edit_text(f'{text}\n\подпись к текстовому посту',parse_mode="HTML")
    elif (isinstance(caption, str)):
        await message.edit_caption(f'{caption}\n\nподпись к посту с контентом',parse_mode="HTML")


Вышел из положения тем, что сделал проверку, если описания нет, то переменная будет пустой строкой. Публикуем переменную описания + автоподпись.
@dp.channel_post_handler(content_types=['any'])
async def auto_redactor(message: types.Message):
    
    text = message.text
    if isinstance(message.caption, str):
        caption = message.caption
    else:
        caption = ''

    if hasattr(message, 'text') and isinstance(text, str):
        await message.edit_text(f'{text}\n\nподпись к текстовому посту, parse_mode="HTML")
    elif hasattr(message, 'caption'):
        await message.edit_caption(f'{caption}\n\nподпись к посту с контентом\n', parse_mode="HTML")


Только вот в чём беда: когда медиа несколько, (в том числе если в первом есть описание а в остальных нет) — подписи добавляются к каждому фото (так как в группе контента разные message.id для каждого фото/видео тд) и по итогу не отображаются.

Как решить эту проблему? Ответов на просторах интернета не нашёл. Мне нужно, чтобы из группы контента описание добавлялось только к первому сообщению.
  • Вопрос задан
  • 609 просмотров
Решения вопроса 1
EntireMusic
@EntireMusic Автор вопроса
(:
ec4b39bd9159b4972c016d7384e84ee0.jpg
Решение проблемы из разряда "зато работает":
# к тому что есть добавил это
from time import sleep
# список, где будет храниться message.media_group_id
check_mess = []

@dp.channel_post_handler(content_types=['any'])
async def auto_redactor(message: types.Message):
    
    text = message.text
    if isinstance(message.caption, str):
        caption = message.caption
    else:
        caption = ''

    if hasattr(message, 'text') and isinstance(text, str):
        await message.edit_text(f'{text}\n\nподпись к тексту',parse_mode="HTML")
# добавил проверку, что media_group_id ещё не в списке
    elif hasattr(message, 'caption') and message.media_group_id not in check_mess:
# добавляем в список наш media_group_id
        check_mess.append(message.media_group_id)
        await message.edit_caption(f'подпись к медиа',parse_mode="HTML")
# чищу список после 5 сек ожидания, чтобы хендлер успел обработать все медиа
        sleep(5)
        check_mess.clear()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы