@leemour/max-cli 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -37
- package/dist/bot/client.d.ts +6 -0
- package/dist/bot/client.d.ts.map +1 -1
- package/dist/bot/client.js +17 -3
- package/dist/bot/client.js.map +1 -1
- package/dist/bot/input.d.ts.map +1 -1
- package/dist/bot/input.js +7 -4
- package/dist/bot/input.js.map +1 -1
- package/dist/bot/joins.d.ts +26 -0
- package/dist/bot/joins.d.ts.map +1 -0
- package/dist/bot/joins.js +56 -0
- package/dist/bot/joins.js.map +1 -0
- package/dist/bot/keep.d.ts +2 -2
- package/dist/bot/keep.d.ts.map +1 -1
- package/dist/bot/keep.js +3 -2
- package/dist/bot/keep.js.map +1 -1
- package/dist/bot/map.d.ts +5 -2
- package/dist/bot/map.d.ts.map +1 -1
- package/dist/bot/map.js +7 -1
- package/dist/bot/map.js.map +1 -1
- package/dist/bot/transport.d.ts +4 -0
- package/dist/bot/transport.d.ts.map +1 -1
- package/dist/bot/transport.js +43 -3
- package/dist/bot/transport.js.map +1 -1
- package/dist/bot-mcp/instructions.d.ts +9 -0
- package/dist/bot-mcp/instructions.d.ts.map +1 -0
- package/dist/bot-mcp/instructions.js +22 -0
- package/dist/bot-mcp/instructions.js.map +1 -0
- package/dist/bot-mcp/server.d.ts +21 -0
- package/dist/bot-mcp/server.d.ts.map +1 -0
- package/dist/bot-mcp/server.js +213 -0
- package/dist/bot-mcp/server.js.map +1 -0
- package/dist/bot-mcp/tools.d.ts +27 -0
- package/dist/bot-mcp/tools.d.ts.map +1 -0
- package/dist/bot-mcp/tools.js +280 -0
- package/dist/bot-mcp/tools.js.map +1 -0
- package/dist/client.d.ts +43 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +207 -31
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +7 -5
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/backup.js +1 -1
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/bot-check.d.ts +11 -0
- package/dist/commands/bot-check.d.ts.map +1 -0
- package/dist/commands/bot-check.js +206 -0
- package/dist/commands/bot-check.js.map +1 -0
- package/dist/commands/bot-comments.d.ts.map +1 -1
- package/dist/commands/bot-comments.js +2 -1
- package/dist/commands/bot-comments.js.map +1 -1
- package/dist/commands/bot-context.d.ts +7 -0
- package/dist/commands/bot-context.d.ts.map +1 -1
- package/dist/commands/bot-context.js +32 -2
- package/dist/commands/bot-context.js.map +1 -1
- package/dist/commands/bot-mcp.d.ts +3 -0
- package/dist/commands/bot-mcp.d.ts.map +1 -0
- package/dist/commands/bot-mcp.js +69 -0
- package/dist/commands/bot-mcp.js.map +1 -0
- package/dist/commands/bot-members.d.ts.map +1 -1
- package/dist/commands/bot-members.js +7 -4
- package/dist/commands/bot-members.js.map +1 -1
- package/dist/commands/bot-people.d.ts +10 -0
- package/dist/commands/bot-people.d.ts.map +1 -0
- package/dist/commands/bot-people.js +156 -0
- package/dist/commands/bot-people.js.map +1 -0
- package/dist/commands/bot-reads.d.ts.map +1 -1
- package/dist/commands/bot-reads.js +25 -14
- package/dist/commands/bot-reads.js.map +1 -1
- package/dist/commands/bot-sends.d.ts.map +1 -1
- package/dist/commands/bot-sends.js +6 -5
- package/dist/commands/bot-sends.js.map +1 -1
- package/dist/commands/bot-setup.d.ts.map +1 -1
- package/dist/commands/bot-setup.js +5 -4
- package/dist/commands/bot-setup.js.map +1 -1
- package/dist/commands/bot-updates.d.ts.map +1 -1
- package/dist/commands/bot-updates.js +16 -2
- package/dist/commands/bot-updates.js.map +1 -1
- package/dist/commands/bot.d.ts.map +1 -1
- package/dist/commands/bot.js +13 -4
- package/dist/commands/bot.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +15 -30
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +7 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +27 -3
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +29 -27
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +21 -0
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +75 -21
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/folders.d.ts.map +1 -1
- package/dist/commands/folders.js +3 -2
- package/dist/commands/folders.js.map +1 -1
- package/dist/commands/inbox.d.ts.map +1 -1
- package/dist/commands/inbox.js +1 -1
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +9 -11
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/paging.d.ts +17 -1
- package/dist/commands/paging.d.ts.map +1 -1
- package/dist/commands/paging.js +22 -2
- package/dist/commands/paging.js.map +1 -1
- package/dist/commands/polls.d.ts +3 -0
- package/dist/commands/polls.d.ts.map +1 -0
- package/dist/commands/polls.js +103 -0
- package/dist/commands/polls.js.map +1 -0
- package/dist/commands/recipients.d.ts.map +1 -1
- package/dist/commands/recipients.js +3 -2
- package/dist/commands/recipients.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +4 -3
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/sends.d.ts.map +1 -1
- package/dist/commands/sends.js +3 -2
- package/dist/commands/sends.js.map +1 -1
- package/dist/config.d.ts +78 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +143 -72
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +47 -1
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +56 -5
- package/dist/diagnose.js.map +1 -1
- package/dist/domain/map.d.ts +9 -1
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js +57 -0
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +29 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +2 -1
- package/dist/export.js.map +1 -1
- package/dist/generated/client.generated.d.ts +1 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +1 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +1 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +1 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +25 -10
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +2 -1
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +6 -2
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/confirm.js +2 -2
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +83 -17
- package/dist/mcp/tools.js.map +1 -1
- package/dist/moderation/check.d.ts +15 -9
- package/dist/moderation/check.d.ts.map +1 -1
- package/dist/moderation/check.js +14 -45
- package/dist/moderation/check.js.map +1 -1
- package/dist/moderation/rules.d.ts +57 -7
- package/dist/moderation/rules.d.ts.map +1 -1
- package/dist/moderation/rules.js +13 -11
- package/dist/moderation/rules.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +11 -3
- package/dist/program.js.map +1 -1
- package/dist/rendering/messages.d.ts +6 -1
- package/dist/rendering/messages.d.ts.map +1 -1
- package/dist/rendering/messages.js +24 -3
- package/dist/rendering/messages.js.map +1 -1
- package/dist/runs/events.d.ts +5 -2
- package/dist/runs/events.d.ts.map +1 -1
- package/dist/runs/events.js +4 -1
- package/dist/runs/events.js.map +1 -1
- package/dist/runs/recording.d.ts +11 -0
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +28 -12
- package/dist/runs/recording.js.map +1 -1
- package/dist/sends/guard.d.ts +2 -2
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +2 -1
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +2 -2
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +3 -0
- package/dist/sends/permissions.js.map +1 -1
- package/dist/server/server-connection.d.ts +8 -1
- package/dist/server/server-connection.d.ts.map +1 -1
- package/dist/server/server-connection.js +27 -1
- package/dist/server/server-connection.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +7 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/start.d.ts +1 -1
- package/dist/server/start.d.ts.map +1 -1
- package/dist/server/start.js +5 -3
- package/dist/server/start.js.map +1 -1
- package/dist/session/store.d.ts +2 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +5 -1
- package/dist/session/store.js.map +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +2 -1
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts +3 -0
- package/dist/spec/operations/account.d.ts.map +1 -1
- package/dist/spec/operations/account.js +5 -1
- package/dist/spec/operations/account.js.map +1 -1
- package/dist/spec/operations/chats.d.ts +4 -3
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +12 -7
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts +8 -3
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +26 -5
- package/dist/spec/operations/contacts.js.map +1 -1
- package/dist/spec/operations/folders.d.ts.map +1 -1
- package/dist/spec/operations/folders.js +1 -0
- package/dist/spec/operations/folders.js.map +1 -1
- package/dist/spec/operations/messages.d.ts +14 -4
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +30 -3
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts +1 -1
- package/dist/spec/operations/uploads.d.ts.map +1 -1
- package/dist/spec/operations/uploads.js +2 -1
- package/dist/spec/operations/uploads.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -2
- package/skills/max-cli/SKILL.md +19 -9
package/README.md
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
Ваши боты [MAX](https://max.ru) и ваш личный аккаунт — в терминале и в ИИ-агентах. `max` —
|
|
8
8
|
программа для терминала и MCP-сервер: пишите от имени бота через официальный Bot API, а в свои
|
|
9
|
-
чаты — сами или руками Claude, Codex, Cursor и других агентов.
|
|
10
|
-
|
|
9
|
+
чаты — сами или руками Claude, Codex, Cursor и других агентов. В группах, которые вы ведёте, —
|
|
10
|
+
следите за непрочитанным и сразу реагируйте на проблемы: спам, чужие ссылки, флуд, вопросы без
|
|
11
|
+
ответа — по вашим правилам.
|
|
11
12
|
|
|
12
13
|
```sh
|
|
13
14
|
max sales bot messages send "Команда продаж" "Сборка готова" # от имени бота
|
|
@@ -38,6 +39,14 @@ max bot list --check # все боты на
|
|
|
38
39
|
- **Файлы, участники, комментарии, кнопки, меню команд, вебхуки.** `messages send --file`,
|
|
39
40
|
`members`, `admins`, `comments`, `callbacks answer`, `commands`, `webhooks` — у каждой записи тот
|
|
40
41
|
же список получателей и журнал.
|
|
42
|
+
- **Модерация от имени бота.** `bot chats check` сверяет новое в группе с правилами
|
|
43
|
+
(`bot chats rules`) и удаляет спам и людей — с запретом вернуться по ссылке. Вступления видит
|
|
44
|
+
`bot updates watch`, который печатает всё, что происходит в чатах бота.
|
|
45
|
+
- **Копия переписки на этом компьютере.** `bot people show <кто>` — где человек писал и его личный
|
|
46
|
+
чат с ботом; `bot messages search --from <кто>` и `bot messages between <кто> <кто>` — без
|
|
47
|
+
запросов к MAX.
|
|
48
|
+
- **Бот для агента.** `max sales bot mcp` — MCP-сервер бота: по умолчанию только чтение, запись —
|
|
49
|
+
по флагам `--allow-send`, `--allow-delete`, `--allow-moderate`.
|
|
41
50
|
- **Любая операция API.** Все операции Bot API доступны как `max bot api <операция>` — с флагами
|
|
42
51
|
для параметров и JSON-телом, которое сверяется со схемой до отправки.
|
|
43
52
|
- **Бот не напишет лишнего.** У каждого бота свой список чатов, куда ему можно писать, и журнал
|
|
@@ -104,7 +113,8 @@ max messages send "Иван Петров" "Опаздываю на 15 минут
|
|
|
104
113
|
Вы: Да.
|
|
105
114
|
```
|
|
106
115
|
|
|
107
|
-
|
|
116
|
+
Отправлять агент может, только если вы это разрешили, — а с `--confirm-send` каждое сообщение
|
|
117
|
+
ждёт вашего «да». Чтение не ставит отметку «прочитано». Как настроить
|
|
108
118
|
агента под каждую задачу — готовые запросы, расписание и ограничения:
|
|
109
119
|
[docs/recipes.md](docs/recipes.md).
|
|
110
120
|
|
|
@@ -155,13 +165,14 @@ max chats check "Поход" --allow-dangerous # проверить гр
|
|
|
155
165
|
- **Искать.** Сообщения — по тексту всего прочитанного, без подключения к MAX. Чаты и контакты —
|
|
156
166
|
по части названия или имени.
|
|
157
167
|
- **Писать.** Текст и разметка, ответы, фото, видео, файлы и голосовые, правка, пересылка, закрепление, реакции,
|
|
158
|
-
отложенная отправка, удаление — у себя или у всех.
|
|
168
|
+
опросы, отложенная отправка, удаление — у себя или у всех.
|
|
159
169
|
- **Вести группы и каналы.** Создать группу, вступить по ссылке, выйти, участники и админы,
|
|
160
|
-
название и настройки,
|
|
170
|
+
название и настройки, ссылка-приглашение, папки. Для админа — вопросы без
|
|
161
171
|
ответа, кто вступил и вышел, все участники с возрастом аккаунта, правила и проверка группы по ним
|
|
162
172
|
([docs/groups.md](docs/groups.md)).
|
|
163
|
-
- **Контакты и аккаунт.** Найти человека по номеру, добавить, удалить,
|
|
164
|
-
изменить
|
|
173
|
+
- **Контакты и аккаунт.** Найти человека по номеру, добавить, удалить, переименовать для себя,
|
|
174
|
+
заблокировать, импортировать из файла; изменить профиль и фото; посмотреть и завершить другие
|
|
175
|
+
сеансы.
|
|
165
176
|
- **Входить удобным способом.** QR-код прямо в терминале, QR-код или SMS через web.max.ru в
|
|
166
177
|
браузере, или готовый токен.
|
|
167
178
|
|
|
@@ -194,7 +205,7 @@ max chats check "Поход" --allow-dangerous # проверить гр
|
|
|
194
205
|
скрипт сразу понимает, что случилось: нет входа, чат не найден или MAX не ответил вовремя.
|
|
195
206
|
- **Разбор проблем без вашей переписки.** `--trace` показывает каждый запрос к MAX, чтобы понять,
|
|
196
207
|
почему команда не сработала. В этой записи нет текстов, имён, телефонов и токена, поэтому её
|
|
197
|
-
можно приложить к сообщению об ошибке.
|
|
208
|
+
можно приложить к сообщению об ошибке. Удачный запуск без флага не записывается, неудачный — всегда, тоже без текстов.
|
|
198
209
|
|
|
199
210
|
## Под заказ
|
|
200
211
|
|
|
@@ -228,8 +239,10 @@ max chats check "Поход" --allow-dangerous # проверить гр
|
|
|
228
239
|
| отправка видео | ✅ | ✅ | — |
|
|
229
240
|
| отправка кружков | — | ✅ | — |
|
|
230
241
|
| отправка голосовых | ✅ | ⚠️ в 2.4.1 не проходит ([#102](https://github.com/MaxApiTeam/PyMax/issues/102), [#103](https://github.com/MaxApiTeam/PyMax/issues/103)) | — |
|
|
231
|
-
|
|
|
232
|
-
|
|
|
242
|
+
| опросы: показать, проголосовать, создать, закрыть | ✅ | ✅ | — |
|
|
243
|
+
| фото профиля | ✅ | ✅ | — |
|
|
244
|
+
| вход с облачным паролем | ✅ по QR-коду | ✅ | — |
|
|
245
|
+
| установить или снять облачный пароль | — | ✅ | — |
|
|
233
246
|
|
|
234
247
|
Для бота есть `max bot` — через официальный Bot API, отдельно от личного аккаунта
|
|
235
248
|
([docs/bot.md](docs/bot.md)). Таблица выше — про личный аккаунт.
|
|
@@ -252,8 +265,7 @@ max chats check "Поход" --allow-dangerous # проверить гр
|
|
|
252
265
|
|
|
253
266
|
## Установка
|
|
254
267
|
|
|
255
|
-
Пакет — **`@leemour/max-cli`**, команда, которую он ставит, — **`max`**.
|
|
256
|
-
чужим пакетом с 2018 года.
|
|
268
|
+
Пакет — **`@leemour/max-cli`**, команда, которую он ставит, — **`max`**.
|
|
257
269
|
|
|
258
270
|
Запустить, ничего не устанавливая:
|
|
259
271
|
|
|
@@ -297,38 +309,49 @@ export MAX_PROFILE=personal # или на всю сессию оболочки
|
|
|
297
309
|
|
|
298
310
|
## Использование
|
|
299
311
|
|
|
312
|
+
**Бот пишет в группу, закрепляет объявление и следит за порядком:**
|
|
313
|
+
|
|
300
314
|
```sh
|
|
301
|
-
max
|
|
302
|
-
max
|
|
303
|
-
max
|
|
304
|
-
max
|
|
305
|
-
max
|
|
315
|
+
max sales bot messages send "Команда продаж" "**Сборка готова**" --format markdown --file report.pdf
|
|
316
|
+
max sales bot chats pin "Команда продаж" <mid> # id сообщения — из ответа на send
|
|
317
|
+
max sales bot updates watch # всё, что происходит в чатах бота, по мере прихода
|
|
318
|
+
max sales bot chats rules set "Команда продаж" links delete
|
|
319
|
+
max sales bot chats check "Команда продаж" --dry-run # что нарушает правила — без действий
|
|
320
|
+
max sales bot people show "Иван" # где человек писал и его личный чат с ботом
|
|
306
321
|
```
|
|
307
322
|
|
|
308
|
-
|
|
323
|
+
**Разговор от своего имени:**
|
|
309
324
|
|
|
310
325
|
```sh
|
|
311
|
-
max
|
|
312
|
-
max
|
|
313
|
-
max messages
|
|
326
|
+
max inbox # непрочитанное во всех чатах, ничего не отмечая
|
|
327
|
+
max messages list "Иван Петров" --limit 20
|
|
328
|
+
max messages send "Иван Петров" "Созвонимся в 15:00?" --reply-to <id>
|
|
329
|
+
max reactions add "Иван Петров" <id> 👍
|
|
330
|
+
max messages send 0 "Позвонить маме" --at 2h # напоминание себе в «Избранное» через два часа
|
|
331
|
+
max review --since 1d # вся переписка за сутки: кто кому что обещал
|
|
314
332
|
```
|
|
315
333
|
|
|
316
|
-
|
|
334
|
+
**Группа, которую вы ведёте:**
|
|
317
335
|
|
|
318
336
|
```sh
|
|
319
|
-
max chats
|
|
320
|
-
max chats
|
|
321
|
-
max
|
|
322
|
-
max
|
|
337
|
+
max chats create "Поход" "Аня" "Борис" # создать и позвать людей
|
|
338
|
+
max chats admins add "Поход" "Аня" --can pin,members
|
|
339
|
+
max chats link reset "Поход" # старая ссылка-приглашение перестаёт работать
|
|
340
|
+
max polls create "Поход" "Когда едем?" "Суббота" "Воскресенье"
|
|
341
|
+
max review --chat "Поход" --unanswered # вопросы, на которые сутки никто не ответил
|
|
342
|
+
max chats check "Поход" --dry-run # спам, чужие ссылки, флуд — по вашим правилам
|
|
323
343
|
```
|
|
324
344
|
|
|
325
|
-
|
|
345
|
+
**Найти и сохранить:**
|
|
326
346
|
|
|
327
347
|
```sh
|
|
328
|
-
max
|
|
329
|
-
max
|
|
348
|
+
max messages search "договор" # по всему прочитанному, без сети
|
|
349
|
+
max backup messages "Проект Альфа" --last 500 --run
|
|
350
|
+
max export messages "Проект Альфа" --format md --output alfa.md
|
|
330
351
|
```
|
|
331
352
|
|
|
353
|
+
Каждая команда отвечает JSON с `--json` и пишет в журнал, что отправила, — без текстов.
|
|
354
|
+
|
|
332
355
|
Полностью: [docs/usage.md](docs/usage.md). Каждая команда и каждая опция:
|
|
333
356
|
[docs/commands.md](docs/commands.md) — эта страница собирается из самой программы, поэтому описать
|
|
334
357
|
версию, которой не существует, она не может.
|
|
@@ -374,13 +397,14 @@ max chats list --json
|
|
|
374
397
|
|
|
375
398
|
С `--json` команда печатает только данные в JSON, без таблиц, цвета и подсказок. Так же она
|
|
376
399
|
работает, когда её вывод читает другая программа, — например, в конвейере `max … | jq`. Любой
|
|
377
|
-
список приходит в одной
|
|
400
|
+
список — чаты, сообщения, участники, всё у бота — приходит в одной форме:
|
|
378
401
|
|
|
379
402
|
```json
|
|
380
403
|
{ "items": [ … ], "page": 1, "limit": 20, "hasMore": true }
|
|
381
404
|
```
|
|
382
405
|
|
|
383
|
-
Ошибка приходит отдельно от
|
|
406
|
+
Ошибка приходит отдельно от данных — одной строкой в stderr, а stdout остаётся пустым, поэтому её
|
|
407
|
+
нельзя принять за пустой результат:
|
|
384
408
|
|
|
385
409
|
```json
|
|
386
410
|
{"error":{"code":"authentication_error","message":"no session for profile \"default\" — run `max session start`"}}
|
|
@@ -445,12 +469,7 @@ pnpm generate # переписать сгенериро
|
|
|
445
469
|
|
|
446
470
|
## Дорожная карта
|
|
447
471
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
- опросы: показывать при чтении и голосовать;
|
|
451
|
-
- локальная копия по желанию — можно работать совсем без неё.
|
|
452
|
-
|
|
453
|
-
Весь список — [docs/ROADMAP.md](docs/ROADMAP.md).
|
|
472
|
+
[docs/ROADMAP.md](docs/ROADMAP.md).
|
|
454
473
|
|
|
455
474
|
## Лицензия
|
|
456
475
|
|
package/dist/bot/client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ManifestOperation } from "@leemour/cli-core/codegen";
|
|
2
2
|
import type { Chat, Message } from "@leemour/cli-messaging";
|
|
3
|
+
import type { PersonFacts } from "@leemour/cli-messaging/store";
|
|
3
4
|
import type { BotInfo as BotInfoType } from "./generated/types.js";
|
|
4
5
|
import { type CallInput, type TransportOptions } from "./transport.js";
|
|
5
6
|
/** Every operation of the committed schema, as the manifest describes it. */
|
|
@@ -15,6 +16,11 @@ export declare class BotApiClient {
|
|
|
15
16
|
messages(chatId: string, count: number, selfId?: string): Promise<Message[]>;
|
|
16
17
|
/** A message from any answer — a send's result, an update — decoded the same way as a read. */
|
|
17
18
|
decodeMessage(raw: unknown, selfId?: string): Message;
|
|
19
|
+
/**
|
|
20
|
+
* Who wrote the messages decoded since the last call, with the username and bot flag a `Message`
|
|
21
|
+
* has no field for — for the local copy.
|
|
22
|
+
*/
|
|
23
|
+
takeSenders(): PersonFacts[];
|
|
18
24
|
call(operation: ManifestOperation, input: CallInput): Promise<unknown>;
|
|
19
25
|
}
|
|
20
26
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/bot/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAI/D,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAyB,MAAM,sBAAsB,CAAA;AAEzF,OAAO,EAAgB,KAAK,SAAS,EAAa,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE/F,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAAe,CAAA;AAUrE,wEAAwE;AACxE,qBAAa,YAAY;;IAIvB,YAAY,OAAO,EAAE,gBAAgB,EAEpC;IAEK,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,CAU/B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxC;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;IAED,mFAAmF;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAKjF;IAED,+FAA+F;IAC/F,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;IAED;;;OAGG;IACH,WAAW,IAAI,WAAW,EAAE,CAI3B;IAED,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;CA6CF"}
|
package/dist/bot/client.js
CHANGED
|
@@ -2,7 +2,7 @@ import { CliError } from "@leemour/cli-core";
|
|
|
2
2
|
import * as v from "valibot";
|
|
3
3
|
import { operations } from "./generated/manifest.js";
|
|
4
4
|
import { BotInfo, Chat as ChatSchema, Message as MessageSchema } from "./generated/schemas.js";
|
|
5
|
-
import { toChat, toMessage } from "./map.js";
|
|
5
|
+
import { toChat, toMessage, toPerson } from "./map.js";
|
|
6
6
|
import { BotTransport, plainJson } from "./transport.js";
|
|
7
7
|
/** Every operation of the committed schema, as the manifest describes it. */
|
|
8
8
|
export const botOperations = operations;
|
|
@@ -16,6 +16,7 @@ const required = (id) => {
|
|
|
16
16
|
/** The one door to the Bot API: generated operations stay behind it. */
|
|
17
17
|
export class BotApiClient {
|
|
18
18
|
#transport;
|
|
19
|
+
#senders = new Map();
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.#transport = new BotTransport(options);
|
|
21
22
|
}
|
|
@@ -49,6 +50,15 @@ export class BotApiClient {
|
|
|
49
50
|
decodeMessage(raw, selfId) {
|
|
50
51
|
return this.#message(raw, selfId);
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Who wrote the messages decoded since the last call, with the username and bot flag a `Message`
|
|
55
|
+
* has no field for — for the local copy.
|
|
56
|
+
*/
|
|
57
|
+
takeSenders() {
|
|
58
|
+
const senders = [...this.#senders.values()];
|
|
59
|
+
this.#senders.clear();
|
|
60
|
+
return senders;
|
|
61
|
+
}
|
|
52
62
|
call(operation, input) {
|
|
53
63
|
return this.#transport.call(operation, input);
|
|
54
64
|
}
|
|
@@ -68,8 +78,12 @@ export class BotApiClient {
|
|
|
68
78
|
*/
|
|
69
79
|
#message(raw, selfId) {
|
|
70
80
|
const parsed = v.safeParse(MessageSchema, raw);
|
|
71
|
-
if (parsed.success)
|
|
72
|
-
|
|
81
|
+
if (parsed.success) {
|
|
82
|
+
const message = parsed.output;
|
|
83
|
+
if (message.sender)
|
|
84
|
+
this.#senders.set(message.sender.user_id, toPerson(message.sender));
|
|
85
|
+
return toMessage(message, selfId);
|
|
86
|
+
}
|
|
73
87
|
const loose = plainJson(raw);
|
|
74
88
|
return {
|
|
75
89
|
id: String(loose.body?.mid ?? "unknown"),
|
package/dist/bot/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/input.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAQ/F,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAKpB,CAAA;AAElB,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAC0C,CAAA;AAWnF,eAAO,MAAM,cAAc,SAAU,MAAM,QAAQ,UAAU,OAAO,MAAM,KAAG,MAAM,GAAG,SA2BrF,CAAA;AAED,eAAO,MAAM,QAAQ,YAAa;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,GAAG,SAOjF,CAAA;AAED,eAAO,MAAM,SAAS,cAAe,iBAAiB,QAAQ,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAkC3F,CAAA"}
|
package/dist/bot/input.js
CHANGED
|
@@ -4,10 +4,13 @@ import { identifier } from "@leemour/cli-core/codegen";
|
|
|
4
4
|
import { LosslessNumber, parse } from "lossless-json";
|
|
5
5
|
import * as v from "valibot";
|
|
6
6
|
import { schemas } from "./generated/schemas.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
/** `--timeout` is the program's own deadline: a parameter spelled like it would never reach MAX (`BUG-61`). */
|
|
8
|
+
const RENAMED = { timeout: "poll-timeout" };
|
|
9
|
+
export const flagOf = (name) => RENAMED[name] ??
|
|
10
|
+
name
|
|
11
|
+
.replace(/_/g, "-")
|
|
12
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
13
|
+
.toLowerCase();
|
|
11
14
|
export const optionKey = (name) => flagOf(name).replace(/-([a-z0-9])/g, (_, letter) => letter.toUpperCase());
|
|
12
15
|
const DIGITS = /^-?\d+$/;
|
|
13
16
|
/** A flag's text as the JSON value it stands for, so a generated schema can judge it. */
|
package/dist/bot/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAA2C,MAAM,2BAA2B,CAAA;AAC/F,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,IAAI;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface JoinEntry {
|
|
2
|
+
chatId: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
name: string | null;
|
|
5
|
+
event: "add" | "remove";
|
|
6
|
+
/** ms since 1970, as the update's `timestamp`. */
|
|
7
|
+
at: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* **Who joined and left, as `bot updates watch` saw it** (`NEED-338` «C»). MAX hands each update to
|
|
11
|
+
* one reader only, so `bot chats check` cannot read joins itself; `watch` keeps them here instead.
|
|
12
|
+
* State, not cache: a lost entry is a join the check never judges.
|
|
13
|
+
*/
|
|
14
|
+
export declare class JoinLog {
|
|
15
|
+
readonly path: string;
|
|
16
|
+
constructor(path: string);
|
|
17
|
+
/** Beside the marker of `updates watch`, which writes it. */
|
|
18
|
+
static for(profile: string, env?: NodeJS.ProcessEnv): JoinLog;
|
|
19
|
+
read(): JoinEntry[];
|
|
20
|
+
/** Whether the log has anything at all — none means `watch` never ran for this bot here. */
|
|
21
|
+
kept(): boolean;
|
|
22
|
+
add(entries: JoinEntry[], now?: number): void;
|
|
23
|
+
}
|
|
24
|
+
/** `user_added` and `user_removed` from a batch of raw updates; everything else is not a join. */
|
|
25
|
+
export declare const joinsOf: (updates: unknown[]) => JoinEntry[];
|
|
26
|
+
//# sourceMappingURL=joins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../src/bot/joins.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAA;IACvB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAA;CACX;AAKD;;;;GAIG;AACH,qBAAa,OAAO;IACN,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC,6DAA6D;IAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzE;IAED,IAAI,IAAI,SAAS,EAAE,CAIlB;IAED,4FAA4F;IAC5F,IAAI,IAAI,OAAO,CAEd;IAED,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,SAAa,GAAG,IAAI,CAIhD;CACF;AAKD,kGAAkG;AAClG,eAAO,MAAM,OAAO,YAAa,OAAO,EAAE,KAAG,SAAS,EAgBlD,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { writeSecurely } from "@leemour/cli-core";
|
|
4
|
+
import { botsDirectory } from "./registry.js";
|
|
5
|
+
/** Past this, a join is too old for any check; the log does not grow for ever. */
|
|
6
|
+
const KEEP_MS = 30 * 86_400_000;
|
|
7
|
+
/**
|
|
8
|
+
* **Who joined and left, as `bot updates watch` saw it** (`NEED-338` «C»). MAX hands each update to
|
|
9
|
+
* one reader only, so `bot chats check` cannot read joins itself; `watch` keeps them here instead.
|
|
10
|
+
* State, not cache: a lost entry is a join the check never judges.
|
|
11
|
+
*/
|
|
12
|
+
export class JoinLog {
|
|
13
|
+
path;
|
|
14
|
+
constructor(path) {
|
|
15
|
+
this.path = path;
|
|
16
|
+
}
|
|
17
|
+
/** Beside the marker of `updates watch`, which writes it. */
|
|
18
|
+
static for(profile, env = process.env) {
|
|
19
|
+
return new JoinLog(join(botsDirectory(env), "joins", `${profile}.json`));
|
|
20
|
+
}
|
|
21
|
+
read() {
|
|
22
|
+
if (!existsSync(this.path))
|
|
23
|
+
return [];
|
|
24
|
+
const parsed = JSON.parse(readFileSync(this.path, "utf8"));
|
|
25
|
+
return Array.isArray(parsed.joins) ? parsed.joins : [];
|
|
26
|
+
}
|
|
27
|
+
/** Whether the log has anything at all — none means `watch` never ran for this bot here. */
|
|
28
|
+
kept() {
|
|
29
|
+
return existsSync(this.path);
|
|
30
|
+
}
|
|
31
|
+
add(entries, now = Date.now()) {
|
|
32
|
+
if (entries.length === 0 && this.kept())
|
|
33
|
+
return;
|
|
34
|
+
const joins = [...this.read(), ...entries].filter((entry) => now - entry.at < KEEP_MS);
|
|
35
|
+
writeSecurely(this.path, `${JSON.stringify({ joins })}\n`, 0o600);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const nameOf = (user) => [user.first_name, user.last_name].filter((part) => typeof part === "string" && part !== "").join(" ") || null;
|
|
39
|
+
/** `user_added` and `user_removed` from a batch of raw updates; everything else is not a join. */
|
|
40
|
+
export const joinsOf = (updates) => updates.flatMap((raw) => {
|
|
41
|
+
const update = (raw ?? {});
|
|
42
|
+
const event = update.update_type === "user_added" ? "add" : update.update_type === "user_removed" ? "remove" : undefined;
|
|
43
|
+
const user = (update.user ?? {});
|
|
44
|
+
if (!event || update.chat_id === undefined || user.user_id === undefined)
|
|
45
|
+
return [];
|
|
46
|
+
return [
|
|
47
|
+
{
|
|
48
|
+
chatId: String(update.chat_id),
|
|
49
|
+
userId: String(user.user_id),
|
|
50
|
+
name: nameOf(user),
|
|
51
|
+
event,
|
|
52
|
+
at: typeof update.timestamp === "number" ? update.timestamp : Date.now(),
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=joins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joins.js","sourceRoot":"","sources":["../../src/bot/joins.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/keep.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Chat, Message } from "@leemour/cli-messaging";
|
|
2
|
-
import { type AccountKey, type IngestedVia, type MessageStore } from "@leemour/cli-messaging/store";
|
|
2
|
+
import { type AccountKey, type IngestedVia, type MessageStore, type PersonFacts } from "@leemour/cli-messaging/store";
|
|
3
3
|
import type { ChatRegistry } from "./registry.js";
|
|
4
4
|
/** How a bot's messages are told apart from a personal account's in the shared store and its locators. */
|
|
5
5
|
export declare const PROVIDER = "max-bot";
|
|
6
6
|
export declare const accountOf: (botId: string) => AccountKey;
|
|
7
|
-
export declare const keep: (botId: string, messages: readonly Message[], via: IngestedVia, warn: (message: string) => void) => Promise<boolean>;
|
|
7
|
+
export declare const keep: (botId: string, messages: readonly Message[], via: IngestedVia, warn: (message: string) => void, senders?: readonly PersonFacts[]) => Promise<boolean>;
|
|
8
8
|
/**
|
|
9
9
|
* Only a chat MAX has just described in full: the store replaces a title it is not given
|
|
10
10
|
* (`RISK-53`), and the partial facts stay in the registry, which merges them.
|
package/dist/bot/keep.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep.d.ts","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"keep.d.ts","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,0GAA0G;AAC1G,eAAO,MAAM,QAAQ,YAAY,CAAA;AAIjC,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,UAAsD,CAAA;AAkChG,eAAO,MAAM,IAAI,UACR,MAAM,YACH,SAAS,OAAO,EAAE,OACvB,WAAW,QACV,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,YACtB,SAAS,WAAW,EAAE,KAC9B,OAAO,CAAC,OAAO,CAUjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,UAAiB,MAAM,GAAG,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAEpG,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,YACH,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,QACpD,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAC9B,OAAO,CAAC,OAAO,CAMjB,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,QAAQ,aAAoB,YAAY,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAKpG,CAAA;AAED,yGAAyG;AACzG,eAAO,MAAM,SAAS,GAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,KAAG,OAAO,CAAC,CAAC,CAY9E,CAAA"}
|
package/dist/bot/keep.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
|
-
import { openStore } from "@leemour/cli-messaging/store";
|
|
2
|
+
import { openStore, } from "@leemour/cli-messaging/store";
|
|
3
3
|
/** How a bot's messages are told apart from a personal account's in the shared store and its locators. */
|
|
4
4
|
export const PROVIDER = "max-bot";
|
|
5
5
|
const CHAT_ID = /^-?\d+$/;
|
|
@@ -36,7 +36,7 @@ const quietly = async (write, warn) => {
|
|
|
36
36
|
store?.close();
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
export const keep = async (botId, messages, via, warn) => {
|
|
39
|
+
export const keep = async (botId, messages, via, warn, senders = []) => {
|
|
40
40
|
const byChat = new Map();
|
|
41
41
|
for (const message of messages.filter(storable)) {
|
|
42
42
|
byChat.set(message.chatId, [...(byChat.get(message.chatId) ?? []), message]);
|
|
@@ -46,6 +46,7 @@ export const keep = async (botId, messages, via, warn) => {
|
|
|
46
46
|
return quietly((store) => {
|
|
47
47
|
for (const [chatId, chatMessages] of byChat)
|
|
48
48
|
store.saveMessages(accountOf(botId), chatId, chatMessages, { via });
|
|
49
|
+
store.savePeople(PROVIDER, [...senders]);
|
|
49
50
|
}, warn);
|
|
50
51
|
};
|
|
51
52
|
/**
|
package/dist/bot/keep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep.js","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,
|
|
1
|
+
{"version":3,"file":"keep.js","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/map.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { Chat, Message } from "@leemour/cli-messaging";
|
|
2
|
-
import type {
|
|
1
|
+
import type { Chat, ChatKind, Message } from "@leemour/cli-messaging";
|
|
2
|
+
import type { PersonFacts } from "@leemour/cli-messaging/store";
|
|
3
|
+
import type { Chat as BotChat, Message as BotMessage, User } from "./generated/types.js";
|
|
4
|
+
export declare const KINDS: Record<string, ChatKind>;
|
|
5
|
+
export declare const toPerson: (user: User) => PersonFacts;
|
|
3
6
|
/**
|
|
4
7
|
* A direct chat is addressed by the other person's user id in the Bot API; `user:<id>` keeps it
|
|
5
8
|
* apart from a group's chat id, which is a different number space.
|
package/dist/bot/map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,IAAI,
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAiB,MAAM,wBAAwB,CAAA;AAChG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAEV,IAAI,IAAI,OAAO,EACf,OAAO,IAAI,UAAU,EAErB,IAAI,EACL,MAAM,sBAAsB,CAAA;AAG7B,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAA2D,CAAA;AAQtG,eAAO,MAAM,QAAQ,SAAU,IAAI,KAAG,WAKpC,CAAA;AAmCF;;;GAGG;AACH,eAAO,MAAM,OAAO,cAAe,UAAU,CAAC,WAAW,CAAC,KAAG,MACuB,CAAA;AAEpF,qGAAqG;AACrG,eAAO,MAAM,SAAS,YAAa,UAAU,WAAW,MAAM,KAAG,OAmBhE,CAAA;AAED,eAAO,MAAM,MAAM,SAAU,OAAO,KAAG,IAQrC,CAAA"}
|
package/dist/bot/map.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
const PROVIDER_KINDS = { image: "photo", audio: "voice" };
|
|
2
|
-
const KINDS = { dialog: "dialog", chat: "group", channel: "channel" };
|
|
2
|
+
export const KINDS = { dialog: "dialog", chat: "group", channel: "channel" };
|
|
3
3
|
const iso = (milliseconds) => milliseconds === undefined || milliseconds === null ? null : new Date(Number(milliseconds)).toISOString();
|
|
4
4
|
const nameOf = (user) => user ? [user.first_name, user.last_name].filter(Boolean).join(" ") || null : null;
|
|
5
|
+
export const toPerson = (user) => ({
|
|
6
|
+
id: user.user_id,
|
|
7
|
+
name: nameOf(user),
|
|
8
|
+
username: user.username ?? null,
|
|
9
|
+
isBot: user.is_bot,
|
|
10
|
+
});
|
|
5
11
|
const attachmentOf = (attachment) => {
|
|
6
12
|
if (attachment.type === "inline_keyboard")
|
|
7
13
|
return undefined;
|
package/dist/bot/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/transport.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type RetryConfig, type SleepLike } from "@leemour/cli-core";
|
|
2
2
|
import type { ManifestOperation } from "@leemour/cli-core/codegen";
|
|
3
3
|
import { type FetchLike } from "@leemour/cli-core/http";
|
|
4
|
+
import { type DiagnosticEvent } from "../runs/events.js";
|
|
4
5
|
export declare const BOT_API_URL = "https://platform-api2.max.ru";
|
|
5
6
|
/**
|
|
6
7
|
* Adds the Минцифры root to this process's trusted roots, and nowhere else (`NEED-293`). Node
|
|
@@ -22,6 +23,9 @@ export interface TransportOptions {
|
|
|
22
23
|
sleep?: SleepLike;
|
|
23
24
|
random?: () => number;
|
|
24
25
|
signal?: AbortSignal;
|
|
26
|
+
/** `--trace` and the run log; one request and one response per HTTP attempt. */
|
|
27
|
+
events?: (event: DiagnosticEvent) => void;
|
|
28
|
+
now?: () => number;
|
|
25
29
|
}
|
|
26
30
|
/**
|
|
27
31
|
* The official Bot API over HTTP. Speaks for one token, writes nothing to stdout or stderr, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,wBAAwB,CAAA;AAErF,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,mBAAmB,CAAA;AAIxF,eAAO,MAAM,WAAW,iCAAiC,CAAA;AAQzD;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,SAU3B,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gFAAgF;IAChF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAuBD;;;GAGG;AACH,qBAAa,YAAY;;IAYvB,YAAY,OAAO,EAAE,gBAAgB,EAWpC;IAED,wFAAwF;IAClF,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAgChF;CA8HF;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,OAKxC,CAAA"}
|