@pachca/cli 2026.10.2 → 2026.10.3
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 +16 -0
- package/README.md +24 -24
- package/README.template.md +14 -23
- package/dist/base-command.js +1 -1
- package/dist/client.js +56 -32
- package/dist/commands/api.js +1 -1
- package/dist/commands/auth/logout.js +23 -12
- package/dist/commands/bots/create-token.js +0 -3
- package/dist/commands/bots/create.js +0 -4
- package/dist/commands/bots/delete.js +0 -3
- package/dist/commands/bots/get-stream.js +23 -0
- package/dist/commands/bots/list-company.js +0 -3
- package/dist/commands/bots/list-events.js +0 -3
- package/dist/commands/bots/list-scopes.js +0 -3
- package/dist/commands/bots/list.js +0 -3
- package/dist/commands/bots/recreate-token-self.js +0 -3
- package/dist/commands/bots/recreate-token.js +0 -3
- package/dist/commands/bots/reissue-token.js +0 -3
- package/dist/commands/bots/remove-event.js +0 -3
- package/dist/commands/bots/update-webhook.js +0 -3
- package/dist/commands/bots/update.js +0 -5
- package/dist/commands/chats/archive.js +0 -4
- package/dist/commands/chats/create.js +3 -6
- package/dist/commands/chats/download-export.js +0 -3
- package/dist/commands/chats/list-company.js +0 -3
- package/dist/commands/chats/list.js +1 -6
- package/dist/commands/chats/remove-avatar.js +0 -3
- package/dist/commands/chats/request-export.js +0 -3
- package/dist/commands/chats/unarchive.js +0 -3
- package/dist/commands/chats/update-avatar.js +0 -3
- package/dist/commands/chats/update.js +0 -3
- package/dist/commands/custom-properties/list.js +0 -3
- package/dist/commands/drafts/create.js +1 -4
- package/dist/commands/drafts/delete.js +0 -3
- package/dist/commands/drafts/update.js +1 -1
- package/dist/commands/files/uploads.js +0 -3
- package/dist/commands/group-tags/create.js +0 -3
- package/dist/commands/group-tags/list-users.js +0 -3
- package/dist/commands/group-tags/list.js +0 -3
- package/dist/commands/important-messages/create.js +64 -0
- package/dist/commands/important-messages/delete.js +42 -0
- package/dist/commands/important-messages/list.js +89 -0
- package/dist/commands/members/add.js +0 -5
- package/dist/commands/members/leave.js +0 -3
- package/dist/commands/members/list.js +0 -4
- package/dist/commands/members/remove.js +0 -3
- package/dist/commands/members/update.js +0 -3
- package/dist/commands/messages/create.js +3 -8
- package/dist/commands/messages/delete.js +0 -3
- package/dist/commands/messages/get.js +0 -5
- package/dist/commands/messages/list.js +1 -5
- package/dist/commands/messages/pin.js +0 -3
- package/dist/commands/messages/unfurl.js +0 -3
- package/dist/commands/messages/unpin.js +0 -3
- package/dist/commands/messages/update.js +2 -7
- package/dist/commands/oauth/token-info.js +0 -3
- package/dist/commands/profile/delete-avatar.js +0 -3
- package/dist/commands/profile/delete-status.js +0 -3
- package/dist/commands/profile/get.js +0 -4
- package/dist/commands/profile/update-avatar.js +0 -3
- package/dist/commands/profile/update-status.js +1 -4
- package/dist/commands/reactions/add.js +3 -6
- package/dist/commands/reactions/remove.js +3 -6
- package/dist/commands/read-member/list-readers.js +0 -3
- package/dist/commands/search/list-chats.js +0 -5
- package/dist/commands/search/list-messages.js +0 -3
- package/dist/commands/search/list-users.js +0 -5
- package/dist/commands/security/list.js +0 -5
- package/dist/commands/tasks/create.js +1 -6
- package/dist/commands/tasks/delete.js +0 -3
- package/dist/commands/tasks/get.js +0 -3
- package/dist/commands/tasks/list.js +0 -5
- package/dist/commands/tasks/update.js +2 -6
- package/dist/commands/threads/add.js +0 -4
- package/dist/commands/threads/list.js +0 -4
- package/dist/commands/users/create.js +0 -5
- package/dist/commands/users/delete.js +0 -3
- package/dist/commands/users/get-status.js +0 -3
- package/dist/commands/users/get.js +0 -3
- package/dist/commands/users/list.js +0 -5
- package/dist/commands/users/remove-avatar.js +0 -3
- package/dist/commands/users/remove-status.js +0 -3
- package/dist/commands/users/update-avatar.js +0 -3
- package/dist/commands/users/update-status.js +1 -4
- package/dist/commands/users/update.js +4 -4
- package/dist/commands/views/open.js +0 -5
- package/dist/commands/views/submit-response.js +0 -3
- package/dist/data/alternatives.json +5 -9
- package/dist/data/changelog.json +66 -0
- package/dist/data/endpoints.json +1 -1
- package/dist/help.js +0 -1
- package/dist/hooks/command-not-found.js +0 -1
- package/dist/hooks/init.js +5 -1
- package/dist/oauth.js +9 -4
- package/dist/token-refresh.js +61 -14
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
- package/dist/commands/guide.js +0 -90
- package/dist/data/workflows.json +0 -1058
|
@@ -4,10 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class ChatsCreate extends BaseCommand {
|
|
6
6
|
static description = "Новый чат";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Создать канал и пригласить участников — Создай канал с участниками:\n $ pachca chats create",
|
|
9
|
-
"Создать проектную беседу из шаблона — Создай беседу с участниками из тега:\n $ pachca chats create"
|
|
10
|
-
];
|
|
11
7
|
static scope = "chats:create";
|
|
12
8
|
static apiMethod = "POST";
|
|
13
9
|
static apiPath = "/chats";
|
|
@@ -17,7 +13,7 @@ export default class ChatsCreate extends BaseCommand {
|
|
|
17
13
|
static flags = {
|
|
18
14
|
...BaseCommand.baseFlags,
|
|
19
15
|
'name': Flags.string({
|
|
20
|
-
description: "
|
|
16
|
+
description: "Название беседы или канала. Пустое название или название из одних пробелов отвечает `422` с кодом `blank`. (макс. 255 символов)",
|
|
21
17
|
}),
|
|
22
18
|
'member-ids': Flags.string({
|
|
23
19
|
description: "Массив идентификаторов пользователей, которые станут участниками",
|
|
@@ -38,7 +34,7 @@ export default class ChatsCreate extends BaseCommand {
|
|
|
38
34
|
const { args, flags } = await this.parse(ChatsCreate);
|
|
39
35
|
this.parsedFlags = flags;
|
|
40
36
|
const missingRequired = [
|
|
41
|
-
{ flag: 'name', label: "
|
|
37
|
+
{ flag: 'name', label: "Название беседы или канала. Пустое название или название из одних пробелов отвечает `422` с кодом `blank`.", type: 'string' },
|
|
42
38
|
].filter((f) => flags[f.flag] === undefined || flags[f.flag] === null);
|
|
43
39
|
if (missingRequired.length > 0) {
|
|
44
40
|
if (this.isInteractive()) {
|
|
@@ -92,5 +88,6 @@ export default class ChatsCreate extends BaseCommand {
|
|
|
92
88
|
const result = responseBody.data ?? responseBody;
|
|
93
89
|
this.output(result);
|
|
94
90
|
this.warnMetaList(responseBody.meta, "not_found_member_ids", "Не удалось добавить в чат", "Таких сотрудников нет в пространстве, либо они приостановлены или удалены.");
|
|
91
|
+
this.warnMetaList(responseBody.meta, "not_found_group_tag_ids", "Не удалось подключить теги", "Таких тегов нет в пространстве.");
|
|
95
92
|
}
|
|
96
93
|
}
|
|
@@ -5,9 +5,6 @@ import { downloadFile } from '../../client.js';
|
|
|
5
5
|
import { formatSize } from '../../utils.js';
|
|
6
6
|
export default class ChatsDownloadExport extends BaseCommand {
|
|
7
7
|
static description = "Скачать архив экспорта";
|
|
8
|
-
static examples = [
|
|
9
|
-
"Экспорт истории чата — Скачай файл экспорта:\n $ pachca chats download-export"
|
|
10
|
-
];
|
|
11
8
|
static hiddenAliases = ["common:get-exports"];
|
|
12
9
|
static scope = "chat_exports:read";
|
|
13
10
|
static plan = "corporation";
|
|
@@ -3,9 +3,6 @@ import { Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class ChatsListCompany extends BaseCommand {
|
|
5
5
|
static description = "Список чатов пространства";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Выгрузить все чаты пространства, включая закрытые — Получи беседы и каналы всего пространства, включая закрытые, где владелец токена не состоит:\n $ pachca chats list-company"
|
|
8
|
-
];
|
|
9
6
|
static scope = "company_chats:read";
|
|
10
7
|
static plan = "corporation";
|
|
11
8
|
static apiMethod = "GET";
|
|
@@ -3,11 +3,6 @@ import { Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class ChatsList extends BaseCommand {
|
|
5
5
|
static description = "Список чатов";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Найти активные чаты за период — Получи чаты с активностью после указанной даты:\n $ pachca chats list",
|
|
8
|
-
"Найти и заархивировать неактивные чаты — Получи чаты без активности с нужной даты:\n $ pachca chats list",
|
|
9
|
-
"Выгрузить все чаты пространства, включая закрытые — Если метод ответил `403` — у токена нет скоупа `company_chats:read`, либо владелец токена не владелец пространства, либо у пространства нет тарифа «Корпорация». Тогда возьми открытые чаты обычным списком:\n $ pachca chats list"
|
|
10
|
-
];
|
|
11
6
|
static scope = "chats:read";
|
|
12
7
|
static apiMethod = "GET";
|
|
13
8
|
static apiPath = "/chats";
|
|
@@ -21,7 +16,7 @@ export default class ChatsList extends BaseCommand {
|
|
|
21
16
|
default: "id",
|
|
22
17
|
}),
|
|
23
18
|
'order': Flags.string({
|
|
24
|
-
description: "Направление
|
|
19
|
+
description: "Направление сортировки. Применяется вместе с `sort`, например `sort=last_message_at&order=desc`. Без `sort` чаты идут по убыванию `id` при любом `order`.",
|
|
25
20
|
options: ["asc", "desc"],
|
|
26
21
|
default: "desc",
|
|
27
22
|
}),
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class ChatsRemoveAvatar extends BaseCommand {
|
|
6
6
|
static description = "Удаление аватара чата";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Поставить или убрать аватар чата — Чтобы убрать аватар, удали его:\n $ pachca chats remove-avatar"
|
|
9
|
-
];
|
|
10
7
|
static scope = "chats:update";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/chats/{id}/avatar";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class ChatsRequestExport extends BaseCommand {
|
|
6
6
|
static description = "Экспорт сообщений";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Экспорт истории чата — Запроси экспорт и возьми номер выгрузки из `data.id`:\n $ pachca chats request-export"
|
|
9
|
-
];
|
|
10
7
|
static hiddenAliases = ["common:request-export"];
|
|
11
8
|
static scope = "chat_exports:write";
|
|
12
9
|
static plan = "corporation";
|
|
@@ -3,9 +3,6 @@ import { Args } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class ChatsUnarchive extends BaseCommand {
|
|
5
5
|
static description = "Разархивация чата";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Архивация и управление чатом — Разархивировать чат:\n $ pachca chats unarchive"
|
|
8
|
-
];
|
|
9
6
|
static scope = "chats:archive";
|
|
10
7
|
static apiMethod = "PUT";
|
|
11
8
|
static apiPath = "/chats/{id}/unarchive";
|
|
@@ -5,9 +5,6 @@ import * as fs from 'node:fs';
|
|
|
5
5
|
import * as path from 'node:path';
|
|
6
6
|
export default class ChatsUpdateAvatar extends BaseCommand {
|
|
7
7
|
static description = "Загрузка аватара чата";
|
|
8
|
-
static examples = [
|
|
9
|
-
"Поставить или убрать аватар чата — Загрузи аватар беседы или канала:\n $ pachca chats update-avatar"
|
|
10
|
-
];
|
|
11
8
|
static scope = "chats:update";
|
|
12
9
|
static apiMethod = "PUT";
|
|
13
10
|
static apiPath = "/chats/{id}/avatar";
|
|
@@ -3,9 +3,6 @@ import { Args, Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class ChatsUpdate extends BaseCommand {
|
|
5
5
|
static description = "Редактирование чата";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Переименовать или обновить чат — Обнови чат:\n $ pachca chats update"
|
|
8
|
-
];
|
|
9
6
|
static scope = "chats:update";
|
|
10
7
|
static apiMethod = "PUT";
|
|
11
8
|
static apiPath = "/chats/{id}";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class CustomPropertiesList extends BaseCommand {
|
|
6
6
|
static description = "Список дополнительных полей";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Получить кастомные поля профиля — Получи список дополнительных полей для сотрудников:\n $ pachca custom-properties list"
|
|
9
|
-
];
|
|
10
7
|
static hiddenAliases = ["common:custom-properties"];
|
|
11
8
|
static scope = "custom_properties:read";
|
|
12
9
|
static apiMethod = "GET";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class DraftsCreate extends BaseCommand {
|
|
6
6
|
static description = "Новый черновик";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Отправить сообщение позже или по расписанию — Создай отложенное сообщение: `schedule.start_date` — когда отправить, `schedule.repetition.interval` — как повторять (`once`, если один раз):\n $ pachca drafts create"
|
|
9
|
-
];
|
|
10
7
|
static scope = "drafts:write";
|
|
11
8
|
static apiMethod = "POST";
|
|
12
9
|
static apiPath = "/drafts";
|
|
@@ -22,7 +19,7 @@ export default class DraftsCreate extends BaseCommand {
|
|
|
22
19
|
description: "Идентификатор того, что названо в `entity_type`: беседы или канала, треда либо сотрудника (pachca chats list | pachca users list)",
|
|
23
20
|
}),
|
|
24
21
|
'content': Flags.string({
|
|
25
|
-
description: "Текст черновика. Можно не передавать, если есть вложения, но пустым черновик быть не может. До 40 000 байт в UTF-8
|
|
22
|
+
description: "Текст черновика. Можно не передавать, если есть вложения, но пустым черновик быть не может. До 40 000 байт в UTF-8.",
|
|
26
23
|
}),
|
|
27
24
|
'parent-message-id': Flags.integer({
|
|
28
25
|
description: "Идентификатор сообщения, ответом на которое уйдёт черновик. Сообщение должно быть в том же чате.",
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class DraftsDelete extends BaseCommand {
|
|
6
6
|
static description = "Удаление черновика";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Отправить сообщение позже или по расписанию — Чтобы отменить отправку — удали отложенное сообщение:\n $ pachca drafts delete"
|
|
9
|
-
];
|
|
10
7
|
static scope = "drafts:write";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/drafts/{id}";
|
|
@@ -16,7 +16,7 @@ export default class DraftsUpdate extends BaseCommand {
|
|
|
16
16
|
static flags = {
|
|
17
17
|
...BaseCommand.baseFlags,
|
|
18
18
|
'content': Flags.string({
|
|
19
|
-
description: "Текст черновика. До 40 000 байт в UTF-8
|
|
19
|
+
description: "Текст черновика. До 40 000 байт в UTF-8.",
|
|
20
20
|
}),
|
|
21
21
|
'parent-message-id': Flags.integer({
|
|
22
22
|
description: "Идентификатор сообщения, ответом на которое уйдёт черновик. `null` снимает ответ.",
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command.js';
|
|
2
2
|
export default class FilesUploads extends BaseCommand {
|
|
3
3
|
static description = "Получение подписи, ключа и других параметров";
|
|
4
|
-
static examples = [
|
|
5
|
-
"Изменить вложения сообщения — Если нужно добавить новый файл — загрузи его:\n $ pachca files uploads"
|
|
6
|
-
];
|
|
7
4
|
static hiddenAliases = ["common:uploads"];
|
|
8
5
|
static scope = "uploads:write";
|
|
9
6
|
static apiMethod = "POST";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class GroupTagsCreate extends BaseCommand {
|
|
6
6
|
static description = "Новый тег";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Массовое создание сотрудников с тегами — Создай тег (если нужен):\n $ pachca group-tags create"
|
|
9
|
-
];
|
|
10
7
|
static scope = "group_tags:write";
|
|
11
8
|
static apiMethod = "POST";
|
|
12
9
|
static apiPath = "/group_tags";
|
|
@@ -3,9 +3,6 @@ import { Args, Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class GroupTagsListUsers extends BaseCommand {
|
|
5
5
|
static description = "Список сотрудников тега";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Получить всех сотрудников тега/департамента — Получи всех участников тега:\n $ pachca group-tags list-users"
|
|
8
|
-
];
|
|
9
6
|
static scope = "group_tags:read";
|
|
10
7
|
static apiMethod = "GET";
|
|
11
8
|
static apiPath = "/group_tags/{id}/users";
|
|
@@ -3,9 +3,6 @@ import { Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class GroupTagsList extends BaseCommand {
|
|
5
5
|
static description = "Список тегов";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Получить всех сотрудников тега/департамента — Найди тег по названию, возьми `id`:\n $ pachca group-tags list"
|
|
8
|
-
];
|
|
9
6
|
static scope = "group_tags:read";
|
|
10
7
|
static apiMethod = "GET";
|
|
11
8
|
static apiPath = "/group_tags";
|
|
@@ -0,0 +1,64 @@
|
|
|
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 ImportantMessagesCreate extends BaseCommand {
|
|
6
|
+
static description = "Добавление сообщения в важные";
|
|
7
|
+
static scope = "important_messages:write";
|
|
8
|
+
static apiMethod = "POST";
|
|
9
|
+
static apiPath = "/important_messages";
|
|
10
|
+
static requiredFlags = ["message-id"];
|
|
11
|
+
static args = {};
|
|
12
|
+
static flags = {
|
|
13
|
+
...BaseCommand.baseFlags,
|
|
14
|
+
'message-id': Flags.integer({
|
|
15
|
+
description: "Идентификатор сообщения (pachca messages list)",
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { args, flags } = await this.parse(ImportantMessagesCreate);
|
|
20
|
+
this.parsedFlags = flags;
|
|
21
|
+
const missingRequired = [
|
|
22
|
+
{ flag: 'message-id', label: "Идентификатор сообщения", type: 'integer' },
|
|
23
|
+
].filter((f) => flags[f.flag] === undefined || flags[f.flag] === null);
|
|
24
|
+
if (missingRequired.length > 0) {
|
|
25
|
+
if (this.isInteractive()) {
|
|
26
|
+
for (const field of missingRequired) {
|
|
27
|
+
const value = await clack.text({ message: field.label, validate: (v) => v.length === 0 ? 'Обязательное поле' : undefined });
|
|
28
|
+
if (clack.isCancel(value)) {
|
|
29
|
+
process.stderr.write('Отменено.\n');
|
|
30
|
+
this.exit(0);
|
|
31
|
+
}
|
|
32
|
+
if (field.type === 'integer') {
|
|
33
|
+
flags[field.flag] = Number.parseInt(value, 10);
|
|
34
|
+
}
|
|
35
|
+
else if (field.type === 'boolean') {
|
|
36
|
+
flags[field.flag] = value === 'true';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
flags[field.flag] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.validationError(missingRequired.map((f) => ({ message: `Обязательный флаг --${f.flag} не передан`, flag: f.flag })), { hint: "Обязательные: --message-id <integer>. pachca introspect important-messages create" });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const body = {
|
|
48
|
+
message_id: flags['message-id'],
|
|
49
|
+
};
|
|
50
|
+
// Clean undefined fields
|
|
51
|
+
for (const [k, v] of Object.entries(body)) {
|
|
52
|
+
if (v === undefined)
|
|
53
|
+
delete body[k];
|
|
54
|
+
}
|
|
55
|
+
const { data } = await this.apiRequest({
|
|
56
|
+
method: 'POST',
|
|
57
|
+
path: '/important_messages',
|
|
58
|
+
body,
|
|
59
|
+
});
|
|
60
|
+
const responseBody = (data ?? {});
|
|
61
|
+
const result = responseBody.data ?? responseBody;
|
|
62
|
+
this.output(result);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Auto-generated from openapi.yaml — DO NOT EDIT
|
|
2
|
+
import { Args, Flags } from '@oclif/core';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
import * as clack from '@clack/prompts';
|
|
5
|
+
export default class ImportantMessagesDelete extends BaseCommand {
|
|
6
|
+
static description = "Удаление сообщения из важных";
|
|
7
|
+
static scope = "important_messages:write";
|
|
8
|
+
static apiMethod = "DELETE";
|
|
9
|
+
static apiPath = "/important_messages/{id}";
|
|
10
|
+
static args = {
|
|
11
|
+
id: Args.integer({
|
|
12
|
+
description: "Идентификатор сообщения",
|
|
13
|
+
required: true,
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
static flags = {
|
|
17
|
+
...BaseCommand.baseFlags,
|
|
18
|
+
force: Flags.boolean({
|
|
19
|
+
description: 'Пропустить подтверждение',
|
|
20
|
+
default: false,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { args, flags } = await this.parse(ImportantMessagesDelete);
|
|
25
|
+
this.parsedFlags = flags;
|
|
26
|
+
if (!flags.force) {
|
|
27
|
+
if (!this.isInteractive()) {
|
|
28
|
+
this.validationError([{ message: 'Деструктивная операция требует флага --force', flag: 'force' }], { type: 'PACHCA_DESTRUCTIVE_OP_ERROR', hint: "pachca important-messages delete <id> --force" });
|
|
29
|
+
}
|
|
30
|
+
const confirm = await clack.confirm({ message: 'Вы уверены?' });
|
|
31
|
+
if (clack.isCancel(confirm) || !confirm) {
|
|
32
|
+
process.stderr.write('Отменено.\n');
|
|
33
|
+
this.exit(0);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const { data } = await this.apiRequest({
|
|
37
|
+
method: 'DELETE',
|
|
38
|
+
path: `/important_messages/${args.id}`,
|
|
39
|
+
});
|
|
40
|
+
this.success('Удалено');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Auto-generated from openapi.yaml — DO NOT EDIT
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { BaseCommand } from '../../base-command.js';
|
|
4
|
+
export default class ImportantMessagesList extends BaseCommand {
|
|
5
|
+
static description = "Список важных сообщений";
|
|
6
|
+
static scope = "important_messages:read";
|
|
7
|
+
static apiMethod = "GET";
|
|
8
|
+
static apiPath = "/important_messages";
|
|
9
|
+
static defaultColumns = ["id", "content", "created_at", "entity_type", "entity_id"];
|
|
10
|
+
static args = {};
|
|
11
|
+
static flags = {
|
|
12
|
+
...BaseCommand.baseFlags,
|
|
13
|
+
limit: Flags.integer({
|
|
14
|
+
description: 'Количество результатов на страницу',
|
|
15
|
+
}),
|
|
16
|
+
cursor: Flags.string({
|
|
17
|
+
description: 'Курсор для следующей страницы',
|
|
18
|
+
}),
|
|
19
|
+
all: Flags.boolean({
|
|
20
|
+
description: 'Загрузить все страницы автоматически',
|
|
21
|
+
default: false,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
async run() {
|
|
25
|
+
const { args, flags } = await this.parse(ImportantMessagesList);
|
|
26
|
+
this.parsedFlags = flags;
|
|
27
|
+
if (flags.all) {
|
|
28
|
+
// Auto-pagination
|
|
29
|
+
const allData = [];
|
|
30
|
+
let nextCursor = undefined;
|
|
31
|
+
let pages = 0;
|
|
32
|
+
const seenCursors = new Set();
|
|
33
|
+
while (pages < 500) {
|
|
34
|
+
const query = {
|
|
35
|
+
limit: flags.limit,
|
|
36
|
+
cursor: nextCursor,
|
|
37
|
+
};
|
|
38
|
+
const response = await this.apiRequest({ method: 'GET', path: '/important_messages', query });
|
|
39
|
+
const body = response.data;
|
|
40
|
+
const items = body.data;
|
|
41
|
+
if (items)
|
|
42
|
+
allData.push(...items);
|
|
43
|
+
const meta = body.meta;
|
|
44
|
+
const paginate = meta?.paginate;
|
|
45
|
+
nextCursor = paginate?.next_page;
|
|
46
|
+
pages++;
|
|
47
|
+
// Условие конца: списочные методы и /users?query= — has_next === false; методы поиска (без has_next) — пустой data
|
|
48
|
+
const hasNext = paginate?.has_next;
|
|
49
|
+
if (typeof hasNext === 'boolean') {
|
|
50
|
+
if (!hasNext)
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
else if (!items || items.length === 0) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
if (process.stderr.isTTY) {
|
|
57
|
+
const total = paginate?.total;
|
|
58
|
+
const progress = total ? `${allData.length} / ${total}` : String(allData.length);
|
|
59
|
+
process.stderr.write(`\r Загружено: ${progress}...`);
|
|
60
|
+
}
|
|
61
|
+
if (!nextCursor)
|
|
62
|
+
break;
|
|
63
|
+
if (seenCursors.has(nextCursor)) {
|
|
64
|
+
process.stderr.write('\n⚠ Обнаружен цикл пагинации, остановка.\n');
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
seenCursors.add(nextCursor);
|
|
68
|
+
}
|
|
69
|
+
if (pages >= 500) {
|
|
70
|
+
process.stderr.write('\n⚠ Достигнут лимит 500 страниц.\n');
|
|
71
|
+
}
|
|
72
|
+
if (process.stderr.isTTY)
|
|
73
|
+
process.stderr.write('\n');
|
|
74
|
+
this.output(allData);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const { data } = await this.apiRequest({
|
|
78
|
+
method: 'GET',
|
|
79
|
+
path: '/important_messages',
|
|
80
|
+
query: {
|
|
81
|
+
limit: flags.limit,
|
|
82
|
+
cursor: flags.cursor,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
const responseBody = (data ?? {});
|
|
86
|
+
const items = responseBody.data ?? responseBody;
|
|
87
|
+
this.output(items);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -4,11 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MembersAdd extends BaseCommand {
|
|
6
6
|
static description = "Добавление участников";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Подписаться на тред сообщения — Добавь бота в участники чата треда:\n $ pachca members add",
|
|
9
|
-
"Создать канал и пригласить участников — Или добавь участников позже:\n $ pachca members add",
|
|
10
|
-
"Онбординг нового сотрудника — Добавь в нужные каналы:\n $ pachca members add"
|
|
11
|
-
];
|
|
12
7
|
static scope = "chat_members:write";
|
|
13
8
|
static apiMethod = "POST";
|
|
14
9
|
static apiPath = "/chats/{id}/members";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MembersLeave extends BaseCommand {
|
|
6
6
|
static description = "Выход из чата";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Архивация и управление чатом — Покинуть чат:\n $ pachca members leave"
|
|
9
|
-
];
|
|
10
7
|
static scope = "chats:leave";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/chats/{id}/leave";
|
|
@@ -3,10 +3,6 @@ import { Args, Flags } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class MembersList extends BaseCommand {
|
|
5
5
|
static description = "Список участников чата";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Упомянуть пользователя — Ищи среди участников целевого чата:\n $ pachca members list",
|
|
8
|
-
"Упомянуть пользователя — Если пишешь в тред: также проверь участников родительского чата:\n $ pachca members list"
|
|
9
|
-
];
|
|
10
6
|
static scope = "chat_members:read";
|
|
11
7
|
static apiMethod = "GET";
|
|
12
8
|
static apiPath = "/chats/{id}/members";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MembersRemove extends BaseCommand {
|
|
6
6
|
static description = "Исключение участника";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Архивация и управление чатом — Удалить участника:\n $ pachca members remove"
|
|
9
|
-
];
|
|
10
7
|
static scope = "chat_members:write";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/chats/{id}/members/{user_id}";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MembersUpdate extends BaseCommand {
|
|
6
6
|
static description = "Редактирование роли участника";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Архивация и управление чатом — Изменить роль участника:\n $ pachca members update"
|
|
9
|
-
];
|
|
10
7
|
static scope = "chat_members:write";
|
|
11
8
|
static apiMethod = "PUT";
|
|
12
9
|
static apiPath = "/chats/{id}/members/{user_id}";
|
|
@@ -4,11 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MessagesCreate extends BaseCommand {
|
|
6
6
|
static description = "Новое сообщение";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Найти чат по имени и отправить сообщение — Отправь сообщение в найденный чат:\n $ pachca messages create",
|
|
9
|
-
"Отправить сообщение в канал или беседу (если chat_id известен) — Отправь сообщение в чат:\n $ pachca messages create",
|
|
10
|
-
"Отправить личное сообщение пользователю — Отправь личное сообщение:\n $ pachca messages create"
|
|
11
|
-
];
|
|
12
7
|
static scope = "messages:create";
|
|
13
8
|
static apiMethod = "POST";
|
|
14
9
|
static apiPath = "/messages";
|
|
@@ -24,13 +19,13 @@ export default class MessagesCreate extends BaseCommand {
|
|
|
24
19
|
description: "Идентификатор того, что названо в `entity_type`: беседы или канала, треда либо пользователя. У треда их два: `id` треда указывают с `entity_type: \"thread\"`, а его `chat_id` — с `discussion`, как у любого чата. (pachca chats list | pachca users list)",
|
|
25
20
|
}),
|
|
26
21
|
'content': Flags.string({
|
|
27
|
-
description: "Текст сообщения. Обязателен, если к сообщению не приложены файлы. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). `@all` упоминает всех участников чата, `@here` — тех, кто сейчас в сети, а `@` с названием тега без пробелов — сотрудников этого тега. Имя без `@` и упоминание внутри строчного кода или блока кода упоминанием не считаются. У мульти-гостя `<@user_id>` недоступного ему сотрудника остаётся в тексте как есть. До 40 000 байт в UTF-8, для кириллицы это около 20 000 символов.
|
|
22
|
+
description: "Текст сообщения. Обязателен, если к сообщению не приложены файлы. Поддерживает упоминания: `@nickname` или `<@user_id>` (будет автоматически преобразовано в `@nickname`). `@all` упоминает всех участников чата, `@here` — тех, кто сейчас в сети, а `@` с названием тега без пробелов — сотрудников этого тега. Имя без `@` и упоминание внутри строчного кода или блока кода упоминанием не считаются. У мульти-гостя `<@user_id>` недоступного ему сотрудника остаётся в тексте как есть. До 40 000 байт в UTF-8, для кириллицы это около 20 000 символов. Сообщение уходит под именем владельца токена, у бота — с бейджем «Бот».",
|
|
28
23
|
}),
|
|
29
24
|
'files': Flags.string({
|
|
30
25
|
description: "Прикрепляемые файлы",
|
|
31
26
|
}),
|
|
32
27
|
'buttons': Flags.string({
|
|
33
|
-
description: "Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Кнопки показываются под
|
|
28
|
+
description: "Массив строк, каждая из которых представлена массивом кнопок. Максимум 100 кнопок у сообщения, до 8 кнопок в строке. Кнопки показываются под текстом. Кнопка с `url` ведёт по ссылке, кто бы ни отправил сообщение, и события не создаёт. Кнопка с `data` работает в сообщении бота: нажатие на неё приходит событием `button_click` тому боту, который отправил сообщение, а вместе с ним `trigger_id` — на открытие формы по нему есть 3 секунды, метод [Открытие представления](POST /views/open). Подробности — в разделе [Кнопки](https://dev.pachca.com/guides/buttons).",
|
|
34
29
|
}),
|
|
35
30
|
'parent-message-id': Flags.integer({
|
|
36
31
|
description: "Идентификатор сообщения, на которое вы отвечаете с цитатой. Ответить можно на сообщение в любом чате, в том числе в треде: ответ отправляют в тот же чат или тред, где лежит это сообщение, иначе запрос вернёт ошибку `422`. Чтобы написать в тред под сообщением, укажите `entity_type: \"thread\"` и `id` треда в `entity_id`.",
|
|
@@ -42,7 +37,7 @@ export default class MessagesCreate extends BaseCommand {
|
|
|
42
37
|
description: "Полное специальное имя отправителя для этого сообщения. Вместе с `display_avatar_url` бот подписывает сообщение чужим именем и аватаром, и только это сообщение. Бейдж «Бот» остаётся, а в профиле отправителя видно настоящего бота. Так показывают автора из другой системы, когда переносят в Пачку чужую переписку. С личным токеном поле недоступно, ответ `403`. Подробности — в разделе [Боты](https://dev.pachca.com/guides/bots/overview). (макс. 255 символов)",
|
|
43
38
|
}),
|
|
44
39
|
'skip-invite-mentions': Flags.boolean({
|
|
45
|
-
description: "Пропуск добавления упомянутых сотрудников в тред. В треде упоминание работает ещё и как приглашение: упомянутого сотрудника, которого в треде нет, Пачка туда добавляет, и он получает доступ к треду и родительскому сообщению. В беседе и канале упоминание никого не добавляет, и этот параметр там ничего не меняет.",
|
|
40
|
+
description: "Пропуск добавления упомянутых сотрудников в тред. В треде упоминание работает ещё и как приглашение: упомянутого сотрудника, которого в треде нет, Пачка туда добавляет, и он получает доступ к треду и родительскому сообщению. Если в пространстве включена настройка «Использовать сквозные треды» (так по умолчанию), упоминание добавляет и сотрудника не из родительского чата, а с `true` в этом поле упоминание никого не добавляет. Упоминание от гостя или мульти-гостя при этом добавляет только тех, с кем у автора есть общий чат. Если настройка выключена, упоминание добавляет только участников родительского чата, и это поле ничего не меняет. В беседе и канале упоминание никого не добавляет, и этот параметр там ничего не меняет.",
|
|
46
41
|
allowNo: true,
|
|
47
42
|
}),
|
|
48
43
|
'link-preview': Flags.boolean({
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MessagesDelete extends BaseCommand {
|
|
6
6
|
static description = "Удаление сообщения";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Удалить сообщение — Удали сообщение:\n $ pachca messages delete"
|
|
9
|
-
];
|
|
10
7
|
static scope = "messages:delete";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/messages/{id}";
|
|
@@ -3,11 +3,6 @@ import { Args } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class MessagesGet extends BaseCommand {
|
|
5
5
|
static description = "Информация о сообщении";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Получить вложения из сообщения — Получи сообщение — в `files[]` каждый объект содержит `url`, `name`, `file_type`, `size`:\n $ pachca messages get",
|
|
8
|
-
"Изменить вложения сообщения — Получи текущие вложения из `files[]`:\n $ pachca messages get",
|
|
9
|
-
"Обработать входящий вебхук-событие — Для полной информации запроси сообщение — особенно для вложений (`files[]`):\n $ pachca messages get"
|
|
10
|
-
];
|
|
11
6
|
static scope = "messages:read";
|
|
12
7
|
static apiMethod = "GET";
|
|
13
8
|
static apiPath = "/messages/{id}";
|
|
@@ -4,10 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MessagesList extends BaseCommand {
|
|
6
6
|
static description = "Список сообщений чата";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Получить историю сообщений чата — Получи сообщения чата с пагинацией:\n $ pachca messages list",
|
|
9
|
-
"Получить список активных тредов за период — Для каждого треда возьми `chat_id` и подтяни сообщения:\n $ pachca messages list"
|
|
10
|
-
];
|
|
11
7
|
static scope = "messages:read";
|
|
12
8
|
static apiMethod = "GET";
|
|
13
9
|
static apiPath = "/messages";
|
|
@@ -30,7 +26,7 @@ export default class MessagesList extends BaseCommand {
|
|
|
30
26
|
default: "id",
|
|
31
27
|
}),
|
|
32
28
|
'order': Flags.string({
|
|
33
|
-
description: "Направление
|
|
29
|
+
description: "Направление сортировки. Применяется вместе с `sort`: сообщения от старых к новым дают `sort=id` и `order=asc`. Без `sort` сообщения идут от новых к старым при любом `order`.",
|
|
34
30
|
options: ["asc", "desc"],
|
|
35
31
|
default: "desc",
|
|
36
32
|
}),
|
|
@@ -3,9 +3,6 @@ import { Args } from '@oclif/core';
|
|
|
3
3
|
import { BaseCommand } from '../../base-command.js';
|
|
4
4
|
export default class MessagesPin extends BaseCommand {
|
|
5
5
|
static description = "Закрепление сообщения";
|
|
6
|
-
static examples = [
|
|
7
|
-
"Закрепить/открепить сообщение — Закрепить сообщение:\n $ pachca messages pin"
|
|
8
|
-
];
|
|
9
6
|
static scope = "pins:write";
|
|
10
7
|
static apiMethod = "POST";
|
|
11
8
|
static apiPath = "/messages/{id}/pin";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MessagesUnfurl extends BaseCommand {
|
|
6
6
|
static description = "Unfurl (разворачивание ссылок)";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Разворачивание ссылок (unfurling) — Отправь превью-данные:\n $ pachca messages unfurl"
|
|
9
|
-
];
|
|
10
7
|
static hiddenAliases = ["link-previews:add"];
|
|
11
8
|
static scope = "link_previews:write";
|
|
12
9
|
static apiMethod = "POST";
|
|
@@ -4,9 +4,6 @@ import { BaseCommand } from '../../base-command.js';
|
|
|
4
4
|
import * as clack from '@clack/prompts';
|
|
5
5
|
export default class MessagesUnpin extends BaseCommand {
|
|
6
6
|
static description = "Открепление сообщения";
|
|
7
|
-
static examples = [
|
|
8
|
-
"Закрепить/открепить сообщение — Открепить сообщение:\n $ pachca messages unpin"
|
|
9
|
-
];
|
|
10
7
|
static scope = "pins:write";
|
|
11
8
|
static apiMethod = "DELETE";
|
|
12
9
|
static apiPath = "/messages/{id}/pin";
|