用途
tg-channel-reader(电报频道阅读器)用于读取 Telegram 频道的帖子和评论,基于 MTProto 协议实现,底层支持 Pyrogram 或 Telethon 两个后端。它适用于需要检查、阅读、监控 Telegram 频道,或生成近期帖子摘要与对比的场景。
主要能力
- 频道信息获取:
tg-reader info @channel_name返回频道标题、描述、订阅数(members_count)和链接。 - 帖子抓取:
tg-reader fetch @channel_name --since 24h按时间范围抓取帖子,支持--limit限制数量、--format text输出人类可读格式、--text-only跳过无文字媒体帖。 - 评论抓取:使用
--comments可为单条帖子抓取讨论区回复,通过--comment-limit和--comment-delay控制每帖评论数与延迟。启用评论时默认帖子上限降为 30,可用--limit覆盖。 - 多频道:可一次传入多个频道,依次抓取,默认每频道间隔 10 秒,可用
--delay调整。注意--comments不能与多频道同时使用(会返回 comments_multi_channel 错误)。 - 未读模式(read_unread):只返回新(未读)帖子,技能会记录已读状态,适合每日摘要和监控工作流。
- 输出到文件:
--output(可指定文件名,默认 tg-output.json)将完整数据写入文件,标准输出只返回简短确认,用于节省 token。 - 预检诊断:
tg-reader-check为快速离线检查,无需连接 Telegram,验证凭据、会话文件、已安装的 MTProto 后端,并检测过期会话。 - 后端切换:默认 Pyrogram,可用
--telethon单次切换,或export TG_USE_TELETHON=true持久切换。
使用方式
Step 1 — 获取 API 凭据:前往 https://my.telegram.org → API Development Tools → 创建应用 → 复制 api_id 和 api_hash。
Step 2 — 保存凭据(推荐方式,适用于 agent 与服务器):
cat > ~/.tg-reader.json << 'EOF'
{
"api_id": YOUR_ID,
"api_hash": "YOUR_HASH"
}
EOF
chmod 600 ~/.tg-reader.json
也可用环境变量(仅交互式 shell):export TG_API_ID=YOUR_ID、export TG_API_HASH="YOUR_HASH"。建议不要将 TG_API_HASH 写入 shell 配置文件(如 ~/.bashrc),持久存储请使用 ~/.tg-reader.json。
Step 3 — 安装与配置:
npx clawhub@latest install sergei-mikhailov-tg-channel-reader
cd ~/.openclaw/workspace/skills/sergei-mikhailov-tg-channel-reader
bash setup-tg-reader.sh
安装脚本会安装 Python 包(pip install .)、检查凭据与会话、运行 tg-reader-check,并打印需要手动运行的 exec 审批命令。
在 Ubuntu/Debian 等托管 Python 的 Linux 上,建议先创建 venv:
python3 -m venv ~/.venv/tg-reader
echo 'export PATH="$HOME/.venv/tg-reader/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
cd ~/.openclaw/workspace/skills/sergei-mikhailov-tg-channel-reader
pip install pyrogram tgcrypto telethon && pip install .
openclaw approvals allowlist add --gateway "$(which tg-reader)"
openclaw approvals allowlist add --gateway "$(which tg-reader-check)"
Step 4 — 认证:运行 tg-reader auth 创建会话文件,仅需一次。Pyrogram 会要求确认手机号(回答 y),验证码会发到 Telegram 应用内(非短信)。
Step 5 — 验证:tg-reader-check 应返回 "status": "ok",否则修复报告的问题并重新运行 setup-tg-reader.sh。
Quick Start:
tg-reader-check
tg-reader info @channel_name
tg-reader fetch @channel_name --since 24h
若提示 tg-reader: command not found,可在技能目录运行 bash setup-tg-reader.sh,或手动执行 cd ~/.openclaw/workspace/skills/sergei-mikhailov-tg-channel-reader && pip install .。回退方式:python3 -m tg_reader_unified。
未读模式配置
Option A — 配置文件(~/.tg-reader.json):
{
"api_id": 12345,
"api_hash": "...",
"read_unread": true
}
Option B — 环境变量:export TG_READ_UNREAD=true。环境变量优先于配置文件。
状态存储在 ~/.tg-reader-state.json,可通过配置中的 "state_file"、环境变量 TG_STATE_FILE 或 --state-file 指定。启用后 --since 不再需要;首次运行(无历史状态)仍按 --since(默认 24h)取;后续运行只返回新于上次已读的帖子;--all 绕过未读模式,按 --since 抓取且不更新状态;无新帖时状态不变并返回 count: 0。
输出格式
info 返回字段示例:id、title、username、description、members_count、link。
fetch 返回字段示例:channel、fetched_at、since、count、messages(每条含 id、date、text、views、forwards、link、has_media、media_type)。启用评论时额外含 comments_enabled、comments_available,帖子含 comment_count 与 comments(每条含 id、date、text、from_user)。read_unread 模式下输出含 read_unread 字段;使用 --all 时为 "read_unread": {"enabled": true, "overridden": true}。
适用场景
- 检查、阅读或监控 Telegram 频道
- 获取近期帖子的摘要或精华
- 追踪或对比多个频道
- 获取频道信息(标题、描述、订阅数)
- 通过 cron 定时抓取(如
tg-reader fetch @channel --comments --output comments.json),文件定期更新,需要分析时直接读文件而非重新抓取,节省 token
限制与注意事项
- 安全:需要来自 my.telegram.org 的 TG_API_ID 和 TG_API_HASH。会话文件授予完整 Telegram 账号访问权限,必须安全保管、切勿分享。
- exec 审批:OpenClaw 默认阻止未知 CLI 命令,用户必须先审批 tg-reader 命令。审批提示出现在 Control UI 或机器人消息中(不在 agent 对话里)。若命令挂起或用户称无反应,很可能是审批待处理。
- 未读追踪仅到帖子级别——已读帖子的新评论不会被捕获。
- 频道更改用户名会导致追踪重置(状态以用户名为键)。
- 同一频道的并发运行是安全的,但以最后写入者为准。
- 图片/视频不做分析(无 OCR/视觉),只返回文本/说明文字(caption);评论中的图片/视频也不分析,只抓取文本。
- from_user 对匿名评论可能为 null。
- comments_available: false 表示频道无关联讨论群(无法评论);某条消息上的 comments_error 表示该帖评论触及速率限制。
--comments与多频道同时使用会报错。- 会话过期时:
rm -f ~/.tg-reader-session.session后重新运行tg-reader auth。验证码未收到时可用python3 debug_auth.py获取完整 MTProto 日志(该脚本会先删除现有会话文件,并会先请求确认)。 - 定时任务:Option A(sessionTarget: "main",推荐)由 cron 向主 agent 会话发送提醒,agent 在已有技能/凭据/会话的环境中执行;Option B(sessionTarget: "isolated")在 Docker 容器中运行,完全自主,但容器初始为空,需要安装与挂载会话文件,且会话文件与机器绑定,Telegram 可能在新环境使其失效,可能不可靠。
- 错误带有 error_type 和 action 字段。频道错误类型包括:access_denied、banned、not_found、invite_expired、flood_wait(≤60 秒等待会自动重试,更长等待返回该错误)、comments_multi_channel。系统错误包括:会话文件未找到、缺少凭据、命令未找到、AUTH_KEY_UNREGISTERED(会话过期)。
- 关于该技能的收费、价格与平台支持等信息,资料暂未提供。