@will-17173/telegram-cli 0.1.1 → 0.3.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.
Files changed (111) hide show
  1. package/README.md +169 -10
  2. package/README.zh-CN.md +169 -11
  3. package/dist/cli/app.js +3 -1
  4. package/dist/cli/app.js.map +1 -1
  5. package/dist/commands/account.js +51 -5
  6. package/dist/commands/account.js.map +1 -1
  7. package/dist/commands/config.js +96 -13
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/group-write.js +88 -0
  10. package/dist/commands/group-write.js.map +1 -0
  11. package/dist/commands/group.js +121 -0
  12. package/dist/commands/group.js.map +1 -0
  13. package/dist/commands/telegram-runner.js +84 -0
  14. package/dist/commands/telegram-runner.js.map +1 -0
  15. package/dist/commands/telegram.js +154 -172
  16. package/dist/commands/telegram.js.map +1 -1
  17. package/dist/config/credential-store.js +76 -22
  18. package/dist/config/credential-store.js.map +1 -1
  19. package/dist/config/env.js +12 -1
  20. package/dist/config/env.js.map +1 -1
  21. package/dist/group-commands/catalog.js +69 -0
  22. package/dist/group-commands/catalog.js.map +1 -0
  23. package/dist/group-commands/executor.js +93 -0
  24. package/dist/group-commands/executor.js.map +1 -0
  25. package/dist/group-commands/parser.js +268 -0
  26. package/dist/group-commands/parser.js.map +1 -0
  27. package/dist/group-commands/tokenize.js +51 -0
  28. package/dist/group-commands/tokenize.js.map +1 -0
  29. package/dist/group-commands/types.js +2 -0
  30. package/dist/group-commands/types.js.map +1 -0
  31. package/dist/listen-commands/catalog.js +61 -0
  32. package/dist/listen-commands/catalog.js.map +1 -0
  33. package/dist/listen-commands/dispatch.js +46 -0
  34. package/dist/listen-commands/dispatch.js.map +1 -0
  35. package/dist/listen-commands/match.js +113 -0
  36. package/dist/listen-commands/match.js.map +1 -0
  37. package/dist/presenters/group.js +130 -0
  38. package/dist/presenters/group.js.map +1 -0
  39. package/dist/presenters/human.js +29 -9
  40. package/dist/presenters/human.js.map +1 -1
  41. package/dist/presenters/ink/display-width.js +45 -7
  42. package/dist/presenters/ink/display-width.js.map +1 -1
  43. package/dist/presenters/ink/group-command-confirm.js +13 -0
  44. package/dist/presenters/ink/group-command-confirm.js.map +1 -0
  45. package/dist/presenters/ink/group-command-result.js +21 -0
  46. package/dist/presenters/ink/group-command-result.js.map +1 -0
  47. package/dist/presenters/ink/listen-command-menu.js +38 -0
  48. package/dist/presenters/ink/listen-command-menu.js.map +1 -0
  49. package/dist/presenters/ink/listen-scroll.js +5 -1
  50. package/dist/presenters/ink/listen-scroll.js.map +1 -1
  51. package/dist/presenters/ink/listen.js +806 -171
  52. package/dist/presenters/ink/listen.js.map +1 -1
  53. package/dist/presenters/ink/use-group-command.js +125 -0
  54. package/dist/presenters/ink/use-group-command.js.map +1 -0
  55. package/dist/presenters/listen-message.js +25 -241
  56. package/dist/presenters/listen-message.js.map +1 -1
  57. package/dist/presenters/logical-message.js +78 -0
  58. package/dist/presenters/logical-message.js.map +1 -0
  59. package/dist/services/attachment-download.js +5 -2
  60. package/dist/services/attachment-download.js.map +1 -1
  61. package/dist/services/auto-download-coordinator.js +214 -0
  62. package/dist/services/auto-download-coordinator.js.map +1 -0
  63. package/dist/services/group-service.js +164 -0
  64. package/dist/services/group-service.js.map +1 -0
  65. package/dist/services/group-write-service.js +165 -0
  66. package/dist/services/group-write-service.js.map +1 -0
  67. package/dist/services/listen-album-aggregator.js +9 -29
  68. package/dist/services/listen-album-aggregator.js.map +1 -1
  69. package/dist/services/listen-attachment.js +265 -0
  70. package/dist/services/listen-attachment.js.map +1 -0
  71. package/dist/services/listen-composer-command.js +102 -0
  72. package/dist/services/listen-composer-command.js.map +1 -0
  73. package/dist/services/listen-reply-resolver.js +126 -0
  74. package/dist/services/listen-reply-resolver.js.map +1 -0
  75. package/dist/services/message-service.js +54 -4
  76. package/dist/services/message-service.js.map +1 -1
  77. package/dist/services/query-service.js +95 -34
  78. package/dist/services/query-service.js.map +1 -1
  79. package/dist/services/reply-context.js +29 -0
  80. package/dist/services/reply-context.js.map +1 -0
  81. package/dist/services/sync-service.js +18 -6
  82. package/dist/services/sync-service.js.map +1 -1
  83. package/dist/storage/message-db.js +241 -5
  84. package/dist/storage/message-db.js.map +1 -1
  85. package/dist/telegram/client-factory.js +4 -2
  86. package/dist/telegram/client-factory.js.map +1 -1
  87. package/dist/telegram/fake-group-management.js +381 -0
  88. package/dist/telegram/fake-group-management.js.map +1 -0
  89. package/dist/telegram/group-types.js +59 -0
  90. package/dist/telegram/group-types.js.map +1 -0
  91. package/dist/telegram/group-write-types.js +2 -0
  92. package/dist/telegram/group-write-types.js.map +1 -0
  93. package/dist/telegram/mtcute-client.js +74 -9
  94. package/dist/telegram/mtcute-client.js.map +1 -1
  95. package/dist/telegram/mtcute-group-helpers.js +56 -0
  96. package/dist/telegram/mtcute-group-helpers.js.map +1 -0
  97. package/dist/telegram/mtcute-group-invites.js +82 -0
  98. package/dist/telegram/mtcute-group-invites.js.map +1 -0
  99. package/dist/telegram/mtcute-group-management.js +493 -0
  100. package/dist/telegram/mtcute-group-management.js.map +1 -0
  101. package/dist/telegram/mtcute-group-members.js +118 -0
  102. package/dist/telegram/mtcute-group-members.js.map +1 -0
  103. package/dist/telegram/mtcute-group-settings.js +146 -0
  104. package/dist/telegram/mtcute-group-settings.js.map +1 -0
  105. package/dist/telegram/mtcute-group-topics.js +63 -0
  106. package/dist/telegram/mtcute-group-topics.js.map +1 -0
  107. package/dist/telegram/proxy.js +27 -0
  108. package/dist/telegram/proxy.js.map +1 -0
  109. package/dist/telegram/raw-message.js +46 -0
  110. package/dist/telegram/raw-message.js.map +1 -0
  111. package/package.json +9 -1
@@ -23,35 +23,98 @@ export function validateCredentials(input) {
23
23
  return { apiId, apiHash };
24
24
  }
25
25
  export function readCredentials(path) {
26
+ const configuration = readStoredConfiguration(path);
27
+ if (!configuration?.credentials) {
28
+ throw new MissingCredentialsError();
29
+ }
30
+ return configuration.credentials;
31
+ }
32
+ export function readProxy(path) {
33
+ return readStoredConfiguration(path)?.proxy;
34
+ }
35
+ export function writeConfiguration(path, update) {
36
+ const existing = readStoredConfiguration(path) ?? {};
37
+ const credentials = update.credentials === undefined
38
+ ? existing.credentials
39
+ : validateCredentials(update.credentials);
40
+ const proxy = update.proxy === undefined ? existing.proxy : normalizeProxy(update.proxy);
41
+ if (!credentials && !proxy) {
42
+ throw new Error(INVALID_CREDENTIALS_MESSAGE);
43
+ }
44
+ writeDocument(path, createDocument({ credentials, proxy }));
45
+ }
46
+ export function writeCredentials(path, credentials) {
47
+ const normalized = validateCredentials(credentials);
48
+ writeConfiguration(path, { credentials: normalized });
49
+ }
50
+ function readStoredConfiguration(path) {
26
51
  let contents;
27
52
  try {
28
53
  contents = readFileSync(path, 'utf8');
29
54
  }
30
55
  catch (error) {
31
- if (isNodeError(error) && error.code === 'ENOENT') {
32
- throw new MissingCredentialsError();
33
- }
56
+ if (isNodeError(error) && error.code === 'ENOENT')
57
+ return undefined;
34
58
  throw new Error(INVALID_CREDENTIALS_MESSAGE);
35
59
  }
36
60
  try {
37
- const parsed = JSON.parse(contents);
38
- if (!isCredentialDocument(parsed)) {
61
+ return parseDocument(JSON.parse(contents));
62
+ }
63
+ catch {
64
+ throw new Error(INVALID_CREDENTIALS_MESSAGE);
65
+ }
66
+ }
67
+ function parseDocument(value) {
68
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
69
+ throw new Error(INVALID_CREDENTIALS_MESSAGE);
70
+ }
71
+ const document = value;
72
+ const hasApiId = Object.prototype.hasOwnProperty.call(document, 'api_id');
73
+ const hasApiHash = Object.prototype.hasOwnProperty.call(document, 'api_hash');
74
+ const hasProxy = Object.prototype.hasOwnProperty.call(document, 'proxy');
75
+ if (hasApiId !== hasApiHash) {
76
+ throw new Error(INVALID_CREDENTIALS_MESSAGE);
77
+ }
78
+ let credentials;
79
+ if (hasApiId) {
80
+ if (!Number.isSafeInteger(document.api_id) ||
81
+ document.api_id <= 0 ||
82
+ typeof document.api_hash !== 'string' ||
83
+ document.api_hash.trim().length === 0) {
39
84
  throw new Error(INVALID_CREDENTIALS_MESSAGE);
40
85
  }
41
- return validateCredentials({ apiId: parsed.api_id, apiHash: parsed.api_hash });
86
+ credentials = validateCredentials({
87
+ apiId: document.api_id,
88
+ apiHash: document.api_hash,
89
+ });
42
90
  }
43
- catch {
91
+ const proxy = hasProxy ? normalizeProxy(document.proxy) : undefined;
92
+ if (!credentials && !proxy) {
44
93
  throw new Error(INVALID_CREDENTIALS_MESSAGE);
45
94
  }
95
+ return { credentials, proxy };
46
96
  }
47
- export function writeCredentials(path, credentials) {
48
- const normalized = validateCredentials(credentials);
97
+ function normalizeProxy(value) {
98
+ if (typeof value !== 'string' || value.trim().length === 0) {
99
+ throw new Error(INVALID_CREDENTIALS_MESSAGE);
100
+ }
101
+ return value.trim();
102
+ }
103
+ function createDocument(configuration) {
104
+ const document = {};
105
+ if (configuration.credentials) {
106
+ document.api_id = configuration.credentials.apiId;
107
+ document.api_hash = configuration.credentials.apiHash;
108
+ }
109
+ if (configuration.proxy) {
110
+ document.proxy = configuration.proxy;
111
+ }
112
+ return document;
113
+ }
114
+ function writeDocument(path, value) {
49
115
  const parent = dirname(path);
50
116
  const temporaryPath = join(parent, `.${randomUUID()}.tmp`);
51
- const document = `${JSON.stringify({
52
- api_id: normalized.apiId,
53
- api_hash: normalized.apiHash,
54
- }, null, 2)}\n`;
117
+ const document = `${JSON.stringify(value, null, 2)}\n`;
55
118
  mkdirSync(parent, { recursive: true });
56
119
  let renamed = false;
57
120
  try {
@@ -67,15 +130,6 @@ export function writeCredentials(path, credentials) {
67
130
  }
68
131
  }
69
132
  }
70
- function isCredentialDocument(value) {
71
- if (typeof value !== 'object' || value === null || Array.isArray(value))
72
- return false;
73
- const document = value;
74
- return (Number.isSafeInteger(document.api_id) &&
75
- document.api_id > 0 &&
76
- typeof document.api_hash === 'string' &&
77
- document.api_hash.trim().length > 0);
78
- }
79
133
  function isNodeError(error) {
80
134
  return error instanceof Error && 'code' in error;
81
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/config/credential-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/config/credential-store.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { mkdirSync } from 'node:fs';
2
2
  import { homedir } from 'node:os';
3
3
  import { isAbsolute, join, resolve } from 'node:path';
4
- import { MissingCredentialsError, readCredentials, validateCredentials, } from './credential-store.js';
4
+ import { MissingCredentialsError, readCredentials, readProxy, validateCredentials, } from './credential-store.js';
5
5
  const APP_NAME = 'tg-cli';
6
6
  const DEFAULT_API_ID = 2040;
7
7
  const DEFAULT_API_HASH = 'b18441a1ff607e10a989891a5462e627';
@@ -34,6 +34,17 @@ export function getTelegramCredentials() {
34
34
  };
35
35
  }
36
36
  }
37
+ export function getTelegramProxyConfiguration() {
38
+ const proxy = process.env.TG_PROXY?.trim();
39
+ if (proxy) {
40
+ return { url: proxy, source: 'environment' };
41
+ }
42
+ const storedProxy = readProxy(getConfigPath());
43
+ return storedProxy ? { url: storedProxy, source: 'stored' } : undefined;
44
+ }
45
+ export function getTelegramProxy() {
46
+ return getTelegramProxyConfiguration()?.url;
47
+ }
37
48
  export function getSessionName() {
38
49
  const raw = process.env.TG_SESSION_NAME;
39
50
  return raw && raw.trim() ? raw.trim() : 'tg_cli';
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ function deepFreezeCommand(command) {
2
+ command.args.forEach(Object.freeze);
3
+ command.options.forEach(Object.freeze);
4
+ Object.freeze(command.path);
5
+ Object.freeze(command.args);
6
+ Object.freeze(command.options);
7
+ return Object.freeze(command);
8
+ }
9
+ const commands = [
10
+ { path: ['member', 'add'], summary: 'Add members to the chat', usage: 'group member add <users...>', options: [], risk: 'none', args: [{ name: 'users', kind: 'users', required: true, rest: true }], capability: 'admin' },
11
+ { path: ['member', 'kick'], summary: 'Remove a member from the chat', usage: 'group member kick <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
12
+ { path: ['member', 'ban'], summary: 'Ban a member from the chat', usage: 'group member ban <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
13
+ { path: ['member', 'unban'], summary: 'Lift a member ban', usage: 'group member unban <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
14
+ { path: ['member', 'mute'], summary: 'Mute a member for an optional duration', usage: 'group member mute <user> [duration]', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }, { name: 'duration', kind: 'duration', required: false }], capability: 'admin' },
15
+ { path: ['member', 'unmute'], summary: 'Restore a muted member permissions', usage: 'group member unmute <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
16
+ { path: ['member', 'purge'], summary: 'Delete all messages from a member', usage: 'group member purge <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
17
+ { path: ['admin', 'promote'], summary: 'Promote a member to administrator', usage: 'group admin promote <user> [permissions]', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }, { name: 'permissions', kind: 'permissions', required: false }], capability: 'admin' },
18
+ { path: ['admin', 'demote'], summary: 'Remove administrator privileges', usage: 'group admin demote <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
19
+ { path: ['admin', 'rank'], summary: 'Set an administrator custom title', usage: 'group admin rank <user> <text...>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }, { name: 'text', kind: 'text', required: true, rest: true }], capability: 'admin' },
20
+ { path: ['admin', 'transfer-owner'], summary: 'Transfer ownership to another member', usage: 'group admin transfer-owner <user>', options: [], risk: 'confirm', args: [{ name: 'user', kind: 'user', required: true }], capability: 'creator' },
21
+ { path: ['chat', 'title'], summary: 'Change the chat title', usage: 'group chat title <text...>', options: [], risk: 'none', args: [{ name: 'text', kind: 'text', required: true, rest: true }], capability: 'admin' },
22
+ { path: ['chat', 'description'], summary: 'Change the chat description', usage: 'group chat description <text...>', options: [], risk: 'none', args: [{ name: 'text', kind: 'text', required: true, rest: true }], capability: 'admin' },
23
+ { path: ['chat', 'username'], summary: 'Change the public chat username', usage: 'group chat username <username>', options: [], risk: 'none', args: [{ name: 'username', kind: 'text', required: true }], capability: 'supergroup' },
24
+ { path: ['chat', 'photo'], summary: 'Set the chat photo from a file', usage: 'group chat photo <path>', options: [], risk: 'none', args: [{ name: 'path', kind: 'path', required: true }], capability: 'admin' },
25
+ { path: ['chat', 'slowmode'], summary: 'Set the slow mode interval', usage: 'group chat slowmode <duration>', options: [], risk: 'none', args: [{ name: 'duration', kind: 'duration', required: true }], capability: 'supergroup' },
26
+ { path: ['chat', 'ttl'], summary: 'Set the message auto-delete interval', usage: 'group chat ttl <duration>', options: [], risk: 'confirm', args: [{ name: 'duration', kind: 'duration', required: true }], capability: 'admin' },
27
+ { path: ['chat', 'protect'], summary: 'Toggle content protection', usage: 'group chat protect <enabled>', options: [], risk: 'none', args: [{ name: 'enabled', kind: 'toggle', required: true }], capability: 'admin' },
28
+ { path: ['chat', 'join-requests'], summary: 'Toggle approval for new members', usage: 'group chat join-requests <enabled>', options: [], risk: 'none', args: [{ name: 'enabled', kind: 'toggle', required: true }], capability: 'supergroup' },
29
+ { path: ['chat', 'join-to-send'], summary: 'Toggle membership requirement for posting', usage: 'group chat join-to-send <enabled>', options: [], risk: 'none', args: [{ name: 'enabled', kind: 'toggle', required: true }], capability: 'supergroup' },
30
+ { path: ['chat', 'default-permissions'], summary: 'Set default member permissions', usage: 'group chat default-permissions <permissions>', options: [], risk: 'confirm', args: [{ name: 'permissions', kind: 'permissions', required: true }], capability: 'admin' },
31
+ { path: ['chat', 'sticker-set'], summary: 'Set the chat sticker set by name, or off', usage: 'group chat sticker-set <sticker>', options: [], risk: 'none', args: [{ name: 'sticker', kind: 'text', required: true }], capability: 'supergroup' },
32
+ { path: ['chat', 'leave'], summary: 'Leave the current chat', usage: 'group chat leave', options: [], risk: 'confirm', args: [], capability: 'group' },
33
+ { path: ['chat', 'delete'], summary: 'Permanently delete the chat', usage: 'group chat delete', options: [], risk: 'confirm-title', args: [], capability: 'creator' },
34
+ { path: ['invite', 'list'], summary: 'List chat invite links', usage: 'group invite list', options: [], risk: 'none', args: [], capability: 'admin' },
35
+ { path: ['invite', 'show'], summary: 'Show details for an invite link', usage: 'group invite show <invite>', options: [], risk: 'none', args: [{ name: 'invite', kind: 'invite', required: true }], capability: 'admin' },
36
+ { path: ['invite', 'create'], summary: 'Create a new invite link', usage: 'group invite create', options: [{ name: 'title', long: '--title', kind: 'text', summary: 'Set a descriptive title' }, { name: 'expire', long: '--expire', kind: 'duration', summary: 'Set the link expiration duration' }, { name: 'limit', long: '--limit', kind: 'id', summary: 'Set the maximum number of uses' }, { name: 'request-needed', long: '--request-needed', kind: 'toggle', summary: 'Require administrator approval' }], risk: 'none', args: [], capability: 'admin' },
37
+ { path: ['invite', 'edit'], summary: 'Edit an existing invite link', usage: 'group invite edit <invite>', options: [{ name: 'title', long: '--title', kind: 'text', summary: 'Set a descriptive title' }, { name: 'expire', long: '--expire', kind: 'duration', summary: 'Set the link expiration duration' }, { name: 'limit', long: '--limit', kind: 'id', summary: 'Set the maximum number of uses' }, { name: 'request-needed', long: '--request-needed', kind: 'toggle', summary: 'Require administrator approval' }], risk: 'none', args: [{ name: 'invite', kind: 'invite', required: true }], capability: 'admin' },
38
+ { path: ['invite', 'revoke'], summary: 'Revoke an invite link', usage: 'group invite revoke <invite>', options: [], risk: 'confirm', args: [{ name: 'invite', kind: 'invite', required: true }], capability: 'admin' },
39
+ { path: ['invite', 'members'], summary: 'List members who used an invite link', usage: 'group invite members <invite>', options: [], risk: 'none', args: [{ name: 'invite', kind: 'invite', required: true }], capability: 'admin' },
40
+ { path: ['invite', 'approve'], summary: 'Approve a pending join request', usage: 'group invite approve <user>', options: [], risk: 'none', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
41
+ { path: ['invite', 'decline'], summary: 'Decline a pending join request', usage: 'group invite decline <user>', options: [], risk: 'none', args: [{ name: 'user', kind: 'user', required: true }], capability: 'admin' },
42
+ { path: ['invite', 'approve-all'], summary: 'Approve all pending join requests', usage: 'group invite approve-all', options: [], risk: 'confirm', args: [], capability: 'admin' },
43
+ { path: ['invite', 'decline-all'], summary: 'Decline all pending join requests', usage: 'group invite decline-all', options: [], risk: 'confirm', args: [], capability: 'admin' },
44
+ { path: ['topic', 'list'], summary: 'List forum topics', usage: 'group topic list', options: [], risk: 'none', args: [], capability: 'forum' },
45
+ { path: ['topic', 'create'], summary: 'Create a forum topic', usage: 'group topic create <title...>', options: [], risk: 'none', args: [{ name: 'title', kind: 'text', required: true, rest: true }], capability: 'forum' },
46
+ { path: ['topic', 'edit'], summary: 'Edit a forum topic title', usage: 'group topic edit <id> <title...>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }, { name: 'title', kind: 'text', required: true, rest: true }], capability: 'forum' },
47
+ { path: ['topic', 'close'], summary: 'Close a forum topic', usage: 'group topic close <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'forum' },
48
+ { path: ['topic', 'reopen'], summary: 'Reopen a closed forum topic', usage: 'group topic reopen <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'forum' },
49
+ { path: ['topic', 'pin'], summary: 'Pin a forum topic', usage: 'group topic pin <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'forum' },
50
+ { path: ['topic', 'unpin'], summary: 'Unpin a forum topic', usage: 'group topic unpin <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'forum' },
51
+ { path: ['topic', 'reorder'], summary: 'Set the order of pinned forum topics', usage: 'group topic reorder <ids...>', options: [], risk: 'none', args: [{ name: 'ids', kind: 'ids', required: true, rest: true }], capability: 'forum' },
52
+ { path: ['topic', 'delete'], summary: 'Delete a forum topic and its messages', usage: 'group topic delete <id>', options: [], risk: 'confirm', args: [{ name: 'id', kind: 'id', required: true }], capability: 'forum' },
53
+ { path: ['topic', 'general-hidden'], summary: 'Toggle visibility of the general topic', usage: 'group topic general-hidden <hidden>', options: [], risk: 'none', args: [{ name: 'hidden', kind: 'toggle', required: true }], capability: 'forum' },
54
+ { path: ['message', 'pin'], summary: 'Pin a message in the chat', usage: 'group message pin <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'admin' },
55
+ { path: ['message', 'unpin'], summary: 'Unpin a message in the chat', usage: 'group message unpin <id>', options: [], risk: 'none', args: [{ name: 'id', kind: 'id', required: true }], capability: 'admin' },
56
+ { path: ['message', 'unpin-all'], summary: 'Unpin every message in the chat', usage: 'group message unpin-all', options: [], risk: 'confirm', args: [], capability: 'admin' },
57
+ { path: ['message', 'delete'], summary: 'Delete messages from the chat', usage: 'group message delete <ids...>', options: [], risk: 'confirm', args: [{ name: 'ids', kind: 'ids', required: true, rest: true }], capability: 'admin' }
58
+ ];
59
+ commands.forEach(deepFreezeCommand);
60
+ export const GROUP_COMMANDS = Object.freeze(commands);
61
+ export const GROUP_COMMAND_CATALOG = {
62
+ 'member add': GROUP_COMMANDS[0], 'member kick': GROUP_COMMANDS[1], 'member ban': GROUP_COMMANDS[2], 'member unban': GROUP_COMMANDS[3], 'member mute': GROUP_COMMANDS[4], 'member unmute': GROUP_COMMANDS[5], 'member purge': GROUP_COMMANDS[6],
63
+ 'admin promote': GROUP_COMMANDS[7], 'admin demote': GROUP_COMMANDS[8], 'admin rank': GROUP_COMMANDS[9], 'admin transfer-owner': GROUP_COMMANDS[10],
64
+ 'chat title': GROUP_COMMANDS[11], 'chat description': GROUP_COMMANDS[12], 'chat username': GROUP_COMMANDS[13], 'chat photo': GROUP_COMMANDS[14], 'chat slowmode': GROUP_COMMANDS[15], 'chat ttl': GROUP_COMMANDS[16], 'chat protect': GROUP_COMMANDS[17], 'chat join-requests': GROUP_COMMANDS[18], 'chat join-to-send': GROUP_COMMANDS[19], 'chat default-permissions': GROUP_COMMANDS[20], 'chat sticker-set': GROUP_COMMANDS[21], 'chat leave': GROUP_COMMANDS[22], 'chat delete': GROUP_COMMANDS[23],
65
+ 'invite list': GROUP_COMMANDS[24], 'invite show': GROUP_COMMANDS[25], 'invite create': GROUP_COMMANDS[26], 'invite edit': GROUP_COMMANDS[27], 'invite revoke': GROUP_COMMANDS[28], 'invite members': GROUP_COMMANDS[29], 'invite approve': GROUP_COMMANDS[30], 'invite decline': GROUP_COMMANDS[31], 'invite approve-all': GROUP_COMMANDS[32], 'invite decline-all': GROUP_COMMANDS[33],
66
+ 'topic list': GROUP_COMMANDS[34], 'topic create': GROUP_COMMANDS[35], 'topic edit': GROUP_COMMANDS[36], 'topic close': GROUP_COMMANDS[37], 'topic reopen': GROUP_COMMANDS[38], 'topic pin': GROUP_COMMANDS[39], 'topic unpin': GROUP_COMMANDS[40], 'topic reorder': GROUP_COMMANDS[41], 'topic delete': GROUP_COMMANDS[42], 'topic general-hidden': GROUP_COMMANDS[43],
67
+ 'message pin': GROUP_COMMANDS[44], 'message unpin': GROUP_COMMANDS[45], 'message unpin-all': GROUP_COMMANDS[46], 'message delete': GROUP_COMMANDS[47],
68
+ };
69
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/group-commands/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { ADMIN_RIGHT_KEYS, canonicalCommandKey } from '../services/group-write-service.js';
2
+ const queries = new Set(['invite list', 'invite show', 'invite members', 'topic list']);
3
+ export async function executeGroupCommand(request, context) {
4
+ const key = canonicalCommandKey(request);
5
+ if (!key)
6
+ return error('invalid_command', 'Invalid or noncanonical group command.');
7
+ if (context.connectionReady === false)
8
+ return error('connection_not_ready', 'Telegram connection is not ready.');
9
+ if (context.targetAvailable === false || (context.targetCount !== undefined && context.targetCount !== 1))
10
+ return error('ambiguous_chat', 'Select exactly one target chat.');
11
+ if (request.key === 'admin promote' && (!request.values.permissions || request.values.permissions.length === 0)) {
12
+ return { ok: false, selectionRequired: { kind: 'admin_permissions', chat: context.chat, target: String(request.values.user), available: ADMIN_RIGHT_KEYS } };
13
+ }
14
+ const capabilityFailure = preflight(request, context.knownGroup);
15
+ if (capabilityFailure)
16
+ return capabilityFailure;
17
+ const risk = request.definition.risk;
18
+ const titleMatches = risk !== 'confirm-title' || (context.knownGroup != null && context.confirmationTitle === context.knownGroup.title);
19
+ if (isConfirmationRequest(request) && (!context.confirmed || !titleMatches)) {
20
+ const confirmation = confirmationContext(request, context);
21
+ return { ok: false, confirmation: { risk: request.definition.risk, chat: context.chat, summary: request.definition.summary, ...confirmation, ...(request.definition.risk === 'confirm-title' && context.knownGroup ? { title: context.knownGroup.title } : {}) } };
22
+ }
23
+ const result = await context.groups.execute({ ...request, chat: context.chat });
24
+ if (result.ok && !queries.has(key) && context.invalidateGroup) {
25
+ await Promise.resolve(context.invalidateGroup(context.chat)).catch(() => undefined);
26
+ }
27
+ return result;
28
+ }
29
+ function isConfirmationRequest(request) { return request.definition.risk !== 'none'; }
30
+ function confirmationContext(request, context) {
31
+ switch (request.key) {
32
+ case 'member kick':
33
+ case 'member ban':
34
+ case 'member unban':
35
+ case 'member unmute':
36
+ case 'member purge': return { target: String(request.values.user), details: { user: request.values.user } };
37
+ case 'member mute': return { target: String(request.values.user), details: { user: request.values.user, durationSeconds: request.values.durationSeconds ?? null } };
38
+ case 'admin promote': return { target: String(request.values.user), details: { user: request.values.user, permissions: [...(request.values.permissions ?? [])] } };
39
+ case 'admin demote':
40
+ case 'admin transfer-owner': return { target: String(request.values.user), details: { user: request.values.user } };
41
+ case 'admin rank': return { target: String(request.values.user), details: { user: request.values.user, rank: request.values.text } };
42
+ case 'invite revoke': return { target: request.values.invite, details: { invite: request.values.invite } };
43
+ case 'topic delete': return { target: `topic ${request.values.id}`, details: { topicId: request.values.id } };
44
+ case 'message delete': return { target: `messages ${request.values.ids.join(', ')}`, details: { messageIds: [...request.values.ids] } };
45
+ case 'chat delete': return { target: context.knownGroup?.title ?? String(context.chat), details: { chat: context.chat, ...(context.knownGroup ? { title: context.knownGroup.title } : {}) } };
46
+ case 'chat leave': return { target: context.knownGroup?.title ?? String(context.chat), details: { chat: context.chat } };
47
+ case 'chat ttl': return { target: context.knownGroup?.title ?? String(context.chat), details: { durationSeconds: request.values.durationSeconds } };
48
+ case 'chat default-permissions': return { target: context.knownGroup?.title ?? String(context.chat), details: { permissions: [...request.values.permissions] } };
49
+ case 'invite approve-all':
50
+ case 'invite decline-all':
51
+ case 'message unpin-all': return { target: context.knownGroup?.title ?? String(context.chat), details: { chat: context.chat } };
52
+ }
53
+ }
54
+ function preflight(request, group) {
55
+ return evaluateGroupCommandAvailability(request.definition, group);
56
+ }
57
+ export function evaluateGroupCommandAvailability(definition, group) {
58
+ if (!group)
59
+ return undefined;
60
+ const capabilityError = evaluateGroupCapability(definition.capability, group);
61
+ if (capabilityError)
62
+ return capabilityError;
63
+ const permission = requiredPermission[definition.path.join(' ')];
64
+ if (group.current_user_role !== 'creator' && permission && (group.permissions == null || !group.permissions[permission])) {
65
+ return { ok: false, error: { code: 'permission_missing', message: `Missing Telegram group permission: ${permission}`, details: { permission } } };
66
+ }
67
+ return undefined;
68
+ }
69
+ export function evaluateGroupCapability(capability, group) {
70
+ if (!group)
71
+ return undefined;
72
+ if (capability === 'group' && group.type !== 'group' && group.type !== 'supergroup')
73
+ return error('unsupported_group', 'This command requires a group.');
74
+ if (capability === 'supergroup' && group.type !== 'supergroup')
75
+ return error('unsupported_group', 'This command requires a supergroup.');
76
+ if (capability === 'forum' && !group.forum)
77
+ return error('unsupported_group', 'This command requires a forum.');
78
+ if (capability === 'creator' && group.current_user_role != null && group.current_user_role !== 'creator')
79
+ return error('permission_missing', 'This command requires the group creator.');
80
+ if (capability === 'admin' && group.current_user_role != null && group.current_user_role !== 'admin' && group.current_user_role !== 'creator')
81
+ return error('permission_missing', 'This command requires a group administrator.');
82
+ return undefined;
83
+ }
84
+ function error(code, message) { return { ok: false, error: { code, message } }; }
85
+ const requiredPermission = {
86
+ 'member add': 'invite_users', 'member kick': 'ban_users', 'member ban': 'ban_users', 'member unban': 'ban_users', 'member mute': 'ban_users', 'member unmute': 'ban_users',
87
+ 'admin promote': 'add_admins', 'admin demote': 'add_admins', 'admin rank': 'add_admins',
88
+ 'chat title': 'change_info', 'chat description': 'change_info', 'chat username': 'change_info', 'chat photo': 'change_info', 'chat slowmode': 'change_info', 'chat ttl': 'change_info', 'chat protect': 'change_info', 'chat join-requests': 'change_info', 'chat join-to-send': 'change_info', 'chat default-permissions': 'change_info', 'chat sticker-set': 'change_info',
89
+ 'invite list': 'invite_users', 'invite show': 'invite_users', 'invite create': 'invite_users', 'invite edit': 'invite_users', 'invite revoke': 'invite_users', 'invite members': 'invite_users', 'invite approve': 'invite_users', 'invite decline': 'invite_users', 'invite approve-all': 'invite_users', 'invite decline-all': 'invite_users',
90
+ 'topic list': 'manage_topics', 'topic create': 'manage_topics', 'topic edit': 'manage_topics', 'topic close': 'manage_topics', 'topic reopen': 'manage_topics', 'topic pin': 'manage_topics', 'topic unpin': 'manage_topics', 'topic reorder': 'manage_topics', 'topic delete': 'manage_topics', 'topic general-hidden': 'manage_topics',
91
+ 'message pin': 'pin_messages', 'message unpin': 'pin_messages', 'message unpin-all': 'pin_messages', 'message delete': 'delete_messages', 'member purge': 'delete_messages',
92
+ };
93
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/group-commands/executor.ts"],"names":[],"mappings":"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"}