Telegram CLI中文文档

先看清数据边界,
再敲下命令。

Telegram CLI 把在线读取、SQLite 持久化、本地分析和远端修改放在同一套命令界面里。这份文档帮你快速判断:命令连不连接 Telegram、结果会不会落盘、是否会改变远端状态。

在线读取 写入本地 仅本地 文件归档 远端写入
浏览本页

01 · Start

快速开始

先完成一次交互式认证,再选择聊天同步到本地。之后,本地搜索不需要连接 Telegram。

01

安装

需要 Node.js 22.12.0 或更高版本。全局安装后,生产命令是 tg

npm install -g @will-17173/telegram-cli
tg --version

02

认证账号

认证可能需要手机号、登录验证码和 2FA 密码,因此必须由人在交互式终端完成。

tg account add
tg status
tg whoami

03

找到聊天

脚本中优先使用 JSON 返回的数字 ID。聊天类型包括 usergroupsupergroupchannelunknown

tg chats --account work --json
tg chats --type channel --account work --json

04

同步,再搜索

sync 把消息写入所选账号的 SQLite;search 只查询这份本地数据库。

tg sync @team --account work --json
tg search "release" --chat @team --account work --json

02 · Model

执行模型:命令到底运行在哪里

“读取”不等于“保存”,“写到本地”也不等于“修改 Telegram”。先按下面五种范围选命令。

在线读取

查询 Telegram,不保存消息

inboxreadsearch-online、联系人和多数检查命令需要有效会话,但返回结果不会进入 SQLite。

tg read @ops --since 2h --json
写入本地

从 Telegram 获取并持久化

historysyncsync-allrefresh 会把消息写入所选账号的 SQLite。

tg sync @ops --limit 5000 --delay 1
仅本地

只访问 SQLite

searchrecentstatsexportpurge 不连接 Telegram。新鲜度取决于上次同步。

tg recent --hours 24 --limit 50
远端写入

改变 Telegram 状态

sendeditdelete、通知静音、文件夹成员变更和群组管理操作都受写入总开关约束。

tg config write-access status --json
文件归档

在线读取,写入 Markdown

archive 把 Telegram 历史增量写入 Markdown 和可选媒体文件,但不会填充 SQLite。

tg archive @ops --download-media

两个容易混淆的本地落点

SQLite 持久化
history 会从本地最旧消息继续向更旧回填,默认最多 1000 条;sync 会从本地最新消息增量更新。一个聊天尚未出现在本地数据库时,syncsync-allrefresh 的首次抓取最多 500 条,即使传入更大的 --limit
Markdown 文件归档
archive 在线读取历史并写入文件系统,但不会填充 SQLite。首次未指定范围时归档此前七天;后续根据 manifest 与 Markdown 内的消息标记增量追加。

03 · Workflows

常用工作流

下面的组合刻意把在线、持久化、本地和远端写入分开,适合直接改成自己的账号名和聊天 ID。

在线读取

只看最新情况,不落盘

tg inbox --limit 50 --account work --json
tg read @ops --since 2h --account work --json
tg search-online "incident" --chat @ops --until "2026-07-14T10:00:00+08:00" --account work --yaml

inbox 不会把消息标记为已读。相对时间必须是正数加 s/m/h/d/w;绝对时间必须带时区,且 --since 早于 --until

写入本地 仅本地

同步后做可重复分析

tg refresh --max-chats 20 --delay 1 --account work --json
tg search "error|failed" --regex --hours 168 --account work --json
tg top --chat @ops --hours 168 --limit 20 --account work --json
tg timeline --chat @ops --hours 168 --by hour --account work --json

refresh 的顶层结果可以成功,但个别聊天仍可能失败;自动化必须检查 data.failuressync-all 只投影 new_messageschatsresults,需要可靠识别部分失败时应选 refresh

远端写入

发送消息,再同步本地副本

tg config write-access status --json
tg send @team "Release is ready" --file ./report.pdf --account work --json
tg sync @team --account work --json

send 没有确认提示。重复的 --file 会按顺序组成一个 Telegram 媒体组,文本成为说明文字;Telegram 决定可接受的文件组合与数量。

在线流

监听、回复和下载附件

tg listen @team --persist --retry-seconds 5 --account work
tg listen @team --no-interactive --no-media --auto-download --account work
tg listen @team @ops --send-to @team --account work

listen 是无界数据流,不提供 JSON、YAML 或 Markdown 格式选项。交互式 TTY 使用 Ink;--no-interactive 输出纯文本。--auto-download 默认写入 ~/Downloads/telegram-cli,即使 --no-media 隐藏渲染媒体行,规范化附件仍会持久化并可下载。

文件归档

增量归档为 Markdown

tg archive @ops --download-media --account work --json
tg archive @ops --since "2026-07-12T10:00:00+08:00" --until "2026-07-14T10:00:00+08:00" --account work --json
tg archive --all --full --output ./telegram-archive --account work --markdown

传入一个或多个聊天,或者使用 --all,不能同时使用。--full--since 冲突;--rebuild 会替换聊天文件,并在没有新范围时沿用初始范围。自定义 --output 目录不会被自动重置。

04 · Accounts

账号与配置

每个账号的 Telegram 会话和消息数据库彼此隔离;API 凭据与持久化代理配置则由所有账号共享。

账号生命周期

tg account add
tg account list --json
tg account current --json
tg account switch work --json
tg account logout work --yes --json
tg account login work --json
tg account remove work --force --json
  • 第一个添加的账号会成为当前账号;之后新增账号不会自动切换。
  • logout 会使 Telegram 会话失效,但保留账号注册信息和消息数据库;已登出的账号仍能运行本地 SQLite 查询。
  • login 会安全替换会话并保留数据库。非 TTY 返回 interaction_required 时,请在人类终端重试,不要通过管道传入凭据。
  • 自动化优先在每次调用中显式传入 --account work,避免依赖或改变当前账号。

API 凭据和代理

tg config set --api-id <id> --api-hash "<hash>"
tg config set --proxy socks5://127.0.0.1:1080
tg config list --json
TG_PROXY=http://127.0.0.1:8080 tg status
凭据优先级
TG_API_IDTG_API_HASH 必须一起设置,并覆盖已保存值。两者都不存在时可以使用受限的内置默认凭据,但更容易遇到 flood wait。
代理优先级
TG_PROXY 覆盖已保存代理。支持 SOCKS4、SOCKS5、HTTP、HTTPS 和 MTProxy,且代理会用于登录和所有需要 Telegram 连接的命令。
脱敏规则
config list 默认隐藏 API hash。--show-secrets 只显示完整 API hash;代理用户名、密码和凭据查询参数始终显示为 ***
恢复文件
账号登录失败若返回 error.details.recovery_pathrecovery_paths,请安全保留并报告这些路径,恢复前不要删除或覆盖。

本地路径

DATA_DIR 可替换操作系统默认数据根目录;DB_PATH 主要用于测试时覆盖数据库。典型布局如下:

config.json
accounts.json
accounts/<name>/session
accounts/<name>/messages.db
accounts/<name>/archive/

05 · Reference

34 个顶层命令

这是 tg v0.6.1 的完整顶层 Commander 命令清单。范围徽标描述主要行为;带子命令的命令组可能同时包含读取和写入操作。

Telegram CLI v0.6.1 顶层命令
命令 范围 用途与关键行为
tg search <keyword> 仅本地 按关键词、聊天、发送者、小时范围或正则搜索已同步消息。
tg recent 仅本地 查看近期存储的消息;默认最近 24 小时、最多 50 条。
tg stats 仅本地 统计本地消息与聊天数量。
tg top 仅本地 列出本地消息中最活跃的发送者,可限制聊天和时间范围。
tg timeline 仅本地 按小时或其他时间粒度汇总本地消息活动。
tg today 仅本地 查看本地数据库中今天存储的消息。
tg filter <keywords> 仅本地 用多关键词及聊天、小时等条件筛选已存储消息。
tg archive [chats...] 文件归档 从 Telegram 读取历史并增量写入 Markdown,可下载媒体;不会填充 SQLite。
tg export <chat> 仅本地 把本地消息导出为选定格式;--format 控制文件内容,--json 控制命令信封。
tg purge <chat> --yes 本地删除 确认后删除该聊天的本地消息,不会删除 Telegram 远端消息。
tg data reset --yes 本地重置 管理账号范围的本地数据。媒体 schema 破坏性升级后需要删除旧数据库/默认归档,再重新同步。tg data reset --yes
tg sync-all
tg status 在线读取 检查所选账号的 Telegram 身份验证状态。
tg whoami 在线读取 显示当前已认证 Telegram 身份的基本信息。
tg chats 在线读取 列出对话,可按 user/group/supergroup/channel/unknown 类型筛选。
tg history <chat> 写入本地 从本地最旧消息继续向更旧回填并保存;默认上限 1000,本地无消息时从最新开始。
tg sync <chat> 写入本地 按本地进度增量同步一个聊天的新消息。
tg sync-all 写入本地 批量增量同步多个对话;输出投影不保留完整失败明细。
tg refresh 写入本地 批量刷新聊天;脚本应在顶层成功时继续检查 data.failures
tg info <chat> 在线读取 查询 Telegram 聊天元信息。
tg send <chat> [message] 远端写入 发送文本、文件或带说明文字的媒体组;没有确认提示,也不会写入本地消息库。
tg edit <chat> <msgId> <text> 远端写入 编辑一条 Telegram 消息。
tg delete <chat> <msgIds...> 远端写入 删除一条或多条 Telegram 消息。
tg download --chat <chat> 文件下载 下载单条消息全部媒体、指定附件、按 grouped_id 下载相册、消息范围、指定日期或整个聊天中的媒体。附件编号从 1 开始;相册按消息 ID 和消息内编号展平。稳定媒体错误包括 attachment_changedmedia_access_deniedtg download @channel 42 --attachment 2
tg listen [chats...] 在线流 持续监听消息;交互模式可回复或执行群操作,不支持有限结果的格式标志。持久化结构化行使用有序小写 attachments[]
tg contact 在线读取 list 列出通讯录联系人,info 按 ID、用户名或手机号解析联系人。
tg inbox 在线读取 列出有未读消息的对话,不把消息标记为已读,也不持久化。
tg read <chat> 在线读取 按数量或时间范围读取近期 Telegram 消息,不写入 SQLite。
tg search-online <query> 在线读取 全局或指定聊天搜索 Telegram 在线消息,不保存结果。
tg dialog 在线读取 提供 inbox/read/search/groups 的对话族路由;自动化优先使用较短的顶层同类命令。
tg group 检查 管理 检查群组、成员与审计日志,或管理成员、管理员、设置、邀请、话题和消息。
tg folder 检查 管理 列出或查看聊天文件夹;显式添加、移除聊天会修改 Telegram。
tg notification 检查 管理 查看通知设置,或临时、永久静音与取消静音。
tg account 认证 选择 添加、登录、登出、列出、切换或移除隔离账号。
tg config 本地配置 管理 API 凭据、代理和远端写入总开关;改变开关不等于授权具体写操作。
tg web 本地管理 127.0.0.1 启动仅限本机访问的 React 管理界面,用于浏览已存储消息,并为选中的聊天触发只读同步。

所有有限结果命令都可使用全局 --account(适用时)与 --markdown;各命令的 JSON/YAML 支持和专用参数请用 tg <command> --help 核对。

06 · Groups

群组检查与 48 个管理操作

先用只读路由确认聊天、成员和权限,再执行具体操作。下面每条完整 CLI 语法都把 <chat> 放在操作之后、操作参数之前。

先检查,不修改

tg group info <chat> --account work --json
tg group members <chat> --type admins --query alice --limit 50 --account work --json
tg group member info <chat> <@username-or-user-id> --account work --json
tg group audit <chat> --user <user> --type member_invited --limit 100 --account work --json
tg group list --admin --limit 100 --account work --json

7 个操作

member · 成员

  • tg group member add <chat> <users...>添加一个或多个成员。
  • tg group member kick <chat> <user> --yes移出成员。
  • tg group member ban <chat> <user> --yes封禁成员。
  • tg group member unban <chat> <user> --yes解除封禁。
  • tg group member mute <chat> <user> [duration] --yes按可选时长禁言。
  • tg group member unmute <chat> <user> --yes恢复发言权限。
  • tg group member purge <chat> <user> --yes删除该成员在群内的全部消息。

4 个操作

admin · 管理员

  • tg group admin promote <chat> <user> [permissions] --yes提升为管理员。
  • tg group admin demote <chat> <user> --yes移除管理员权限。
  • tg group admin rank <chat> <user> <text...> --yes设置管理员自定义头衔。
  • tg group admin transfer-owner <chat> <user> --yes把群主身份转移给另一名成员。

13 个操作

chat · 群设置

  • tg group chat title <chat> <text...>修改群名。
  • tg group chat description <chat> <text...>修改群描述。
  • tg group chat username <chat> <username>修改公开用户名;需要超级群组能力。
  • tg group chat photo <chat> <path>从本地文件设置群头像。
  • tg group chat slowmode <chat> <duration>设置慢速模式,支持 off
  • tg group chat ttl <chat> <duration> --yes设置消息自动删除时间。
  • tg group chat protect <chat> <enabled>开关内容保护。
  • tg group chat join-requests <chat> <enabled>开关新成员审批。
  • tg group chat join-to-send <chat> <enabled>开关加入后才能发言。
  • tg group chat default-permissions <chat> <permissions> --yes设置成员默认权限。
  • tg group chat sticker-set <chat> <sticker-or-off>设置或关闭群贴纸包。
  • tg group chat leave <chat> --yes退出当前群组。
  • tg group chat delete <chat> --yes --confirm-title "<exact title>"永久删除群组;仅群主可执行。

10 个操作

invite · 邀请与入群申请

  • tg group invite list <chat>只读:列出邀请链接。
  • tg group invite show <chat> <invite>只读:查看一个邀请链接。
  • tg group invite create <chat> [--title ...] [--expire ...]创建邀请链接,可设置次数与审批。
  • tg group invite edit <chat> <invite> [options]修改邀请链接。
  • tg group invite revoke <chat> <invite> --yes撤销邀请链接。
  • tg group invite members <chat> <invite>只读:列出通过该链接加入的成员。
  • tg group invite approve <chat> <user>批准一条入群申请。
  • tg group invite decline <chat> <user>拒绝一条入群申请。
  • tg group invite approve-all <chat> --yes批准全部待处理申请。
  • tg group invite decline-all <chat> --yes拒绝全部待处理申请。

10 个操作

topic · 论坛话题

  • tg group topic list <chat>只读:列出论坛话题。
  • tg group topic create <chat> <title...>创建话题。
  • tg group topic edit <chat> <id> <title...>修改话题标题。
  • tg group topic close <chat> <id>关闭话题。
  • tg group topic reopen <chat> <id>重新打开话题。
  • tg group topic pin <chat> <id>置顶话题。
  • tg group topic unpin <chat> <id>取消置顶话题。
  • tg group topic reorder <chat> <ids...>重排置顶话题。
  • tg group topic delete <chat> <id> --yes删除话题及其中消息。
  • tg group topic general-hidden <chat> <hidden>开关“常规”话题的可见性。

4 个操作

message · 消息

  • tg group message pin <chat> <id>置顶一条消息。
  • tg group message unpin <chat> <id>取消置顶一条消息。
  • tg group message unpin-all <chat> --yes取消全部置顶。
  • tg group message delete <chat> <ids...> --yes删除一条或多条群消息。

在监听模式使用斜杠命令

在交互式 listen 中输入 /,即可打开统一命令菜单。回复消息或执行群组操作时,无需重复当前聊天:

/reply <message-id> <content>
/member mute @alice 2h

命令依次匹配完整路径、前缀和有序模糊结果。/rep/rpy 会找到 /reply/ban 会找到 /member ban

监听多个聊天时,执行群组操作前必须设置 --send-to <chat>。权限与可用性检查仍然生效,有风险的操作会打开确认弹窗。

07 · Automation

结构化输出与自动化

有限结果命令提供稳定信封和错误码;不要解析人类表格,也不要把流式 listen 当作有限结果命令。

显式选择格式

tg stats --account work --json
tg stats --account work --yaml
tg inbox --account work --markdown
OUTPUT=markdown tg recent --account work

--json--yaml--markdown 三选一,显式参数优先。环境变量 OUTPUT=json|yaml|markdown|rich 可设置默认值。未指定时,TTY 使用富文本,非 TTY 默认 YAML。

按退出状态和错误码分支

成功的有限结果写入 stdout。JSON/YAML 结构化失败按请求格式写入 stdout;格式冲突也在 stdout 返回稳定 YAML 信封。人类可读和 Markdown 失败写入 stderr。所有失败都设置非零退出状态。

成功信封

{
  "ok": true,
  "schema_version": "2",
  "data": {}
}

失败信封

{
  "ok": false,
  "schema_version": "2",
  "error": {
    "code": "archive_partial_failure",
    "message": "Some chats or media could not be archived",
    "details": {
      "completed": [],
      "failed": [],
      "warnings": []
    }
  }
}

自动化检查清单

  • 始终传入 --account <name>
  • 机器处理优先用 JSON 或 YAML。
  • 先看进程退出状态,再看 okerror.code
  • archive_partial_failure 仍可能包含已完成结果。
  • refresh 顶层成功时继续检查 data.failures
  • 不要用 Markdown 还原完整 error.details

交互仍然是交互

account addaccount login--json,只会结构化最终结果,不会绕过手机号、验证码或 2FA 输入。收到 interaction_required 后,把任务交给人类 TTY。

08 · Safety

远端写入与本地隐私

写入总开关是一道本地技术闸门,不是授权。打开闸门后,仍要在执行每个具体远端修改前取得明确许可。

tg config write-access status --json
tg config write-access off --json
tg config write-access on --json
受总开关阻止

Telegram 远端修改

sendeditdelete、通知 mute/unmute、文件夹 chat add/remove,以及所有非只读群操作。关闭时会在执行远端修改前返回 write_access_disabled

不受总开关阻止

读取、持久化和本地维护

Telegram 读取、本地查询、导出、purge、同步、历史、归档、账号生命周期和配置修改仍可运行。开启总开关本身也需要授权,但它不会授权下一条远端写命令。

确认规则

  • 标记为高风险的群命令缺少 --yes 时会拒绝执行,不会为了该修改而连接 Telegram。
  • 永久删除群组还必须传入 --confirm-title "<exact title>",内容与当前群名完全一致。
  • 没有内置确认提示的操作仍是远端写入;不要把“无需 --yes”理解为“无需授权”。
  • Telegram 自身的管理员权限、群主身份、超级群组或论坛能力和速率限制始终适用。

09 · Recovery

故障排查

v0.6.1 的自动化应匹配 error.code,不要匹配可能变化的消息文本。先判断账号与数据范围,再决定是否重试。

account_required / account_not_found

没有可用账号时运行 tg account add;名称错误时先运行 tg account list --json,再修正 --account。自动化不要依赖交互式账号选择。

account_logged_out / interaction_required

已登出的账号仍可做本地查询,但 Telegram 命令需要在人类 TTY 运行 tg account login <name>。不要用 stdin 管道传验证码或 2FA 密码。

telegram_account_session_expired / AUTH_KEY_UNREGISTERED

远端会话已经失效。确认账号名后运行 tg account remove <name> --force,再交互式重新认证。删除前先确认不需要保留该账号本地数据。

account_identity_mismatch

重新登录得到的 Telegram 身份与已注册账号不一致。停止覆盖会话,核对账号选择,并保留错误返回的恢复路径。

chat_not_found / ambiguous_chat

本地命令只认识所选账号数据库中的聊天。先同步正确账号;如果名称匹配多个聊天,改用 tg chats --json 返回的数字 ID。

本地搜索为空

确认 --account--chat,再运行 tg sync <chat>。在线 readsearch-online 和发送操作不会自动更新 SQLite。

contact_not_found

Telegram 无法用所给数字 ID、用户名或手机号解析联系人。检查格式;chats --type user 列出的是私聊对话,不等同于 contact list 通讯录。

invalid_notification_duration

静音时长使用正整数加 s/m/h/d/w,或使用 forever;省略时默认永久静音。

folder_not_found / ambiguous_folder

文件夹标题可以重复。运行 tg folder list --json,再把数字文件夹 ID 用于 infochat addchat remove。收到 folder_operation_unsupported 后不要盲目重试不受支持的修改。

archive_account_mismatch / archive_partial_failure

归档根目录属于另一账号时,选择独立输出目录。部分失败时保留已完成文件,检查 completedfailedwarnings;单个附件警告码是 archive_media_failed

password_required / password_invalid

群所有权转移必须由群主在交互式终端重新输入 2FA 密码。password_too_freshsession_too_fresh 会带等待信息;不要提前重试。

write_access_disabled

先确认用户确实授权了当前具体写操作,再单独取得修改写入开关的授权。打开总开关后仍需重新确认目标聊天、账号和操作参数。

flood_wait / FLOOD_WAIT

停止密集重试,遵守错误中报告的等待时间,保留 --delay,并考虑配置个人 API 凭据。全局在线搜索、大量历史和媒体下载更容易触发限制。

invalid_output_format

不要组合 --json--yaml--markdown。脚本若通过 OUTPUT 设置默认格式,显式参数仍会覆盖它。