Telegram-статьи

unlisted

by Daniil Semizhonov

Отправляет заметку или её часть в Telegram как Rich Message: заголовки, таблицы, callout'ы, формулы, картинки. Повторная отправка обновляет сообщение.

Updated todayMIT
View on GitHub

Telegram-статьи

Плагин для Obsidian. Отправляет заметку или её часть в Telegram как Rich Message: в сообщении сохраняются заголовки, таблицы, цитаты, сворачиваемые блоки, формулы, чеклисты и картинки. Плагин использует метод sendRichMessage из Bot API 10.1+. Отдельный сервер не нужен, запросы идут прямо из Obsidian.

Возможности

  • Отправить в Telegram: команда в палитре и пункт в контекстном меню файла. Открывается окно: слева заголовки заметки с галочками (по умолчанию отмечено всё), справа итоговый Rich Markdown, счётчик символов и замечания. Внизу галочки «Убирать лишние пустые строки и пробелы» и «Отделять абзацы».
  • Отправить выделенное: команда и пункт в контекстном меню редактора. Фрагмент уходит сразу, без окна.
  • Перед каждым постом бот присылает справку: название заметки и время отправки. Повторная отправка присылает новую справку и новый пост, старые сообщения не меняются.
  • Бот пишет только на ваш ID из настроек.

Как заметка превращается в сообщение

В ObsidianВ Telegram
frontmatter, %%комментарии%%, <!-- -->вырезаются
блоки dataview / dataviewjsвырезаются
строки с #тегами в конце заметкивырезаются
[[Заметка]], [[Заметка|алиас]], [[Заметка#Раздел]]текст: «Заметка», «алиас», «Заметка › Раздел»
[текст](url)без изменений
> [!note] Заголовокцитата с жирным заголовком и иконкой
> [!tip]- … / > [!tip]+ …сворачиваемый блок <details> (+ — раскрытый)
![[кот.png]], ![](папка/кот.png)файл загружается вместе с сообщением и встраивается
![](https://…/a.png)встраивается по URL
![[Другая заметка]]название заметки (встраивание заметок не поддерживается)
==выделение==маркер
$x^2$, $$…$$формулы; многострочные превращаются в блок ```math
$ в ценах («100$», «$5»)экранируется и не становится формулой
код (блоки и `inline`)не меняется вообще
таблицы, списки, чеклисты, сноски [^1]без изменений: Telegram понимает их сам
одиночный Enter внутри абзацановая строка, как в Obsidian (если в Obsidian не включены «Строгие переносы строк»)
несколько пустых строк, двойные пробелыпо умолчанию сжимаются; с выключенной галочкой «Убирать лишние пустые строки и пробелы» сохраняются
пустая строка между абзацамипо умолчанию ещё и пустой абзац между ними: приложение Telegram рисует соседние абзацы почти вплотную. Отключается галочкой «Отделять абзацы»

Лимиты Telegram: до 32 768 символов, 500 блоков, 50 вложений и 20 колонок в таблице. Фото до 10 МБ, остальные файлы до 50 МБ. Если заметка длиннее лимита, плагин её не обрезает: он показывает текущую длину и не отправляет. В таком случае снимите галочки с части разделов и отправьте заметку в несколько сообщений.

Настройка

1. Создать бота

  1. Откройте @BotFather и отправьте /newbot.
  2. Придумайте имя и username: он должен заканчиваться на bot.
  3. BotFather пришлёт токен вида 123456789:AA…. Это пароль от бота, никому его не показывайте.

2. Вставить токен и ID

  1. Найдите своего бота в Telegram и отправьте ему /start: бот не может написать первым.
  2. Настройки Obsidian → «Telegram-статьи» → «Токен бота»: вставьте токен.
  3. «Ваш ID в Telegram» → «Определить». Плагин спросит у Telegram, кто последним писал боту, подставит этот ID и покажет имя. Если имя не ваше, напишите боту /start ещё раз и снова нажмите «Определить». ID можно вписать и вручную, например узнав его у @userinfobot.

Бот пишет только на этот ID. Сам бот никому не отвечает: у плагина нет сервера, который читал бы входящие сообщения, он только отправляет посты.

Токен хранится в хранилище секретов Obsidian на этом устройстве (нужен Obsidian 1.11.4+). В файлы хранилища и в синхронизацию он не попадает, поэтому на каждом устройстве его нужно вставить отдельно.

Если у бота настроен webhook, «Определить» не сработает: Telegram не отдаёт список сообщений боту. Отключите webhook, открыв https://api.telegram.org/bot<токен>/deleteWebhook, или впишите ID вручную.

Установка вручную

  1. Соберите плагин (npm install && npm run build) или скачайте main.js, manifest.json и styles.css из релиза.
  2. Создайте папку <хранилище>/.obsidian/plugins/telegram-rich/.
  3. Скопируйте в неё main.js, manifest.json и styles.css.
  4. Перезапустите Obsidian или обновите список плагинов. Затем включите «Telegram-статьи» в разделе «Сторонние плагины».

Через BRAT: добавьте адрес репозитория в «BRAT → Add beta plugin».

Разработка

npm install
npm test          # юнит-тесты конвертера, разделов и клиента (vitest)
npm run check     # проверка типов
npm run build     # main.js

Устройство кода:

  • src/convert.ts: чистая конвертация Obsidian → Rich Markdown, без Obsidian API;
  • src/sections.ts: разбивка заметки по заголовкам;
  • src/info.ts: справка перед постом;
  • src/telegram.ts: клиент Bot API, multipart собирается вручную; HTTP передаётся снаружи (requestUrl);
  • src/main.ts, src/settings.ts, src/modal.ts: сам плагин.

Живая проверка без Obsidian: TG_TOKEN=… TG_CHAT=… npx tsx scripts/live-test.ts. Скрипт отправит тестовую заметку с картинкой, а потом отредактирует её и напечатает, как Telegram разобрал сообщение на блоки.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.