@pachca/cli 2026.5.6 → 2026.6.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/CHANGELOG.md +12 -0
- package/README.md +2 -0
- package/dist/commands/bots/create.js +70 -0
- package/dist/commands/bots/get.js +33 -0
- package/dist/commands/bots/update.js +1 -1
- package/dist/commands/views/open.js +1 -1
- package/dist/data/alternatives.json +2 -0
- package/dist/data/changelog.json +40 -0
- package/dist/data/endpoints.json +1 -1
- package/dist/data/workflows.json +20 -0
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.6.0 (15 июня 2026)
|
|
4
|
+
|
|
5
|
+
- **Добавлено** (bots create): Новая команда — создание бота и получение его `access_token`
|
|
6
|
+
- **Добавлено** (bots get): Новая команда — получение параметров бота
|
|
7
|
+
- **Изменено** (bots update): Расширены поля редактирования бота: `name`, `nickname`, `events`, `trigger_on`, `commands`
|
|
8
|
+
- **Добавлено**: В сообщениях появилось поле `voice_content` и параметры файлов `duration_ms` / `waveform` для голосовых сообщений
|
|
9
|
+
- **Изменено**: Чище примеры: убраны опциональные флаги и поля, чьё значение равно дефолту схемы (`--no-skip-invite-mentions`, `--no-link-preview` и т.п.); кавычки в примерах ставятся только при наличии shell-метасимволов
|
|
10
|
+
|
|
11
|
+
## 2026.5.6 (21 мая 2026)
|
|
12
|
+
|
|
13
|
+
- **Изменено** (api): В выводе `pachca api <МЕТОД> <путь> --describe` у полей запроса и ответа появились примеры значений
|
|
14
|
+
|
|
3
15
|
## 2026.5.4 (20 мая 2026)
|
|
4
16
|
|
|
5
17
|
- **Добавлено** (threads list): Новая команда — список доступных тредов с фильтрами `--last-message-at-after` / `--last-message-at-before` и курсорной пагинацией
|
package/README.md
CHANGED
|
@@ -78,6 +78,8 @@ pachca guide # список всех сценариев
|
|
|
78
78
|
|
|
79
79
|
| Команда | Описание |
|
|
80
80
|
|---------|---------|
|
|
81
|
+
| `pachca bots create` | Создание бота |
|
|
82
|
+
| `pachca bots get` | Получение бота |
|
|
81
83
|
| `pachca bots update` | Редактирование бота |
|
|
82
84
|
| `pachca bots list-events` | История событий |
|
|
83
85
|
| `pachca bots remove-event` | Удаление события |
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Auto-generated from openapi.yaml — DO NOT EDIT
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
import * as clack from '@clack/prompts';
|
|
5
|
+
export default class BotsCreate extends BaseCommand {
|
|
6
|
+
static description = "Создание бота";
|
|
7
|
+
static examples = [
|
|
8
|
+
"Создать бота через API и получить токен:\n $ pachca bots create",
|
|
9
|
+
"Настроить бота с исходящим вебхуком:\n $ pachca bots create"
|
|
10
|
+
];
|
|
11
|
+
static scope = "bots:write";
|
|
12
|
+
static apiMethod = "POST";
|
|
13
|
+
static apiPath = "/bots";
|
|
14
|
+
static defaultColumns = ["id", "webhook", "access_token"];
|
|
15
|
+
static requiredFlags = ["webhook"];
|
|
16
|
+
static args = {};
|
|
17
|
+
static flags = {
|
|
18
|
+
...BaseCommand.baseFlags,
|
|
19
|
+
'webhook': Flags.string({
|
|
20
|
+
description: "Объект параметров вебхука бота",
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { args, flags } = await this.parse(BotsCreate);
|
|
25
|
+
this.parsedFlags = flags;
|
|
26
|
+
const missingRequired = [
|
|
27
|
+
{ flag: 'webhook', label: "Объект параметров вебхука бота", type: 'string' },
|
|
28
|
+
].filter((f) => flags[f.flag] === undefined || flags[f.flag] === null);
|
|
29
|
+
if (missingRequired.length > 0) {
|
|
30
|
+
if (this.isInteractive()) {
|
|
31
|
+
for (const field of missingRequired) {
|
|
32
|
+
const value = await clack.text({ message: field.label, validate: (v) => v.length === 0 ? 'Обязательное поле' : undefined });
|
|
33
|
+
if (clack.isCancel(value)) {
|
|
34
|
+
process.stderr.write('Отменено.\n');
|
|
35
|
+
this.exit(0);
|
|
36
|
+
}
|
|
37
|
+
if (field.type === 'integer') {
|
|
38
|
+
flags[field.flag] = Number.parseInt(value, 10);
|
|
39
|
+
}
|
|
40
|
+
else if (field.type === 'boolean') {
|
|
41
|
+
flags[field.flag] = value === 'true';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
flags[field.flag] = value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.validationError(missingRequired.map((f) => ({ message: `Обязательный флаг --${f.flag} не передан`, flag: f.flag })), { hint: "Обязательные: --webhook <string>. pachca introspect bots create" });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const body = { bot: {
|
|
53
|
+
webhook: flags['webhook'] ? this.parseJSON(flags['webhook'], 'webhook') : undefined,
|
|
54
|
+
} };
|
|
55
|
+
// Clean undefined fields
|
|
56
|
+
const inner = body['bot'];
|
|
57
|
+
for (const [k, v] of Object.entries(inner)) {
|
|
58
|
+
if (v === undefined)
|
|
59
|
+
delete inner[k];
|
|
60
|
+
}
|
|
61
|
+
const { data } = await this.apiRequest({
|
|
62
|
+
method: 'POST',
|
|
63
|
+
path: '/bots',
|
|
64
|
+
body,
|
|
65
|
+
});
|
|
66
|
+
const responseBody = data;
|
|
67
|
+
const result = responseBody.data ?? responseBody;
|
|
68
|
+
this.output(result);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Auto-generated from openapi.yaml — DO NOT EDIT
|
|
2
|
+
import { Args } from '@oclif/core';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
export default class BotsGet extends BaseCommand {
|
|
5
|
+
static description = "Получение бота";
|
|
6
|
+
static examples = [
|
|
7
|
+
"Обновить Webhook URL бота:\n $ pachca bots update"
|
|
8
|
+
];
|
|
9
|
+
static scope = "bots:read";
|
|
10
|
+
static apiMethod = "GET";
|
|
11
|
+
static apiPath = "/bots/{id}";
|
|
12
|
+
static defaultColumns = ["id", "webhook"];
|
|
13
|
+
static args = {
|
|
14
|
+
id: Args.integer({
|
|
15
|
+
description: "Идентификатор бота (pachca bots list)",
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...BaseCommand.baseFlags,
|
|
21
|
+
};
|
|
22
|
+
async run() {
|
|
23
|
+
const { args, flags } = await this.parse(BotsGet);
|
|
24
|
+
this.parsedFlags = flags;
|
|
25
|
+
const { data } = await this.apiRequest({
|
|
26
|
+
method: 'GET',
|
|
27
|
+
path: `/bots/${args.id}`,
|
|
28
|
+
});
|
|
29
|
+
const responseBody = data;
|
|
30
|
+
const result = responseBody.data ?? responseBody;
|
|
31
|
+
this.output(result);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -10,7 +10,7 @@ export default class BotsUpdate extends BaseCommand {
|
|
|
10
10
|
static scope = "bots:write";
|
|
11
11
|
static apiMethod = "PUT";
|
|
12
12
|
static apiPath = "/bots/{id}";
|
|
13
|
-
static defaultColumns = ["id"];
|
|
13
|
+
static defaultColumns = ["id", "webhook"];
|
|
14
14
|
static requiredFlags = ["webhook"];
|
|
15
15
|
static args = {
|
|
16
16
|
id: Args.integer({
|
|
@@ -20,7 +20,7 @@ export default class ViewsOpen extends BaseCommand {
|
|
|
20
20
|
description: "Заголовок представления (макс. 24 символов)",
|
|
21
21
|
}),
|
|
22
22
|
'close-text': Flags.string({
|
|
23
|
-
description: "Текст кнопки закрытия
|
|
23
|
+
description: "Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается. (макс. 24 символов)",
|
|
24
24
|
}),
|
|
25
25
|
'submit-text': Flags.string({
|
|
26
26
|
description: "Текст кнопки отправки формы (макс. 24 символов)",
|
package/dist/data/changelog.json
CHANGED
|
@@ -1,4 +1,44 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "2026.6.0",
|
|
4
|
+
"date": "15 июня 2026",
|
|
5
|
+
"changes": [
|
|
6
|
+
{
|
|
7
|
+
"type": "+",
|
|
8
|
+
"command": "bots create",
|
|
9
|
+
"description": "Новая команда — создание бота и получение его `access_token`"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "+",
|
|
13
|
+
"command": "bots get",
|
|
14
|
+
"description": "Новая команда — получение параметров бота"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "~",
|
|
18
|
+
"command": "bots update",
|
|
19
|
+
"description": "Расширены поля редактирования бота: `name`, `nickname`, `events`, `trigger_on`, `commands`"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"type": "+",
|
|
23
|
+
"description": "В сообщениях появилось поле `voice_content` и параметры файлов `duration_ms` / `waveform` для голосовых сообщений"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "~",
|
|
27
|
+
"description": "Чище примеры: убраны опциональные флаги и поля, чьё значение равно дефолту схемы (`--no-skip-invite-mentions`, `--no-link-preview` и т.п.); кавычки в примерах ставятся только при наличии shell-метасимволов"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"version": "2026.5.6",
|
|
33
|
+
"date": "21 мая 2026",
|
|
34
|
+
"changes": [
|
|
35
|
+
{
|
|
36
|
+
"type": "~",
|
|
37
|
+
"command": "api",
|
|
38
|
+
"description": "В выводе `pachca api <МЕТОД> <путь> --describe` у полей запроса и ответа появились примеры значений"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
2
42
|
{
|
|
3
43
|
"version": "2026.5.4",
|
|
4
44
|
"date": "20 мая 2026",
|