Лонгриды в телеграм. Просто, быстро и красиво

В своем недавнем обновлении, команда Дурова выкатило большое обновление Telegram Bot API 10.1, в котором завезли Rich Messages — сообщения, в которых можно конструировать сложную структуру контента с помощью Rich Markdown или HTML-разметки.
Но, возможность постить этим Rich Messages, доступна только через API и не доступна из клиентских приложений любой из платформ. В этом посте я решил исправить данное недоразумение.
Представляю Телеграм Рич Постер.

Лонгриды в телеграм. Просто, быстро и красиво

Предрекая нетерпеливость большинства читателей данного ресурса - вот ссылка:

Инструкция доступна, велкам ознакамливаться.

Для тех, кто жаждет подробностей и, просто любит читать лонгриды, то погнали разбираться, что это за постер, с чем его едят и при чем тут Гослинг.

Помните Telegra.ph, Notion или README на гитхабе? Вот Rich Messages - это нечто крайне близкое и похожее, но теперь во всеми любимом мессенджере.

Rich Messages дает реально очень крутые возможности, для оформления постов:

  • Максимальный размер сообщения — 32 768 символов.
  • До 500 вложенных блоков (включая списки, таблицы и цитаты).
  • До 50 медиа-вложений (фото, видео, аудио) внутри одного сообщения.
  • Таблицы шириной до 20 колонок.

И все это оформляется с помощью Markdown или HTML-тегов

Лонгриды в телеграм. Просто, быстро и красиво

В официальной документации по API можно посмотреть примеры сообщений и синтаксиса

А зачем вообще отдельный сервис для этого?

Потому что в клиентах Telegram (официальных) нет функционала для написания Rich Messages. Эти сообщения могут писать только боты.
И, казалось бы, на этом этапе можно расходиться. Но, боты умеют писать в каналы, от имени канала. Конечно же, предварительно бота надо создать и добавить его в админы канала.

Отправка Rich Message через API делается довольно просто, буквально одним POST запросом, в котором содержится tgid получателя и сам payload вашего Rich Message.

https://api.telegram.org/bot${BOT_TOKEN}/sendRichMessage

Сначала, я написал простой bash-скрипт, которому я скармливал md или html файл, а он, в свою очередь, отправлял содержимое указанному получателю по tgid.

JSON_PAYLOAD="$( jq -nc \ --arg chat_id "$CHAT_ID" \ --arg text "$TEXT" \ --arg is_rtl "$IS_RTL" ' { chat_id: ((try ($chat_id | tonumber) catch $chat_id)), rich_message: { markdown: $text } } | if $is_rtl == "true" then .rich_message.is_rtl = true else . end ' )" curl -sS -X POST \ -H "Content-Type: application/json" \ -d "$JSON_PAYLOAD" \ "https://api.telegram.org/bot${BOT_TOKEN}/sendRichMessage"

Но, данный метод - это не выход. Вдруг под рукой не будет компьютера на Linux, или Termux на андроиде?

Лонгриды в телеграм. Просто, быстро и красиво

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

Лонгриды в телеграм. Просто, быстро и красиво

Изначально хотел писать на goland в угоду максимальной совместимости и универсальности, но стало лень ставить компилятор и настраивать vscode под новый язык

КИБЕРБИБА отмазался

Таким образом, спустя 15 коммитов, на свет явился Телеграм Рич Постер

Лонгриды в телеграм. Просто, быстро и красиво

Признаюсь честно, в html я не силен, поэтому оформление я нагло ~~сп~~ позаимствовал у meshcoretel.ru.
А откуда Гослинг?
Понятия не имею. Захотелось поставить Гослинга. Гослинг крутой. Гослинг всем нравится. Вот пусть в моем приложении он тоже будет.

Далее я накидал небольшой гайд, как этим пользоваться

Лонгриды в телеграм. Просто, быстро и красиво

Сделал локальное сохранение данных в localChache браузере пользователя. Добавил подгрузку информации о введенных данных через Telegram API и добавил проверку на возможность постинга именно этого бота именно в этот канал.
А еще можно markdown или html текст брать прямо с github (или с любого другого ресурса), указав прямую ссылку на файл.
Еще быстро оформил SSL сертификат, чтобы люди не стремались свои токены передавать...

И выкатил в свет: https://post.vakarian.website/

Для совсем параноиков, кто не верит открытому коду или просто любит все держать у себя, я написал краткий гайд по деплою на своем хосте

Так как, я старался писать проект вообще без зависимостей, то развернуть его на любой VPS с линуксом - труда не составит. На Windows тоже должно заработать, но я не проверял, увы ¯\_(ツ)_/¯

Тут важно уточнить, что разворачивать данный проект надо на заморской VPS, по причинам, о которых тут не принято говорить. Нужно просто поверить в то, что на заморской VPS он будет чувствовать себя лучше.

Лонгриды в телеграм. Просто, быстро и красиво

И еще одна маленькая плюшка для тех, кто решится на деплой: в конфиг-файле config.yaml, есть кастомизация интерфейса.
Можно установить свою иконку, как png, так и с simpleicons.org

ui: title: "RichMessage Publisher" # The header title displayed on the web interface icon: source: "simpleicons" # Icon source type: simpleicons | url | file | none value: "task" # Site slug from simpleicons.org or a direct URL/file path # Alternative URL configuration example: # source: url # value: https://githubusercontent.com favicon: source: "url" # Favicon source type: simpleicons | url | file | none value: "https://simpleicons.org"

Из неожиданных бонусов: для использования постера не надо пользоваться всякими средствами для интернета (ну вы поняли ツ).

Все работает и на нашем православном почти_чебурнете.

Кстати, в МАХе (или МАКСе) такого нет.
Вот и думайте... Подписаться. Кибербиба.