Задать вопрос

Aiogram: Нет InlineKeyboardButton под постами с несколькими фото. В чём проблема?

Доброго времени суток. Сделал телеграм-бота на Python на библиотеке Aiogram, одной из функций которого является редактировать посты канала , добавляя к ним подпись со ссылками на канал и чат. Позже, этого показалось мало и я дописал в эту же функцию добавление кнопок InlineKeyboardButton под постами.

Казалось, код успешно работает, но позже увидел, что при добавлении нескольких элементов контента (>1), кнопки под постами не появляются. При этом текстовая подпись добавляется успешно. Это особенность Телеграма или я чего-то не учёл? Части кода ниже:

# Создаю переменные со ссылками через подключенную hlink
mychannel = hlink('Название канала', 'https://t.me/ссылка')
mychat = hlink('Название чата', 'https://t.me/ссылка')

# Создаю инлайн кнопки (две в ряд)
buttons = [
        types.InlineKeyboardButton(text="Канал", url="https://t.me/ссылка"),
        types.InlineKeyboardButton(text="Чат", url="https://t.me/ссылка")
    ]
keyboard = types.InlineKeyboardMarkup(row_width=2)
keyboard.add(*buttons)

# Хендлер постов канала
@dp.channel_post_handler(content_types=['text','photo','video','document'])
async def auto_redactor(message: types.Message):
# Присваиваю переменным полученный из поста текст либо описание под фото/видео 
    text = message.text
    caption = message.caption
# Перед редактированием поста проверяю, что принят правильный тип переменной текста либо описания
    if (isinstance(text, str)):
        await message.edit_text(f'{text}\n\n{mychannel} | {mychat}',parse_mode="HTML",reply_markup=keyboard)
    elif (isinstance(caption, str)):
        await message.edit_caption(f'{caption}\n\n{mychannel} | {mychat}',parse_mode="HTML",reply_markup=keyboard)


Ссылки всегда вставляются корректно. А вот кнопки не отображаются, если в посте больше одного элемента контента.
  • Вопрос задан
  • 1003 просмотра
Подписаться 1 Средний 6 комментариев
Решения вопроса 1
EntireMusic
@EntireMusic Автор вопроса
(:
В общем, я сдался.
Сегодня протестировал ручную отправку медиагруппы и оказалось, что для bot.send_media_group просто-напросто нет аргумента reply_markup, как и на уровне прикрепления фото. Поэтому, без костылей уж точно не получится написать код, где к группе медиа прикрепляется InlineKeyboardButton. А может и вовсе нет такой возможности.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@twistfire92
Python backend developer
Насколько я помню, когда отправляется несколько фотографий, они хоть и приходят вместе, но по сути это разные сообщения с одинаковым media_group_id. Может с этим как-то связаны проблемы

Можно попробовать вызвать отдельно message.edit_reply_markup
Ответ написан
@darky623
К сожалению, API Telegram до сих пор не поддерживает Медиа-группу и Инлайн-кнопки в одном сообщении, поэтому пока это технически невозможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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