tgoop.com/eshu_coding/79
Last Update:
Дополню написанный некоторое время назад пост.
Вкратце, при ребрендинге Красного Сиона в Русский Футуризм я решал проблему массового изменения ссылок на наши посты, опубликованные ранее.
Телеграм ест форматирование текста (зачеркнутый, жирный и т.д) в виде html или Markdown разметки.
При этом, уже существующее сообщение в телеграме из кода выглядит как текст, к которому прилагаются Entities - описания, где указано, что с символа номер 10 следующие 6 символов - жирный, гиперссылка или другой вид форматирования.
Действие редактирования сообщения - это по сути отправка нового сообщения на место старого. Соответственно, чтобы выборочно поправить форматирование текста (те же гиперссылки), нужно на основании Entities воссоздать разметку текста текст, внести изменения (поменять в ссылке "redzion" на "rufuturism") и отправить сообщение. Изначально я подумал: зачем мне html, сделаю модно и молодежно, в макрдауне.
Вот тут-то всплыло несколько подводных камней:
1. Маркдаун, который ест телеграм - какой-то особенный, не соответствующий официальной спецификации.
2. Ни один из вариантов разметки зачеркнутого текста в маркдауне не распознался телеграмом как зачеркнутый.
3. Спецсимвол (\n, перенос строки) посреди выделения разбивает разметку, потому нужно разбивать её на два куска, до и после него.
В общем, после трёх часов попыток обойти все косяки этого формата, я плюнул и за 15 минут сделал функцию, воссоздающую разметку в html.
Отдельная тема - виды форматирования, поддерживаемые телеграмом. Так, например, ссылка на пользователя, у которого нету username-а (обращение через @), выглядит как гиперссылка из его имени с адресом tg://user?id=1234, где 1234 - user_id. Есть еще некий формат "pre", который должен поддерживаться телеграмом. В функцию для воссоздания разметки для него я сделал, но способа ввести текст в этом формате со стандартных клиентов, чтобы посмотреть как он выглядит, я не нашел.
В целом, основным результатом работы по замене ссылок в постах стала именно функция пересоздания разметки поста: она нашла применение и в боте для обратной связи и она очень пригодится в боте для отложенного постинга.
#телеграм
BY Эшу быдлокодит
Share with your friend now:
tgoop.com/eshu_coding/79