Если вы еще не знакомы с Logseq, то почитайте о нем здесь:

Гайд по Logseq
Что это?Logseq - это локальный аутлайнер с открытым исходным кодом, который работает с использованием локальных текстовых файлов Markdown и Org-mode. Подходит для базы знаний, организации мыслей, ведения списка дел. Упор делается на том, что Logseq не хранит никакую информацию о ваших заметках на св…

Часто случается так, что находится интересная статья или страница в Интернете и ее хочется записать. Я часть пользуются для этих целей Google Keep. Но с тех пор, как я начал использовать Logseq, чувствуется потребность записать их туда. Но в Logseq пока нет веб-клиппера, а заходить в приложение не очень удобно. Хочется это сделать "одним кликом". Так родилась идея плагина Inbox Telegram для Logseq. Плагин вставляет записи из Telegram в журнал Logseq текущего дня.

Первым делом я пошел изучать примеры плагинов, затем Plugins API и немного расстроился: документация в зачаточном состоянии. Общий смысл сводится к тому, что мы создаем javascript или typescript файл, компилируем из него html, например, с помощью Parcel и подключаем в виде плагина в Logeq.

Минимальный Hello, World выглядит так:

/**
 * entry
 */
function main () {
  logseq.App.showMsg('❤️ Message from Hello World Plugin :)')
}

// bootstrap
logseq.ready(main).catch(console.error)

Из основных методов Logseq Plugin API мне понадобились:

  • logseq.settings - для получения настроек плагина
  • logseq.App.showMsg() - отображает всплывающее уведомление
  • logseq.updateSettings() - позволяет изменить настройки плагина
  • logseq.Editor.insertBlock() - вставляет одну запись
  • logseq.Editor.insertBatchBlock() - вставляет записи пачкой
  • logseq.Editor.getPageBlocksTree() - получаем все дочерние блоки на странице
  • logseq.DB.datascriptQuery() - выполняет запрос в БД Logseq

Запрос для извлечения журнала текущего дня, где ${todayDate} - это текущая дата в формате YYYYMMDD:

[:find (pull ?p [*])
:where
[?b :block/page ?p]
[?p :block/journal? true]
[?p :block/journal-day ?d]
[(= ?d ${todayDate})]]

Таким образом, плагин работает следующим образом:

  • делаем периодически запросы к Telegram API
  • получаем новые сообщения
  • находим журнал текущего дня в Logseq
  • получаем дерево блоков на странице
  • проверяем есть ли блок плагина, если нет - вставляем
  • вставляем сообщения в этот блок

Конфигурация плагина

  • Сначала создаем Telegram бота по инструкции:  https://core.telegram.org/bots#3-how-do-i-create-a-bot
    Необходимо написать BotFather команду /newbot. После чего он выдаст вам token для бота.
  • Вставить токен в настройки плагина botToken.
  • При необходимости изменить интервал опроса pollingInterval (в миллисекундах). Именно с этой периодичностью будут запрашиваться новые сообщения.
  • Сообщения будут вставлены в блок ежедневного журнала Logseq, который указан в свойстве inboxName.
  • Обязательно сделать рестарт плагина
  • Затем в Telegram находим нашего бота и пишем ему команду /start.
  • После чего пишем любое сообщение в чат и в течение 60 секунд (по умолчанию) сообщение вставится в журнал Logseq
{
  "disabled": false,
  "botToken": "PASTE_BOT_TOKEN_HERE",
  "pollingInterval": 60000,
  "inboxName": "#inbox",
  "inboxByChat": []
}

Настройка нескольких входящих каналов

К примеру, вы хотите свои мысли сохранять с тегом #inbox, а планы с тегом #plans.

  • Пишем BotFather команду /setprivacy и устанавливаем значение DISABLED, иначе бот не увидит сообщения в группе Telegram
  • Также нужно убедиться, что /setjoingroups имеет значение ENABLED, в противном случае вы не сможете добавить бота в группу
  • Создайте новую группу Telegram и пригласите туда бота
  • Напишите сообщение в созданную группу
  • В настройках плагина в массиве inboxByChat добавится новый объект
"inboxByChat": [
  {
    "chatId": -111111111,
    "inboxName": "#spark"
  }
]
  • Отключите плагин, иначе ваши изменения затрутся
  • Поменяйте свойство inboxName например на #plans
  • Включите плагин
  • Новые сообщения в этой группе будут добавлены под тегом #plans
  • При необходимости повторите шаги для другой группы
"inboxByChat": [
  {
    "chatId": -111111111,
    "inboxName": "#inbox"
  },
  {
    "chatId": -222222222,
    "inboxName": "#plans"
  }
]

Ссылки

GitHub - shady2k/logseq-inbox-telegram-plugin
Contribute to shady2k/logseq-inbox-telegram-plugin development by creating an account on GitHub.