Если вы еще не знакомы с 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"
}
]