Хотел создать, и даже создал
почти универсальный редактор постов на Aiogram, который добавляет подпись-ссылку к посту в телеграм-канале, при этом удаляя текстовые ссылки из поста и сохраняя свойства текста (жирный, курсив и т.д.). Но столкнулся с банальной проблемой: по-моему, невозможно совместить работу "
entities
" и "
parse_mode
".
То есть, с помощью примерно такого кода (возьмём только текстовые посты для упрощения):
@dp.channel_post_handler(content_type=['text'])
async def redactor(message: types.Message):
ent = message.entities
new_ent = [e for e in ent if e.type != "text_link"]
mylink = '<a href="http://t.me/some_link">text for link</a>'
await message.edit_text(f'{message.text} \n {mylink}', entities=new_ent, parse_mode="html")
И сообщения:
сообщение с жирным текстом
Результатом будет отредактированное сообщение со ссылкой, но без жирного текста. Если же убрать параметр
parse_mode
, то жирный текст останется жирным, но, естественно, ссылка не будет отображаться корректно. С Markdown разметкой работает аналогично.
Как выйти из ситуации, почему так работает? Получается, нужна только рукописная функция, которая будет обрабатывать текст, полученный с помощью
parse_entities()
или есть более простые варианты?