@cyberdrk/tg 0.1.1

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 (91) hide show
  1. package/README.md +123 -0
  2. package/SKILL.md +110 -0
  3. package/dist/auth.d.ts +4 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +61 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +63 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +396 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/commands/auth.d.ts +3 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +21 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/chats.d.ts +3 -0
  16. package/dist/commands/chats.d.ts.map +1 -0
  17. package/dist/commands/chats.js +42 -0
  18. package/dist/commands/chats.js.map +1 -0
  19. package/dist/commands/check.d.ts +3 -0
  20. package/dist/commands/check.d.ts.map +1 -0
  21. package/dist/commands/check.js +28 -0
  22. package/dist/commands/check.js.map +1 -0
  23. package/dist/commands/contact.d.ts +3 -0
  24. package/dist/commands/contact.d.ts.map +1 -0
  25. package/dist/commands/contact.js +38 -0
  26. package/dist/commands/contact.js.map +1 -0
  27. package/dist/commands/groups.d.ts +3 -0
  28. package/dist/commands/groups.d.ts.map +1 -0
  29. package/dist/commands/groups.js +45 -0
  30. package/dist/commands/groups.js.map +1 -0
  31. package/dist/commands/inbox.d.ts +3 -0
  32. package/dist/commands/inbox.d.ts.map +1 -0
  33. package/dist/commands/inbox.js +42 -0
  34. package/dist/commands/inbox.js.map +1 -0
  35. package/dist/commands/index.d.ts +14 -0
  36. package/dist/commands/index.d.ts.map +1 -0
  37. package/dist/commands/index.js +14 -0
  38. package/dist/commands/index.js.map +1 -0
  39. package/dist/commands/members.d.ts +4 -0
  40. package/dist/commands/members.d.ts.map +1 -0
  41. package/dist/commands/members.js +73 -0
  42. package/dist/commands/members.js.map +1 -0
  43. package/dist/commands/read.d.ts +3 -0
  44. package/dist/commands/read.d.ts.map +1 -0
  45. package/dist/commands/read.js +69 -0
  46. package/dist/commands/read.js.map +1 -0
  47. package/dist/commands/reply.d.ts +3 -0
  48. package/dist/commands/reply.d.ts.map +1 -0
  49. package/dist/commands/reply.js +37 -0
  50. package/dist/commands/reply.js.map +1 -0
  51. package/dist/commands/search.d.ts +3 -0
  52. package/dist/commands/search.d.ts.map +1 -0
  53. package/dist/commands/search.js +53 -0
  54. package/dist/commands/search.js.map +1 -0
  55. package/dist/commands/send.d.ts +3 -0
  56. package/dist/commands/send.d.ts.map +1 -0
  57. package/dist/commands/send.js +35 -0
  58. package/dist/commands/send.js.map +1 -0
  59. package/dist/commands/sync.d.ts +3 -0
  60. package/dist/commands/sync.d.ts.map +1 -0
  61. package/dist/commands/sync.js +89 -0
  62. package/dist/commands/sync.js.map +1 -0
  63. package/dist/commands/whoami.d.ts +3 -0
  64. package/dist/commands/whoami.d.ts.map +1 -0
  65. package/dist/commands/whoami.js +40 -0
  66. package/dist/commands/whoami.js.map +1 -0
  67. package/dist/config.d.ts +18 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +106 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/formatters/index.d.ts +10 -0
  72. package/dist/formatters/index.d.ts.map +1 -0
  73. package/dist/formatters/index.js +11 -0
  74. package/dist/formatters/index.js.map +1 -0
  75. package/dist/formatters/json.d.ts +2 -0
  76. package/dist/formatters/json.d.ts.map +1 -0
  77. package/dist/formatters/json.js +4 -0
  78. package/dist/formatters/json.js.map +1 -0
  79. package/dist/formatters/markdown.d.ts +21 -0
  80. package/dist/formatters/markdown.d.ts.map +1 -0
  81. package/dist/formatters/markdown.js +87 -0
  82. package/dist/formatters/markdown.js.map +1 -0
  83. package/dist/formatters/plain.d.ts +27 -0
  84. package/dist/formatters/plain.d.ts.map +1 -0
  85. package/dist/formatters/plain.js +121 -0
  86. package/dist/formatters/plain.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +29 -0
  90. package/dist/index.js.map +1 -0
  91. package/package.json +52 -0
@@ -0,0 +1,45 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getDialogs, getAdminGroups, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatChats } from '../formatters/plain.js';
5
+ import { formatChatsMarkdown } from '../formatters/markdown.js';
6
+ import { getOutputFormat } from '../formatters/index.js';
7
+ import ora from 'ora';
8
+ export const groupsCommand = new Command('groups')
9
+ .description('List groups')
10
+ .option('--admin', 'Only show groups where you are admin')
11
+ .option('--json', 'Output as JSON')
12
+ .option('--markdown', 'Output as Markdown')
13
+ .action(async (options) => {
14
+ const spinner = ora('Fetching groups...').start();
15
+ try {
16
+ const client = await getClient();
17
+ let groups;
18
+ if (options.admin) {
19
+ groups = await getAdminGroups(client);
20
+ }
21
+ else {
22
+ const allChats = await getDialogs(client, 500);
23
+ groups = allChats.filter(c => c.type === 'group' || c.type === 'supergroup');
24
+ }
25
+ spinner.stop();
26
+ const format = getOutputFormat(options);
27
+ switch (format) {
28
+ case 'json':
29
+ console.log(formatJson(groups));
30
+ break;
31
+ case 'markdown':
32
+ console.log(formatChatsMarkdown(groups));
33
+ break;
34
+ default:
35
+ console.log(formatChats(groups));
36
+ }
37
+ await disconnectClient();
38
+ }
39
+ catch (error) {
40
+ spinner.fail('Failed to fetch groups');
41
+ console.error(error instanceof Error ? error.message : error);
42
+ process.exit(1);
43
+ }
44
+ });
45
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/commands/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,aAAa,CAAC;KAC1B,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC;QAEX,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzC,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const inboxCommand: Command;
3
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SAqCrB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getDialogs, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatInbox } from '../formatters/plain.js';
5
+ import { formatInboxMarkdown } from '../formatters/markdown.js';
6
+ import { getOutputFormat } from '../formatters/index.js';
7
+ import ora from 'ora';
8
+ export const inboxCommand = new Command('inbox')
9
+ .description('Show unread messages summary')
10
+ .option('--json', 'Output as JSON')
11
+ .option('--markdown', 'Output as Markdown')
12
+ .action(async (options) => {
13
+ const spinner = ora('Fetching inbox...').start();
14
+ try {
15
+ const client = await getClient();
16
+ const chats = await getDialogs(client, 500);
17
+ const unreadChats = chats.filter(c => c.unreadCount > 0);
18
+ spinner.stop();
19
+ const format = getOutputFormat(options);
20
+ switch (format) {
21
+ case 'json':
22
+ console.log(formatJson({
23
+ totalUnread: unreadChats.reduce((sum, c) => sum + c.unreadCount, 0),
24
+ chatsWithUnread: unreadChats.length,
25
+ chats: unreadChats,
26
+ }));
27
+ break;
28
+ case 'markdown':
29
+ console.log(formatInboxMarkdown(chats));
30
+ break;
31
+ default:
32
+ console.log(formatInbox(chats));
33
+ }
34
+ await disconnectClient();
35
+ }
36
+ catch (error) {
37
+ spinner.fail('Failed to fetch inbox');
38
+ console.error(error instanceof Error ? error.message : error);
39
+ process.exit(1);
40
+ }
41
+ });
42
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAEzD,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;oBACrB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBACnE,eAAe,EAAE,WAAW,CAAC,MAAM;oBACnC,KAAK,EAAE,WAAW;iBACnB,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxC,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { authCommand } from './auth.js';
2
+ export { whoamiCommand } from './whoami.js';
3
+ export { checkCommand } from './check.js';
4
+ export { chatsCommand } from './chats.js';
5
+ export { readCommand } from './read.js';
6
+ export { searchCommand } from './search.js';
7
+ export { sendCommand } from './send.js';
8
+ export { replyCommand } from './reply.js';
9
+ export { inboxCommand } from './inbox.js';
10
+ export { contactCommand } from './contact.js';
11
+ export { membersCommand, adminsCommand } from './members.js';
12
+ export { groupsCommand } from './groups.js';
13
+ export { syncCommand } from './sync.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { authCommand } from './auth.js';
2
+ export { whoamiCommand } from './whoami.js';
3
+ export { checkCommand } from './check.js';
4
+ export { chatsCommand } from './chats.js';
5
+ export { readCommand } from './read.js';
6
+ export { searchCommand } from './search.js';
7
+ export { sendCommand } from './send.js';
8
+ export { replyCommand } from './reply.js';
9
+ export { inboxCommand } from './inbox.js';
10
+ export { contactCommand } from './contact.js';
11
+ export { membersCommand, adminsCommand } from './members.js';
12
+ export { groupsCommand } from './groups.js';
13
+ export { syncCommand } from './sync.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare const membersCommand: Command;
3
+ export declare const adminsCommand: Command;
4
+ //# sourceMappingURL=members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../src/commands/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,cAAc,SAoCvB,CAAC;AAEL,eAAO,MAAM,aAAa,SAmCtB,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getChatMembers, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatMembers } from '../formatters/plain.js';
5
+ import { formatMembersMarkdown } from '../formatters/markdown.js';
6
+ import { getOutputFormat } from '../formatters/index.js';
7
+ import ora from 'ora';
8
+ export const membersCommand = new Command('members')
9
+ .description('List group members')
10
+ .argument('<group>', 'Group name or username')
11
+ .option('-n, --limit <number>', 'Maximum members to fetch', '200')
12
+ .option('--json', 'Output as JSON')
13
+ .option('--markdown', 'Output as Markdown')
14
+ .action(async (group, options) => {
15
+ const spinner = ora(`Fetching members of "${group}"...`).start();
16
+ try {
17
+ const client = await getClient();
18
+ const members = await getChatMembers(client, group, {
19
+ limit: parseInt(options.limit),
20
+ });
21
+ spinner.stop();
22
+ const format = getOutputFormat(options);
23
+ switch (format) {
24
+ case 'json':
25
+ console.log(formatJson(members));
26
+ break;
27
+ case 'markdown':
28
+ console.log(formatMembersMarkdown(members));
29
+ break;
30
+ default:
31
+ console.log(formatMembers(members));
32
+ }
33
+ await disconnectClient();
34
+ }
35
+ catch (error) {
36
+ spinner.fail('Failed to fetch members');
37
+ console.error(error instanceof Error ? error.message : error);
38
+ process.exit(1);
39
+ }
40
+ });
41
+ export const adminsCommand = new Command('admins')
42
+ .description('List group admins')
43
+ .argument('<group>', 'Group name or username')
44
+ .option('--json', 'Output as JSON')
45
+ .option('--markdown', 'Output as Markdown')
46
+ .action(async (group, options) => {
47
+ const spinner = ora(`Fetching admins of "${group}"...`).start();
48
+ try {
49
+ const client = await getClient();
50
+ const members = await getChatMembers(client, group, {
51
+ adminsOnly: true,
52
+ });
53
+ spinner.stop();
54
+ const format = getOutputFormat(options);
55
+ switch (format) {
56
+ case 'json':
57
+ console.log(formatJson(members));
58
+ break;
59
+ case 'markdown':
60
+ console.log(formatMembersMarkdown(members));
61
+ break;
62
+ default:
63
+ console.log(formatMembers(members));
64
+ }
65
+ await disconnectClient();
66
+ }
67
+ catch (error) {
68
+ spinner.fail('Failed to fetch admins');
69
+ console.error(error instanceof Error ? error.message : error);
70
+ process.exit(1);
71
+ }
72
+ });
73
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/commands/members.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const readCommand: Command;
3
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,eAAO,MAAM,WAAW,SAiDpB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getMessages, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatMessages } from '../formatters/plain.js';
5
+ import { formatMessagesMarkdown } from '../formatters/markdown.js';
6
+ import { getOutputFormat } from '../formatters/index.js';
7
+ import ora from 'ora';
8
+ function parseTimeOffset(offset) {
9
+ const now = new Date();
10
+ const match = offset.match(/^(\d+)([mhd])$/);
11
+ if (!match) {
12
+ throw new Error(`Invalid time offset: ${offset}. Use format like "1h", "30m", "7d"`);
13
+ }
14
+ const value = parseInt(match[1]);
15
+ const unit = match[2];
16
+ switch (unit) {
17
+ case 'm':
18
+ return new Date(now.getTime() - value * 60 * 1000);
19
+ case 'h':
20
+ return new Date(now.getTime() - value * 60 * 60 * 1000);
21
+ case 'd':
22
+ return new Date(now.getTime() - value * 24 * 60 * 60 * 1000);
23
+ default:
24
+ throw new Error(`Unknown time unit: ${unit}`);
25
+ }
26
+ }
27
+ export const readCommand = new Command('read')
28
+ .description('Read messages from a chat')
29
+ .argument('<chat>', 'Chat name, username (@user), or ID')
30
+ .option('-n, --limit <number>', 'Number of messages to fetch', '50')
31
+ .option('--since <time>', 'Get messages since (e.g., "1h", "30m", "7d")')
32
+ .option('--until <time>', 'Get messages until (e.g., "1h", "30m", "7d")')
33
+ .option('--json', 'Output as JSON')
34
+ .option('--markdown', 'Output as Markdown')
35
+ .action(async (chat, options) => {
36
+ const spinner = ora(`Fetching messages from "${chat}"...`).start();
37
+ try {
38
+ const client = await getClient();
39
+ const fetchOptions = {
40
+ limit: parseInt(options.limit),
41
+ };
42
+ if (options.since) {
43
+ fetchOptions.minDate = parseTimeOffset(options.since);
44
+ }
45
+ if (options.until) {
46
+ fetchOptions.maxDate = parseTimeOffset(options.until);
47
+ }
48
+ const { messages, chatTitle } = await getMessages(client, chat, fetchOptions);
49
+ spinner.stop();
50
+ const format = getOutputFormat(options);
51
+ switch (format) {
52
+ case 'json':
53
+ console.log(formatJson({ chatTitle, messages }));
54
+ break;
55
+ case 'markdown':
56
+ console.log(formatMessagesMarkdown(messages, chatTitle));
57
+ break;
58
+ default:
59
+ console.log(formatMessages(messages, chatTitle));
60
+ }
61
+ await disconnectClient();
62
+ }
63
+ catch (error) {
64
+ spinner.fail('Failed to fetch messages');
65
+ console.error(error instanceof Error ? error.message : error);
66
+ process.exit(1);
67
+ }
68
+ });
69
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,qCAAqC,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACrD,KAAK,GAAG;YACN,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,KAAK,GAAG;YACN,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/D;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;KACxD,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,EAAE,IAAI,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC;KACxE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,MAAM,YAAY,GAAsC;YACtD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SAC/B,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,YAAY,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,YAAY,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAE9E,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;gBACzD,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const replyCommand: Command;
3
+ //# sourceMappingURL=reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../src/commands/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAgCrB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, sendMessage, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ export const replyCommand = new Command('reply')
7
+ .description('Reply to a message')
8
+ .argument('<chat>', 'Chat name, username (@user), or ID')
9
+ .argument('<msg-id>', 'Message ID to reply to')
10
+ .argument('<message>', 'Reply text')
11
+ .option('--json', 'Output as JSON')
12
+ .action(async (chat, msgId, message, options) => {
13
+ const spinner = ora('Sending reply...').start();
14
+ try {
15
+ const client = await getClient();
16
+ const result = await sendMessage(client, chat, message, parseInt(msgId));
17
+ spinner.succeed(chalk.green('Reply sent'));
18
+ if (options.json) {
19
+ console.log(formatJson({
20
+ id: result.id,
21
+ replyToMsgId: parseInt(msgId),
22
+ date: result.date ? new Date(result.date * 1000).toISOString() : null,
23
+ text: result.message,
24
+ }));
25
+ }
26
+ else {
27
+ console.log(chalk.gray(`Message ID: ${result.id}`));
28
+ }
29
+ await disconnectClient();
30
+ }
31
+ catch (error) {
32
+ spinner.fail('Failed to send reply');
33
+ console.error(error instanceof Error ? error.message : error);
34
+ process.exit(1);
35
+ }
36
+ });
37
+ //# sourceMappingURL=reply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.js","sourceRoot":"","sources":["../../src/commands/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,oBAAoB,CAAC;KACjC,QAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;KACxD,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC9C,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;KACnC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAE3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBACrB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;gBACrE,IAAI,EAAE,MAAM,CAAC,OAAO;aACrB,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const searchCommand: Command;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,aAAa,SA+CtB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, searchMessages, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatMessages } from '../formatters/plain.js';
5
+ import { formatMessagesMarkdown } from '../formatters/markdown.js';
6
+ import { getOutputFormat } from '../formatters/index.js';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ export const searchCommand = new Command('search')
10
+ .description('Search messages')
11
+ .argument('<query>', 'Search query')
12
+ .option('--chat <name>', 'Search within specific chat')
13
+ .option('--all', 'Search all chats (global search)')
14
+ .option('-n, --limit <number>', 'Maximum results', '50')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--markdown', 'Output as Markdown')
17
+ .action(async (query, options) => {
18
+ const scope = options.chat ? `"${options.chat}"` : 'all chats';
19
+ const spinner = ora(`Searching for "${query}" in ${scope}...`).start();
20
+ try {
21
+ const client = await getClient();
22
+ const results = await searchMessages(client, query, {
23
+ chat: options.chat,
24
+ limit: parseInt(options.limit),
25
+ });
26
+ spinner.stop();
27
+ const format = getOutputFormat(options);
28
+ if (format === 'json') {
29
+ console.log(formatJson(results));
30
+ }
31
+ else {
32
+ for (const result of results) {
33
+ if (result.messages.length === 0) {
34
+ console.log(chalk.yellow('No results found.'));
35
+ continue;
36
+ }
37
+ if (format === 'markdown') {
38
+ console.log(formatMessagesMarkdown(result.messages, result.chatTitle));
39
+ }
40
+ else {
41
+ console.log(formatMessages(result.messages, result.chatTitle));
42
+ }
43
+ }
44
+ }
45
+ await disconnectClient();
46
+ }
47
+ catch (error) {
48
+ spinner.fail('Search failed');
49
+ console.error(error instanceof Error ? error.message : error);
50
+ process.exit(1);
51
+ }
52
+ });
53
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const sendCommand: Command;
3
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SA8BpB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, sendMessage, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ export const sendCommand = new Command('send')
7
+ .description('Send a message')
8
+ .argument('<target>', 'Chat name, username (@user), or ID')
9
+ .argument('<message>', 'Message text')
10
+ .option('--json', 'Output as JSON')
11
+ .action(async (target, message, options) => {
12
+ const spinner = ora(`Sending message to "${target}"...`).start();
13
+ try {
14
+ const client = await getClient();
15
+ const result = await sendMessage(client, target, message);
16
+ spinner.succeed(chalk.green('Message sent'));
17
+ if (options.json) {
18
+ console.log(formatJson({
19
+ id: result.id,
20
+ date: result.date ? new Date(result.date * 1000).toISOString() : null,
21
+ text: result.message,
22
+ }));
23
+ }
24
+ else {
25
+ console.log(chalk.gray(`Message ID: ${result.id}`));
26
+ }
27
+ await disconnectClient();
28
+ }
29
+ catch (error) {
30
+ spinner.fail('Failed to send message');
31
+ console.error(error instanceof Error ? error.message : error);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,gBAAgB,CAAC;KAC7B,QAAQ,CAAC,UAAU,EAAE,oCAAoC,CAAC;KAC1D,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;KACrC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBACrB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;gBACrE,IAAI,EAAE,MAAM,CAAC,OAAO;aACrB,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const syncCommand: Command;
3
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAiGpB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getDialogs, getMessages, disconnectClient } from '../client.js';
3
+ import { writeFileSync, mkdirSync, existsSync } from 'fs';
4
+ import { join } from 'path';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ export const syncCommand = new Command('sync')
8
+ .description('Sync messages to markdown files')
9
+ .option('--days <number>', 'Number of days to sync', '7')
10
+ .option('--chat <name>', 'Sync specific chat only')
11
+ .option('--output <dir>', 'Output directory', './telegram-sync')
12
+ .action(async (options) => {
13
+ const spinner = ora('Starting sync...').start();
14
+ try {
15
+ const client = await getClient();
16
+ const outputDir = options.output;
17
+ if (!existsSync(outputDir)) {
18
+ mkdirSync(outputDir, { recursive: true });
19
+ }
20
+ const minDate = new Date();
21
+ minDate.setDate(minDate.getDate() - parseInt(options.days));
22
+ let chats;
23
+ if (options.chat) {
24
+ // Sync specific chat
25
+ const allChats = await getDialogs(client, 500);
26
+ chats = allChats.filter(c => c.title.toLowerCase().includes(options.chat.toLowerCase()));
27
+ if (chats.length === 0) {
28
+ spinner.fail(`No chat found matching "${options.chat}"`);
29
+ await disconnectClient();
30
+ return;
31
+ }
32
+ }
33
+ else {
34
+ // Sync all chats with recent activity
35
+ chats = await getDialogs(client, 100);
36
+ }
37
+ spinner.text = `Syncing ${chats.length} chats...`;
38
+ let synced = 0;
39
+ for (const chat of chats) {
40
+ try {
41
+ spinner.text = `Syncing "${chat.title}"...`;
42
+ const { messages } = await getMessages(client, chat.title, {
43
+ limit: 1000,
44
+ minDate,
45
+ });
46
+ if (messages.length === 0) {
47
+ continue;
48
+ }
49
+ // Generate markdown
50
+ const lines = [];
51
+ lines.push(`# ${chat.title}`);
52
+ lines.push(`\nType: ${chat.type}`);
53
+ if (chat.username) {
54
+ lines.push(`Username: @${chat.username}`);
55
+ }
56
+ lines.push(`\nSynced: ${new Date().toISOString()}`);
57
+ lines.push(`Messages: ${messages.length}`);
58
+ lines.push('\n---\n');
59
+ // Sort messages chronologically
60
+ messages.sort((a, b) => a.date.getTime() - b.date.getTime());
61
+ for (const msg of messages) {
62
+ const time = msg.date.toISOString().replace('T', ' ').substring(0, 19);
63
+ const sender = msg.isOutgoing ? 'You' : msg.sender;
64
+ const reply = msg.replyToMsgId ? ` (reply to #${msg.replyToMsgId})` : '';
65
+ lines.push(`**${sender}** - ${time}${reply}`);
66
+ lines.push(`> ${msg.text || '(no text)'}`);
67
+ lines.push(`*#${msg.id}*\n`);
68
+ }
69
+ // Write file
70
+ const safeTitle = chat.title.replace(/[/\\?%*:|"<>]/g, '-');
71
+ const filename = `${safeTitle}.md`;
72
+ writeFileSync(join(outputDir, filename), lines.join('\n'));
73
+ synced++;
74
+ }
75
+ catch (error) {
76
+ // Skip chats that fail
77
+ console.error(chalk.yellow(`\nWarning: Could not sync "${chat.title}": ${error instanceof Error ? error.message : error}`));
78
+ }
79
+ }
80
+ spinner.succeed(chalk.green(`Synced ${synced} chats to ${outputDir}`));
81
+ await disconnectClient();
82
+ }
83
+ catch (error) {
84
+ spinner.fail('Sync failed');
85
+ console.error(error instanceof Error ? error.message : error);
86
+ process.exit(1);
87
+ }
88
+ });
89
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const whoamiCommand: Command;
3
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAmCtB,CAAC"}