@will-17173/telegram-cli 0.2.0 → 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.
- package/README.md +65 -9
- package/README.zh-CN.md +64 -9
- package/dist/cli/app.js +1 -1
- package/dist/commands/account.js +48 -4
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/group-write.js +88 -0
- package/dist/commands/group-write.js.map +1 -0
- package/dist/commands/group.js +20 -6
- package/dist/commands/group.js.map +1 -1
- package/dist/commands/telegram.js +90 -71
- package/dist/commands/telegram.js.map +1 -1
- package/dist/group-commands/catalog.js +69 -0
- package/dist/group-commands/catalog.js.map +1 -0
- package/dist/group-commands/executor.js +93 -0
- package/dist/group-commands/executor.js.map +1 -0
- package/dist/group-commands/parser.js +268 -0
- package/dist/group-commands/parser.js.map +1 -0
- package/dist/group-commands/tokenize.js +51 -0
- package/dist/group-commands/tokenize.js.map +1 -0
- package/dist/group-commands/types.js +2 -0
- package/dist/group-commands/types.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/listen-commands/catalog.js +61 -0
- package/dist/listen-commands/catalog.js.map +1 -0
- package/dist/listen-commands/dispatch.js +46 -0
- package/dist/listen-commands/dispatch.js.map +1 -0
- package/dist/listen-commands/match.js +113 -0
- package/dist/listen-commands/match.js.map +1 -0
- package/dist/presenters/group.js +24 -0
- package/dist/presenters/group.js.map +1 -1
- package/dist/presenters/human.js +22 -0
- package/dist/presenters/human.js.map +1 -1
- package/dist/presenters/ink/display-width.js +45 -7
- package/dist/presenters/ink/display-width.js.map +1 -1
- package/dist/presenters/ink/group-command-confirm.js +13 -0
- package/dist/presenters/ink/group-command-confirm.js.map +1 -0
- package/dist/presenters/ink/group-command-result.js +21 -0
- package/dist/presenters/ink/group-command-result.js.map +1 -0
- package/dist/presenters/ink/listen-command-menu.js +38 -0
- package/dist/presenters/ink/listen-command-menu.js.map +1 -0
- package/dist/presenters/ink/listen-scroll.js +5 -1
- package/dist/presenters/ink/listen-scroll.js.map +1 -1
- package/dist/presenters/ink/listen.js +445 -45
- package/dist/presenters/ink/listen.js.map +1 -1
- package/dist/presenters/ink/use-group-command.js +125 -0
- package/dist/presenters/ink/use-group-command.js.map +1 -0
- package/dist/presenters/listen-message.js +23 -6
- package/dist/presenters/listen-message.js.map +1 -1
- package/dist/presenters/logical-message.js +78 -0
- package/dist/presenters/logical-message.js.map +1 -0
- package/dist/services/group-service.js.map +1 -1
- package/dist/services/group-write-service.js +165 -0
- package/dist/services/group-write-service.js.map +1 -0
- package/dist/services/listen-album-aggregator.js +9 -29
- package/dist/services/listen-album-aggregator.js.map +1 -1
- package/dist/services/listen-attachment.js +23 -6
- package/dist/services/listen-attachment.js.map +1 -1
- package/dist/services/listen-composer-command.js +102 -0
- package/dist/services/listen-composer-command.js.map +1 -0
- package/dist/services/listen-reply-resolver.js +126 -0
- package/dist/services/listen-reply-resolver.js.map +1 -0
- package/dist/services/query-service.js +59 -3
- package/dist/services/query-service.js.map +1 -1
- package/dist/services/reply-context.js +29 -0
- package/dist/services/reply-context.js.map +1 -0
- package/dist/storage/message-db.js +241 -5
- package/dist/storage/message-db.js.map +1 -1
- package/dist/telegram/fake-group-management.js +117 -0
- package/dist/telegram/fake-group-management.js.map +1 -1
- package/dist/telegram/group-types.js +40 -0
- package/dist/telegram/group-types.js.map +1 -1
- package/dist/telegram/group-write-types.js +2 -0
- package/dist/telegram/group-write-types.js.map +1 -0
- package/dist/telegram/mtcute-client.js +1 -1
- package/dist/telegram/mtcute-client.js.map +1 -1
- package/dist/telegram/mtcute-group-helpers.js +56 -0
- package/dist/telegram/mtcute-group-helpers.js.map +1 -0
- package/dist/telegram/mtcute-group-invites.js +82 -0
- package/dist/telegram/mtcute-group-invites.js.map +1 -0
- package/dist/telegram/mtcute-group-management.js +60 -31
- package/dist/telegram/mtcute-group-management.js.map +1 -1
- package/dist/telegram/mtcute-group-members.js +118 -0
- package/dist/telegram/mtcute-group-members.js.map +1 -0
- package/dist/telegram/mtcute-group-settings.js +146 -0
- package/dist/telegram/mtcute-group-settings.js.map +1 -0
- package/dist/telegram/mtcute-group-topics.js +63 -0
- package/dist/telegram/mtcute-group-topics.js.map +1 -0
- package/dist/telegram/raw-message.js +46 -0
- package/dist/telegram/raw-message.js.map +1 -0
- package/package.json +20 -10
package/README.md
CHANGED
|
@@ -7,14 +7,14 @@ A TypeScript command-line client for syncing Telegram chats, listening to live m
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- Sign in to Telegram and inspect the current account or available chats.
|
|
10
|
-
- Manage multiple Telegram accounts with isolated sessions and
|
|
10
|
+
- Manage multiple Telegram accounts with isolated sessions, message databases, and interactive account switching.
|
|
11
11
|
- Fetch chat history into a local SQLite database for fast, offline search.
|
|
12
12
|
- Sync one chat incrementally or sync many chats with a single command.
|
|
13
13
|
- Listen for new messages in real time, with optional attachment summaries.
|
|
14
14
|
- Download attachments from channels that restrict content saving.
|
|
15
|
-
- Search, filter, summarize, and export locally stored messages.
|
|
15
|
+
- Search, filter, summarize, and export locally stored messages, with reply context and media-group summaries in recent results.
|
|
16
16
|
- Send, edit, and delete messages from the command line.
|
|
17
|
-
- Inspect
|
|
17
|
+
- Inspect and manage groups, members, administrators, invites, forum topics, and messages.
|
|
18
18
|
- Use human-readable output or structured JSON/YAML where supported.
|
|
19
19
|
|
|
20
20
|
## Built for AI agents
|
|
@@ -34,6 +34,17 @@ For example, an agent can search one account and parse the result as JSON:
|
|
|
34
34
|
tg search "release" --account work --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
### Agent skill
|
|
38
|
+
|
|
39
|
+
Install the [`using-telegram-cli`](https://skills.sh/will-17173/telegram-cli/using-telegram-cli) skill to teach a supported AI coding agent how to authenticate accounts, synchronize and query messages, automate structured output, and guard Telegram write operations:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npx skills add https://github.com/will-17173/telegram-cli \
|
|
43
|
+
--skill using-telegram-cli
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Add `--global` to make the skill available across projects instead of installing it into the current project.
|
|
47
|
+
|
|
37
48
|
## Installation
|
|
38
49
|
|
|
39
50
|
Telegram CLI requires Node.js 22 or later.
|
|
@@ -166,13 +177,18 @@ tg account list
|
|
|
166
177
|
# Show the current account
|
|
167
178
|
tg account current
|
|
168
179
|
|
|
169
|
-
#
|
|
180
|
+
# Choose the default account from an interactive list
|
|
181
|
+
tg account switch
|
|
182
|
+
|
|
183
|
+
# Set the default account by name
|
|
170
184
|
tg account switch <name>
|
|
171
185
|
|
|
172
186
|
# Remove an account and its local session/data
|
|
173
187
|
tg account remove <name> --force
|
|
174
188
|
```
|
|
175
189
|
|
|
190
|
+
In an interactive terminal, `tg account switch` lists registered accounts, marks the current one, and accepts its number. Pass `<name>` when scripting or using `--json`, `--yaml`, or non-interactive input.
|
|
191
|
+
|
|
176
192
|
Commands use the current account by default. Commands that support `--account` can target another registered account for one invocation without changing the current account:
|
|
177
193
|
|
|
178
194
|
```sh
|
|
@@ -185,9 +201,9 @@ Account names are shown by `tg account list`; they are normally derived from the
|
|
|
185
201
|
|
|
186
202
|
Telegram API credentials apply to every registered account. You don't need to configure separate API credentials when adding another account.
|
|
187
203
|
|
|
188
|
-
##
|
|
204
|
+
## Group management
|
|
189
205
|
|
|
190
|
-
The `group` command
|
|
206
|
+
The `group` command keeps read-only inspection alongside management families for members, administrators, chat settings, invite links, forum topics, and messages. Use family help to see the current actions:
|
|
191
207
|
|
|
192
208
|
```sh
|
|
193
209
|
# Group details
|
|
@@ -201,20 +217,56 @@ tg group member <chat> <user>
|
|
|
201
217
|
|
|
202
218
|
# Administrator audit log; --user and --type can be repeated
|
|
203
219
|
tg group audit <chat> --query invite --user <user> --type member_invited --type invite_changed --limit 100 --account alice --json
|
|
220
|
+
|
|
221
|
+
# Management examples (the chat argument comes before action arguments)
|
|
222
|
+
tg group member ban @team @alice --yes
|
|
223
|
+
tg group chat slowmode @team 30s
|
|
224
|
+
tg group topic --help
|
|
204
225
|
```
|
|
205
226
|
|
|
206
227
|
`group members` accepts exactly these seven `--type` filters: `recent`, `all`, `admins`, `banned`, `restricted`, `bots`, and `contacts`. It defaults to `recent` and 100 results; `--limit` accepts 1 through 200. Telegram can return fewer members than its reported total, so a page is not guaranteed to enumerate the whole group.
|
|
207
228
|
|
|
208
229
|
`group audit` requires group administrator rights. Its `--limit` range is 1 through 500, with a default of 100 events. Its repeatable `--user` filter selects action authors. The repeatable `--type` filter accepts exactly these 17 stable grouped event types: `info_changed`, `settings_changed`, `member_joined`, `member_left`, `member_invited`, `member_banned`, `member_unbanned`, `member_restricted`, `member_unrestricted`, `admin_promoted`, `admin_demoted`, `message_deleted`, `message_edited`, `message_pinned`, `invite_changed`, `topic_changed`, and `other`.
|
|
209
230
|
|
|
210
|
-
|
|
231
|
+
Inspection and management actions use human-readable output by default; actions that expose `--json` or `--yaml` provide structured success or error output. Failures set a nonzero exit status. They use the current account unless `--account <name>` selects another registered account for that invocation.
|
|
232
|
+
|
|
233
|
+
Management actions are grouped under `member`, `admin`, `chat`, `invite`, `topic`, and `message`. Member targets must be explicit `@username` values or numeric Telegram user IDs. Durations accept `s`, `m`, `h`, and `d` suffixes, or `off` where disabling is supported. For example, `tg group member mute @team @alice 2h --yes` temporarily mutes a member, while `tg group chat slowmode @team off` disables slow mode.
|
|
234
|
+
|
|
235
|
+
Potentially destructive CLI actions refuse to connect to Telegram unless `--yes` is present. Permanently deleting a chat additionally requires `--confirm-title` with the exact current title. Interactive listen mode presents these confirmations in an Ink modal. Management requires the relevant administrator permission, and some actions require a supergroup, forum, or creator role. Ownership transfer currently reports `password_required` when Telegram requires a password; this release does not accept a password for that action.
|
|
236
|
+
|
|
237
|
+
Use `tg group member info <chat> <user>` as the canonical member-details route. The legacy `tg group member <chat> <user>` form remains available, but a chat name matching a reserved member action such as `ban`, `mute`, or `info` is ambiguous and requires the canonical route.
|
|
238
|
+
|
|
239
|
+
## Slash commands while listening
|
|
240
|
+
|
|
241
|
+
Interactive `tg listen` presents every supported slash command in one menu. This includes `/reply` and the complete group-management catalog; group commands use the same management grammar without repeating the selected chat:
|
|
242
|
+
|
|
243
|
+
```text
|
|
244
|
+
/reply <message-id> <content>
|
|
245
|
+
/member mute @alice 2h
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Typing `/` opens the unified command menu, with reply first. Matching ranks exact paths, prefixes, then ordered fuzzy matches, so `/rep` and `/rpy` find `/reply`, while `/ban` finds `/member ban`. Use Up/Down to move through matches. Tab completes the selected command; Enter also completes an incomplete selection, or runs a complete command. Esc closes the menu, result, or confirmation.
|
|
249
|
+
|
|
250
|
+
Group-command availability and permission checks are unchanged: unavailable actions remain disabled, risky actions open a confirmation modal, and chat deletion also asks for the exact title. When listening to more than one chat, set an unambiguous outgoing target with `--send-to <chat>` before using group commands, for example `tg listen @team @ops --send-to @team`.
|
|
211
251
|
|
|
212
252
|
## Online and local commands
|
|
213
253
|
|
|
214
|
-
Online commands connect to Telegram and require a valid session. These include `status`, `whoami`, `chats`, `history`, `sync`, `sync-all`, `refresh`, `info`, `group
|
|
254
|
+
Online commands connect to Telegram and require a valid session. These include `status`, `whoami`, `chats`, `history`, `sync`, `sync-all`, `refresh`, `info`, all `group` inspection and management families, `send`, `edit`, `delete`, and `listen`.
|
|
215
255
|
|
|
216
256
|
Local commands read or modify the selected account's message database without connecting to Telegram. These include `search`, `recent`, `stats`, `top`, `timeline`, `today`, `filter`, `export`, and `purge`.
|
|
217
257
|
|
|
258
|
+
## Review recent messages
|
|
259
|
+
|
|
260
|
+
`tg recent` shows messages stored during the last 24 hours, with a default limit of 50. Filter the results by chat or sender, or change the time window and limit:
|
|
261
|
+
|
|
262
|
+
```sh
|
|
263
|
+
tg recent --chat <chat> --sender <sender> --hours 6 --limit 100
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Human-readable output groups each Telegram media group into one row and summarizes its attachments. The `ID` column lists every source message ID in that row. Replies include the original message's time, sender, ID, and text when the target exists locally in the same chat. Otherwise, the output identifies the missing local message ID.
|
|
267
|
+
|
|
268
|
+
JSON and YAML output keep the stored-message structure for scripts. `recent` reads local SQLite data and does not connect to Telegram.
|
|
269
|
+
|
|
218
270
|
## Command reference
|
|
219
271
|
|
|
220
272
|
Run the built-in help for the complete, current command list:
|
|
@@ -230,7 +282,7 @@ Common commands:
|
|
|
230
282
|
| `tg account add` | Authenticate and register another Telegram account. |
|
|
231
283
|
| `tg account list` | List registered accounts and show which one is current. |
|
|
232
284
|
| `tg account current` | Show the current account. |
|
|
233
|
-
| `tg account switch
|
|
285
|
+
| `tg account switch [name]` | Select the default account interactively or set it by name. |
|
|
234
286
|
| `tg account remove <name> --force` | Remove an account and its local session/data. |
|
|
235
287
|
| `tg status` | Check whether the Telegram account is authenticated. |
|
|
236
288
|
| `tg whoami` | Show basic authenticated account information. |
|
|
@@ -258,6 +310,7 @@ Common commands:
|
|
|
258
310
|
| `tg group members <chat> [--type <type>] [--query <text>] [--limit <count>]` | List and filter members (default `recent`, limit 100; maximum 200). |
|
|
259
311
|
| `tg group member <chat> <user>` | Show one member's role, rights, and restrictions. |
|
|
260
312
|
| `tg group audit <chat> [--query <text>] [--user <user>] [--type <type>] [--limit <count>]` | Query the administrator audit log (default 100; maximum 500). |
|
|
313
|
+
| `tg group member/admin/chat/invite/topic/message --help` | Discover group management actions by family. |
|
|
261
314
|
|
|
262
315
|
All sync-like commands write to local SQLite storage. The `sync-all` and `refresh` commands process multiple chats based on locally stored message IDs.
|
|
263
316
|
|
|
@@ -278,6 +331,9 @@ Use `tg <command> --help` to inspect command-specific options. For example, `lis
|
|
|
278
331
|
|
|
279
332
|
- `sync-all` and `refresh` are batch operations for local persistence; they are not read-only.
|
|
280
333
|
- `listen` prints a concise separator for each incoming message and can optionally suppress attachment summaries.
|
|
334
|
+
- Telegram media groups appear as one incoming message with a combined attachment summary.
|
|
335
|
+
- Reply output includes the original message's local context when available, or identifies the missing message ID.
|
|
336
|
+
- In interactive `listen`, reply with `/reply <message-id> <content>`. Add attachments with repeatable `--file <path>` options; quote paths that contain spaces.
|
|
281
337
|
- Contact cards show the available name and phone number in attachment summaries. They aren't downloadable attachments and are hidden by `--no-media`.
|
|
282
338
|
- `listen --auto-download` works in both interactive and plain-text modes, saves attachments to `~/Downloads/telegram-cli`, and runs at most three downloads concurrently.
|
|
283
339
|
- Downloads keep Telegram-provided filenames. Unnamed downloads use a MIME-derived extension, then the media-kind extension, then `.bin`.
|
package/README.zh-CN.md
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
## 功能
|
|
8
8
|
|
|
9
9
|
- 登录 Telegram,并查看当前账户或可用聊天列表。
|
|
10
|
-
- 管理多个 Telegram
|
|
10
|
+
- 管理多个 Telegram 账号,每个账号使用独立的会话和消息数据库,并支持交互式切换。
|
|
11
11
|
- 将聊天记录提取到本地 SQLite 数据库,以便快速离线搜索。
|
|
12
12
|
- 通过增量同步和批量同步命令更新本地数据。
|
|
13
13
|
- 监听实时消息,并可选显示附件摘要。
|
|
14
14
|
- 从限制下载的频道中下载附件。
|
|
15
|
-
-
|
|
15
|
+
- 搜索、筛选、汇总和导出本地消息,并在最近消息中显示回复上下文和媒体组摘要。
|
|
16
16
|
- 通过命令行发送、编辑和删除消息。
|
|
17
|
-
-
|
|
17
|
+
- 查看并管理群组、成员、管理员、邀请链接、论坛话题和消息。
|
|
18
18
|
- 在支持的场景下使用人类可读输出,或结构化的 JSON/YAML 输出。
|
|
19
19
|
|
|
20
20
|
## 为 AI Agent 设计
|
|
@@ -34,6 +34,17 @@ Telegram CLI 为 AI Agent 提供基于命令的 Telegram 和本地消息访问
|
|
|
34
34
|
tg search "release" --account work --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
### Agent Skill
|
|
38
|
+
|
|
39
|
+
安装 [`using-telegram-cli`](https://skills.sh/will-17173/telegram-cli/using-telegram-cli) 技能,可以指导受支持的 AI 编程 Agent 完成账号认证、消息同步与查询、结构化输出自动化,并安全处理 Telegram 写操作:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npx skills add https://github.com/will-17173/telegram-cli \
|
|
43
|
+
--skill using-telegram-cli
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
如需让技能跨项目可用,请添加 `--global`,避免将其安装到当前项目中。
|
|
47
|
+
|
|
37
48
|
## 安装
|
|
38
49
|
|
|
39
50
|
Telegram CLI 需要 Node.js 22 或更高版本。
|
|
@@ -166,13 +177,18 @@ tg account list
|
|
|
166
177
|
# 查看 current 账号
|
|
167
178
|
tg account current
|
|
168
179
|
|
|
169
|
-
#
|
|
180
|
+
# 从交互式列表中选择默认账号
|
|
181
|
+
tg account switch
|
|
182
|
+
|
|
183
|
+
# 按名称设置默认账号
|
|
170
184
|
tg account switch <name>
|
|
171
185
|
|
|
172
186
|
# 删除账号及其本地会话和数据
|
|
173
187
|
tg account remove <name> --force
|
|
174
188
|
```
|
|
175
189
|
|
|
190
|
+
在交互式终端中,`tg account switch` 会列出已添加账号、标记 current 账号,并接受账号序号。编写脚本或使用 `--json`、`--yaml`、非交互式输入时,请传入 `<name>`。
|
|
191
|
+
|
|
176
192
|
各命令默认使用 current 账号。支持 `--account` 的命令可以临时指定另一个已添加的账号,且不会改变 current 账号:
|
|
177
193
|
|
|
178
194
|
```sh
|
|
@@ -185,9 +201,9 @@ tg search "keyword" --account <name>
|
|
|
185
201
|
|
|
186
202
|
Telegram API 凭据对所有已添加账号生效,添加其他账号时无需单独配置 API 凭据。
|
|
187
203
|
|
|
188
|
-
##
|
|
204
|
+
## 群组管理
|
|
189
205
|
|
|
190
|
-
`group`
|
|
206
|
+
`group` 命令同时提供只读查询,以及成员、管理员、群设置、邀请链接、论坛话题和消息管理。请通过各 family 的帮助查看当前操作:
|
|
191
207
|
|
|
192
208
|
```sh
|
|
193
209
|
# 群组详情
|
|
@@ -201,20 +217,56 @@ tg group member <chat> <user>
|
|
|
201
217
|
|
|
202
218
|
# 管理员审计日志;--user 和 --type 均可重复指定
|
|
203
219
|
tg group audit <chat> --query invite --user <user> --type member_invited --type invite_changed --limit 100 --account alice --json
|
|
220
|
+
|
|
221
|
+
# 管理示例(chat 参数位于操作参数之前)
|
|
222
|
+
tg group member ban @team @alice --yes
|
|
223
|
+
tg group chat slowmode @team 30s
|
|
224
|
+
tg group topic --help
|
|
204
225
|
```
|
|
205
226
|
|
|
206
227
|
`group members` 的 `--type` 恰好支持以下七种筛选器:`recent`、`all`、`admins`、`banned`、`restricted`、`bots` 和 `contacts`。默认使用 `recent` 并返回 100 条结果;`--limit` 可设为 1 到 200。Telegram 可能返回少于其报告总数的成员,因此单页结果不保证包含整个群组的全部成员。
|
|
207
228
|
|
|
208
229
|
`group audit` 要求当前账号具有群组管理员权限。`--limit` 的范围是 1 到 500,默认返回 100 条事件。可重复的 `--user` 用于筛选操作发起者。可重复的 `--type` 恰好接受以下 17 种稳定的分组事件类型:`info_changed`、`settings_changed`、`member_joined`、`member_left`、`member_invited`、`member_banned`、`member_unbanned`、`member_restricted`、`member_unrestricted`、`admin_promoted`、`admin_demoted`、`message_deleted`、`message_edited`、`message_pinned`、`invite_changed`、`topic_changed` 和 `other`。
|
|
209
230
|
|
|
210
|
-
|
|
231
|
+
查询和管理操作默认输出人类可读内容;暴露 `--json` 或 `--yaml` 的操作会输出结构化成功或错误结果。失败时进程退出状态非零。命令默认使用 current 账号;`--account <name>` 可仅为本次调用选择另一个已添加账号,且不会改变 current 账号。
|
|
232
|
+
|
|
233
|
+
管理操作分为 `member`、`admin`、`chat`、`invite`、`topic` 和 `message` 六个 family。成员目标必须显式使用 `@username` 或 Telegram 数字用户 ID。时长支持 `s`、`m`、`h`、`d` 后缀;支持关闭的设置还可使用 `off`。例如 `tg group member mute @team @alice 2h --yes` 会临时禁言,`tg group chat slowmode @team off` 会关闭慢速模式。
|
|
234
|
+
|
|
235
|
+
有破坏风险的 CLI 操作在缺少 `--yes` 时会直接拒绝,且不会连接 Telegram。永久删除群组还必须用 `--confirm-title` 提供完全一致的当前群名;交互式 listen 模式则通过 Ink 弹窗确认。管理操作需要对应的管理员权限,部分操作还要求超级群组、论坛或 creator 身份。转移所有权时,如果 Telegram 要求密码,本版本只返回 `password_required`,尚不接收密码。
|
|
236
|
+
|
|
237
|
+
查询成员详情请优先使用规范路由 `tg group member info <chat> <user>`。旧形式 `tg group member <chat> <user>` 仍保留,但当群名等于 `ban`、`mute`、`info` 等保留操作名时会产生歧义,必须使用规范路由。
|
|
238
|
+
|
|
239
|
+
## Listen 中的斜杠命令
|
|
240
|
+
|
|
241
|
+
交互式 `tg listen` 会在同一个菜单中展示所有支持的斜杠命令,包括 `/reply` 和完整的群管理命令目录。群管理命令沿用原有语法,无需重复当前群组:
|
|
242
|
+
|
|
243
|
+
```text
|
|
244
|
+
/reply <消息ID> <内容>
|
|
245
|
+
/member mute @alice 2h
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
输入 `/` 会打开统一命令菜单,并优先显示 reply。匹配顺序依次为完整匹配、前缀匹配和有序模糊匹配,因此 `/rep`、`/rpy` 都能找到 `/reply`,`/ban` 能找到 `/member ban`。使用 Up/Down 移动;Tab 补全选中的命令;对于尚未补全的命令,Enter 也会先补全,否则执行完整命令;Esc 关闭菜单、结果或确认框。
|
|
249
|
+
|
|
250
|
+
群管理命令原有的可用性和权限检查保持不变:不可用操作仍会禁用,有风险的操作会打开确认弹窗,删除群组还会要求输入完全一致的群名。监听多个群组时,必须先用 `--send-to <chat>` 明确发送目标,例如 `tg listen @team @ops --send-to @team`,之后才能使用群管理命令。
|
|
211
251
|
|
|
212
252
|
## 在线命令与本地命令
|
|
213
253
|
|
|
214
|
-
在线命令会连接 Telegram,因此需要有效的账号会话。这类命令包括 `status`、`whoami`、`chats`、`history`、`sync`、`sync-all`、`refresh`、`info
|
|
254
|
+
在线命令会连接 Telegram,因此需要有效的账号会话。这类命令包括 `status`、`whoami`、`chats`、`history`、`sync`、`sync-all`、`refresh`、`info`、全部 `group` 查询与管理 family、`send`、`edit`、`delete` 和 `listen`。
|
|
215
255
|
|
|
216
256
|
本地命令只读取或修改所选账号的消息数据库,不会连接 Telegram。这类命令包括 `search`、`recent`、`stats`、`top`、`timeline`、`today`、`filter`、`export` 和 `purge`。
|
|
217
257
|
|
|
258
|
+
## 查看最近消息
|
|
259
|
+
|
|
260
|
+
`tg recent` 默认显示最近 24 小时内存储的 50 条消息。你可以按聊天或发送者筛选,也可以调整时间范围和数量:
|
|
261
|
+
|
|
262
|
+
```sh
|
|
263
|
+
tg recent --chat <chat> --sender <sender> --hours 6 --limit 100
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
人类可读输出会将每个 Telegram 媒体组合并为一行,并汇总其中的附件。`ID` 列列出该行包含的所有原始消息 ID。如果回复目标已存储在本地同一聊天中,输出会显示原消息的时间、发送者、ID 和文本。否则会标出本地缺失的消息 ID。
|
|
267
|
+
|
|
268
|
+
JSON 和 YAML 输出保留已存储消息的结构,便于脚本处理。`recent` 只读取本地 SQLite 数据,不会连接 Telegram。
|
|
269
|
+
|
|
218
270
|
## 命令参考
|
|
219
271
|
|
|
220
272
|
运行内置帮助以查看完整且最新的命令列表:
|
|
@@ -230,7 +282,7 @@ tg --help
|
|
|
230
282
|
| `tg account add` | 登录并添加另一个 Telegram 账号。 |
|
|
231
283
|
| `tg account list` | 列出已添加的账号及 current 状态。 |
|
|
232
284
|
| `tg account current` | 查看 current 账号。 |
|
|
233
|
-
| `tg account switch
|
|
285
|
+
| `tg account switch [name]` | 交互式选择默认账号,或按名称设置账号。 |
|
|
234
286
|
| `tg account remove <name> --force` | 删除账号及其本地会话和数据。 |
|
|
235
287
|
| `tg whoami` | 显示当前登录账号的基本信息。 |
|
|
236
288
|
| `tg config set --api-id <id> --api-hash <hash>` | 持久化保存 Telegram API 凭据。 |
|
|
@@ -278,6 +330,9 @@ tg --help
|
|
|
278
330
|
|
|
279
331
|
- `sync-all` 和 `refresh` 是写入本地数据库的批量同步流程,不是只读命令。
|
|
280
332
|
- `listen` 会实时打印每条到达消息;可用 `--no-media` 关闭附件摘要显示。
|
|
333
|
+
- Telegram 媒体组会显示为一条收到的消息,并合并附件摘要。
|
|
334
|
+
- 回复输出会在本地原消息可用时显示其上下文,否则标出缺失的消息 ID。
|
|
335
|
+
- 在交互式 `listen` 中,可用 `/reply <消息ID> <内容>` 回复消息;通过可重复的 `--file <路径>` 添加附件,包含空格的路径需要使用引号。
|
|
281
336
|
- 联系人卡片会在附件摘要中显示可用的姓名和手机号。联系人卡片不属于可下载附件,使用 `--no-media` 时不会显示。
|
|
282
337
|
- `listen --auto-download` 同时支持交互式和纯文本模式,附件保存在 `~/Downloads/telegram-cli`,最多同时下载 3 个附件。
|
|
283
338
|
- 下载时保留 Telegram 提供的文件名。无文件名时,依次根据 MIME 类型、媒体类型推断扩展名,最后回退为 `.bin`。
|
package/dist/cli/app.js
CHANGED
|
@@ -11,7 +11,7 @@ export function createApp() {
|
|
|
11
11
|
.description('Telegram CLI for syncing chats, searching messages, and local analysis.')
|
|
12
12
|
.option('-v, --verbose', 'Enable debug logging')
|
|
13
13
|
.option('--account <account>', 'Select an account for account-dependent commands')
|
|
14
|
-
.version('0.
|
|
14
|
+
.version('0.3.0');
|
|
15
15
|
registerQueryCommands(app);
|
|
16
16
|
registerDataCommands(app);
|
|
17
17
|
registerTelegramCommands(app);
|
package/dist/commands/account.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdtempSync, mkdirSync, renameSync, rmSync, existsSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { createInterface } from 'node:readline/promises';
|
|
4
5
|
import { TelegramClient } from '@mtcute/node';
|
|
5
6
|
import { getAccountRegistryPath, getDataDir, getTelegramCredentials, getTelegramProxy } from '../config/env.js';
|
|
6
7
|
import { AccountStore } from '../account/account-store.js';
|
|
@@ -117,22 +118,25 @@ export function registerAccountCommands(app) {
|
|
|
117
118
|
};
|
|
118
119
|
});
|
|
119
120
|
});
|
|
120
|
-
account.command('switch
|
|
121
|
+
account.command('switch [name]')
|
|
121
122
|
.description('Set the default account')
|
|
122
123
|
.option('--json')
|
|
123
124
|
.option('--yaml')
|
|
124
125
|
.action(async (name, options) => {
|
|
125
126
|
await runAccountCommand(options, async () => {
|
|
126
127
|
const store = new AccountStore(getAccountRegistryPath());
|
|
128
|
+
const selectedName = name ?? await promptForAccount(store, options);
|
|
129
|
+
if (typeof selectedName !== 'string')
|
|
130
|
+
return selectedName;
|
|
127
131
|
const current = await store.withLock(() => {
|
|
128
132
|
const registry = store.read();
|
|
129
|
-
if (!registry.accounts.some((account) => account.name ===
|
|
133
|
+
if (!registry.accounts.some((account) => account.name === selectedName)) {
|
|
130
134
|
return {
|
|
131
135
|
code: 'account_not_found',
|
|
132
|
-
message: `Account "${
|
|
136
|
+
message: `Account "${selectedName}" is not registered.`,
|
|
133
137
|
};
|
|
134
138
|
}
|
|
135
|
-
const next = { ...registry, current_account:
|
|
139
|
+
const next = { ...registry, current_account: selectedName };
|
|
136
140
|
store.write(next);
|
|
137
141
|
return {
|
|
138
142
|
code: null,
|
|
@@ -272,6 +276,46 @@ export function registerAccountCommands(app) {
|
|
|
272
276
|
});
|
|
273
277
|
});
|
|
274
278
|
}
|
|
279
|
+
async function promptForAccount(store, options) {
|
|
280
|
+
if (options.json || options.yaml || process.stdin.isTTY !== true) {
|
|
281
|
+
return {
|
|
282
|
+
ok: false,
|
|
283
|
+
error: {
|
|
284
|
+
code: 'account_required',
|
|
285
|
+
message: 'Provide an account name, or run tg account switch in an interactive terminal.',
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const registry = store.read();
|
|
290
|
+
if (registry.accounts.length === 0) {
|
|
291
|
+
return {
|
|
292
|
+
ok: false,
|
|
293
|
+
error: {
|
|
294
|
+
code: 'account_not_found',
|
|
295
|
+
message: 'No registered accounts found. Add one with tg account add.',
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
process.stdout.write('Select an account:\n');
|
|
300
|
+
for (const [index, account] of registry.accounts.entries()) {
|
|
301
|
+
const current = account.name === registry.current_account ? ' (current)' : '';
|
|
302
|
+
process.stdout.write(`${index + 1}. ${account.name} — ${normalizeDisplayName(account.display_name)}${current}\n`);
|
|
303
|
+
}
|
|
304
|
+
const prompt = createInterface({ input: process.stdin, output: process.stdout });
|
|
305
|
+
try {
|
|
306
|
+
while (true) {
|
|
307
|
+
const answer = (await prompt.question('Account number: ')).trim();
|
|
308
|
+
const selectedIndex = Number(answer) - 1;
|
|
309
|
+
const selected = Number.isInteger(selectedIndex) ? registry.accounts[selectedIndex] : undefined;
|
|
310
|
+
if (selected)
|
|
311
|
+
return selected.name;
|
|
312
|
+
process.stdout.write(`Enter a number from 1 to ${registry.accounts.length}.\n`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
finally {
|
|
316
|
+
prompt.close();
|
|
317
|
+
}
|
|
318
|
+
}
|
|
275
319
|
async function runAccountCommand(options, handler) {
|
|
276
320
|
const conflict = outputFormatConflict(options);
|
|
277
321
|
if (conflict) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { renderResult } from '../cli/output.js';
|
|
2
|
+
import { GROUP_COMMANDS } from '../group-commands/catalog.js';
|
|
3
|
+
import { executeGroupCommand } from '../group-commands/executor.js';
|
|
4
|
+
import { parseGroupCommand } from '../group-commands/parser.js';
|
|
5
|
+
import { groupWriteHuman } from '../presenters/group.js';
|
|
6
|
+
import { GroupWriteService } from '../services/group-write-service.js';
|
|
7
|
+
import { runTelegramCommand } from './telegram-runner.js';
|
|
8
|
+
import { outputFormatConflict } from './types.js';
|
|
9
|
+
export function registerGroupWriteCommands(group) {
|
|
10
|
+
const families = new Map();
|
|
11
|
+
for (const definition of GROUP_COMMANDS) {
|
|
12
|
+
const familyName = definition.path[0];
|
|
13
|
+
let family = families.get(familyName) ?? group.commands.find(command => command.name() === familyName);
|
|
14
|
+
if (!family)
|
|
15
|
+
family = group.command(familyName).description(`${capitalize(familyName)} group management`);
|
|
16
|
+
families.set(familyName, family);
|
|
17
|
+
const action = family.command(definition.path[1]).description(definition.summary);
|
|
18
|
+
action.argument('<chat>');
|
|
19
|
+
for (const argument of definition.args)
|
|
20
|
+
action.argument(argumentSyntax(argument.name, argument.required, 'rest' in argument && argument.rest));
|
|
21
|
+
for (const option of definition.options)
|
|
22
|
+
action.option(`${option.long} <${option.name}>`, option.summary);
|
|
23
|
+
action.option('--json').option('--yaml');
|
|
24
|
+
if (definition.risk !== 'none')
|
|
25
|
+
action.option('--yes', 'Confirm this potentially destructive operation');
|
|
26
|
+
if (definition.risk === 'confirm-title')
|
|
27
|
+
action.option('--confirm-title <title>', 'Confirm the exact group title');
|
|
28
|
+
action.action(async (...callbackArgs) => {
|
|
29
|
+
const command = callbackArgs.at(-1);
|
|
30
|
+
const localOptions = callbackArgs.at(-2);
|
|
31
|
+
const positional = callbackArgs.slice(0, -2);
|
|
32
|
+
await runGroupWrite(definition, positional, localOptions, command);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function runGroupWrite(definition, positional, local, command) {
|
|
37
|
+
const options = command.optsWithGlobals();
|
|
38
|
+
const conflict = outputFormatConflict(options);
|
|
39
|
+
if (conflict)
|
|
40
|
+
return renderResult(conflict, { yaml: true });
|
|
41
|
+
const [chatValue, ...argumentValues] = positional;
|
|
42
|
+
const chat = String(chatValue);
|
|
43
|
+
const tokens = [...definition.path];
|
|
44
|
+
for (const value of argumentValues) {
|
|
45
|
+
if (Array.isArray(value))
|
|
46
|
+
tokens.push(...value.map(String));
|
|
47
|
+
else if (value !== undefined)
|
|
48
|
+
tokens.push(String(value));
|
|
49
|
+
}
|
|
50
|
+
for (const option of definition.options) {
|
|
51
|
+
const value = local[camelCase(option.name)];
|
|
52
|
+
if (value !== undefined)
|
|
53
|
+
tokens.push(option.long, String(value));
|
|
54
|
+
}
|
|
55
|
+
const parsed = parseGroupCommand(tokens.map(quoteToken).join(' '));
|
|
56
|
+
if (!parsed.ok)
|
|
57
|
+
return renderResult({ ok: false, error: parsed.error }, options);
|
|
58
|
+
if (definition.risk !== 'none' && !options.yes) {
|
|
59
|
+
return renderResult(confirmationFailure(definition.summary, definition.risk), options);
|
|
60
|
+
}
|
|
61
|
+
await runTelegramCommand(options, async (client) => {
|
|
62
|
+
let knownGroup;
|
|
63
|
+
if (definition.risk === 'confirm-title')
|
|
64
|
+
knownGroup = await client.groups.getGroup(chat);
|
|
65
|
+
const result = await executeGroupCommand(parsed.request, {
|
|
66
|
+
chat,
|
|
67
|
+
groups: new GroupWriteService(client.groups),
|
|
68
|
+
confirmed: options.yes === true,
|
|
69
|
+
confirmationTitle: options.confirmTitle,
|
|
70
|
+
knownGroup,
|
|
71
|
+
});
|
|
72
|
+
if ('confirmation' in result)
|
|
73
|
+
return confirmationFailure(result.confirmation.summary, result.confirmation.risk, result.confirmation.title);
|
|
74
|
+
if ('selectionRequired' in result) {
|
|
75
|
+
return { ok: false, error: { code: 'permissions_required', message: `Administrator permissions must be one or more of: ${result.selectionRequired.available.join(', ')}.` } };
|
|
76
|
+
}
|
|
77
|
+
return result.ok ? { ...result, human: groupWriteHuman(result.data, chat, definition.summary) } : result;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function confirmationFailure(summary, risk, title) {
|
|
81
|
+
const titleHint = risk === 'confirm-title' ? ` and --confirm-title <title>${title ? ` (exact title: ${title})` : ''}` : '';
|
|
82
|
+
return { ok: false, error: { code: 'confirmation_required', message: `${summary}. Use --yes${titleHint} to confirm.` } };
|
|
83
|
+
}
|
|
84
|
+
function argumentSyntax(name, required, rest) { return required ? `<${name}${rest ? '...' : ''}>` : `[${name}${rest ? '...' : ''}]`; }
|
|
85
|
+
function quoteToken(value) { return `"${value.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`; }
|
|
86
|
+
function camelCase(value) { return value.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()); }
|
|
87
|
+
function capitalize(value) { return value[0].toUpperCase() + value.slice(1); }
|
|
88
|
+
//# sourceMappingURL=group-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-write.js","sourceRoot":"","sources":["../../src/commands/group-write.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/group.js
CHANGED
|
@@ -3,6 +3,7 @@ import { groupAuditTable, groupInfoDetail, groupMemberDetail, groupMembersTable,
|
|
|
3
3
|
import { GroupService, validateGroupAuditOptions, validateGroupMembersOptions, } from '../services/group-service.js';
|
|
4
4
|
import { runTelegramCommand } from './telegram-runner.js';
|
|
5
5
|
import { outputFormatConflict } from './types.js';
|
|
6
|
+
import { registerGroupWriteCommands } from './group-write.js';
|
|
6
7
|
export function registerGroupCommands(app) {
|
|
7
8
|
const group = app.command('group')
|
|
8
9
|
.description('Inspect Telegram groups, members, and audit events');
|
|
@@ -46,18 +47,23 @@ export function registerGroupCommands(app) {
|
|
|
46
47
|
return result.ok ? { ...result, human: groupMembersTable(result.data) } : result;
|
|
47
48
|
});
|
|
48
49
|
});
|
|
49
|
-
group.command('member')
|
|
50
|
+
const member = group.command('member')
|
|
51
|
+
.description('Legacy member lookup; use member info for an unambiguous route (required for reserved action names)')
|
|
52
|
+
.argument('<chat>')
|
|
53
|
+
.argument('<user>')
|
|
54
|
+
.option('--json')
|
|
55
|
+
.option('--yaml')
|
|
56
|
+
.action(async (chat, user, _localOptions, command) => {
|
|
57
|
+
await runMemberInfo(chat, user, command);
|
|
58
|
+
});
|
|
59
|
+
member.command('info')
|
|
50
60
|
.description('Show a Telegram group member')
|
|
51
61
|
.argument('<chat>')
|
|
52
62
|
.argument('<user>')
|
|
53
63
|
.option('--json')
|
|
54
64
|
.option('--yaml')
|
|
55
65
|
.action(async (chat, user, _localOptions, command) => {
|
|
56
|
-
|
|
57
|
-
await runTelegramCommand(options, async (client) => {
|
|
58
|
-
const result = await new GroupService(client.groups).member(chat, user);
|
|
59
|
-
return result.ok ? { ...result, human: groupMemberDetail(result.data) } : result;
|
|
60
|
-
});
|
|
66
|
+
await runMemberInfo(chat, user, command);
|
|
61
67
|
});
|
|
62
68
|
group.command('audit')
|
|
63
69
|
.description('List Telegram group audit events')
|
|
@@ -89,6 +95,14 @@ export function registerGroupCommands(app) {
|
|
|
89
95
|
return result.ok ? { ...result, human: groupAuditTable(result.data) } : result;
|
|
90
96
|
});
|
|
91
97
|
});
|
|
98
|
+
registerGroupWriteCommands(group);
|
|
99
|
+
}
|
|
100
|
+
async function runMemberInfo(chat, user, command) {
|
|
101
|
+
const options = optionsWithGlobals(command);
|
|
102
|
+
await runTelegramCommand(options, async (client) => {
|
|
103
|
+
const result = await new GroupService(client.groups).member(chat, user);
|
|
104
|
+
return result.ok ? { ...result, human: groupMemberDetail(result.data) } : result;
|
|
105
|
+
});
|
|
92
106
|
}
|
|
93
107
|
async function renderConflict(options) {
|
|
94
108
|
const conflict = outputFormatConflict(options);
|