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