---
title: Плагин Inbox Telegram для Logseq
slug: logseq-telegram-inbox-plugin
canonical: https://shady2k.ru/posts/logseq-telegram-inbox-plugin/
date: 2022-01-25
kind: article
author: human
lang: ru
summary: Мой плагин для Logseq складывает сообщения из Telegram-бота в журнал
  текущего дня; рассказываю, как он устроен и как настроить несколько входящих.
tags:
  - pkms
---

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

[Гайд по Logseq](/posts/logseq-guide/)

Часто случается так, что находится интересная статья или страница в Интернете и ее хочется записать. Я часть пользуются для этих целей Google Keep. Но с тех пор, как я начал использовать Logseq, чувствуется потребность записать их туда. Но в Logseq пока нет веб-клиппера, а заходить в приложение не очень удобно. Хочется это сделать "одним кликом". Так родилась идея плагина [Inbox Telegram для Logseq](https://github.com/shady2k/logseq-inbox-telegram-plugin). Плагин вставляет записи из Telegram в журнал Logseq текущего дня.

Первым делом я пошел изучать [примеры плагинов](https://github.com/shady2k/logseq-inbox-telegram-plugin), затем [Plugins API](https://logseq.github.io/plugins/) и немного расстроился: документация в зачаточном состоянии. Общий смысл сводится к тому, что мы создаем javascript или typescript файл, компилируем из него html, например, с помощью [Parcel](https://www.npmjs.com/package/parcel) и подключаем в виде плагина в Logeq.

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

```javascript
/**
 * 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`:

```clojure
[: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](https://core.telegram.org/bots#3-how-do-i-create-a-bot)  
    Необходимо написать BotFather команду `/newbot`. После чего он выдаст вам token для бота.
- Вставить токен в настройки плагина `botToken`.
- При необходимости изменить интервал опроса `pollingInterval` (в миллисекундах). Именно с этой периодичностью будут запрашиваться новые сообщения.
- Сообщения будут вставлены в блок ежедневного журнала Logseq, который указан в свойстве `inboxName`.
- **Обязательно сделать рестарт плагина**
- Затем в Telegram находим нашего бота и пишем ему команду `/start`.
- После чего пишем любое сообщение в чат и в течение 60 секунд (по умолчанию) сообщение вставится в журнал Logseq

```json
{
  "disabled": false,
  "botToken": "PASTE_BOT_TOKEN_HERE",
  "pollingInterval": 60000,
  "inboxName": "#inbox",
  "inboxByChat": []
}
```

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

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

- Пишем BotFather команду `/setprivacy` и устанавливаем значение `DISABLED`, иначе бот не увидит сообщения в группе Telegram
- Также нужно убедиться, что `/setjoingroups` имеет значение `ENABLED`, в противном случае вы не сможете добавить бота в группу
- Создайте новую группу Telegram и пригласите туда бота
- Напишите сообщение в созданную группу
- В настройках плагина в массиве `inboxByChat` добавится новый объект

```json
"inboxByChat": [
  {
    "chatId": -111111111,
    "inboxName": "#spark"
  }
]
```

- Отключите плагин, иначе ваши изменения затрутся
- Поменяйте свойство `inboxName` например на `#plans`
- Включите плагин
- Новые сообщения в этой группе будут добавлены под тегом `#plans`
- При необходимости повторите шаги для другой группы

```json
"inboxByChat": [
  {
    "chatId": -111111111,
    "inboxName": "#inbox"
  },
  {
    "chatId": -222222222,
    "inboxName": "#plans"
  }
]
```

## Ссылки

[GitHub - shady2k/logseq-inbox-telegram-plugin](https://github.com/shady2k/logseq-inbox-telegram-plugin)
