Telegram OSINT、抓取与归档。
一款完全在您机器上运行、仅与 Telegram 通信的本地 Web 应用。
npm install
npm start
然后打开 **http://127.0.0.1:5173**。首次运行会引导您配置 API 凭据、通过二维码登录并加载您的会话列表。它只与 Telegram 这一个服务器通信。无需创建账户、没有遥测、也没有中间服务:您收集的数据都保存在您自己拥有的 SQLite 文件中。
是 telegram-scraper、telescope 和 Harrier 的继任者,基于 Telethon 1.44 构建。
| 收集 | 跨多个账户的频道、群组和论坛主题,支持媒体、去重和断点续传 |
| 调查 | 手机号、@username、id 或指向个人资料的 t.me 链接,所有历史照片,以及自上次以来的差异对比 |
| 导出 | 十种格式,从纯 CSV 到哈希证据包 |
| 运行环境 | Node 18+、Python 3.12+、SQLite。一个数据库、一个文件夹、无服务 |
收集
-100 id、名称以及可见该对话的账户徽章调查
@username、用户 id 或 t.me 链接导出
npm install 会在 server/.venv 下创建 Python 环境,并安装两侧的依赖。
| 内容 | 位置 |
|---|---|
| 配置 | ~/.config/tgscope/config.json(权限 600) |
| 数据库 |
一个数据库保存所有内容,这正是实现跨对话搜索、共享用户表、媒体去重和转发图的基础。
文件按对话类型、对话、论坛主题、媒体类型分目录存放:
media/
├── channels/technews_-1002116176890/
│ ├── photos/00004711-8001-conference-slides.jpg
│ └── documents/00004802-8210-quarterly-report.pdf
├── groups/pythondev_-1001597139842/
│ ├── general/photos/…
│ └── help/voice/00000004-9004-voice.ogg
└── profiles/123456789/000-5544332211.jpg
目录名称由句柄加完整 id 组成,非 ASCII 标题会被音译,文件名采用补零方式,以便按时间顺序排序。
每次 Telegram 调用都经过每个账户独立的令牌桶调控器,并带有 FloodWait 退避机制;每一次分页读取——消息、对话、成员、个人资料照片——都会等待洪泛结束后继续,而不是让运行失败。三种配置文件:
更长的等待会在活动日志中公布并等待结束;同一读取操作连续十二次触发等待会放弃并报告。
支持多个账户。可在设置中将某个账户标记为 burner(一次性账户),手机号查询将自动在其上运行,因为这是唯一有风险的操作:
手机号查询会将该号码短暂导入为联系人,然后立即删除。如果号码主人已经保存了您的号码,他们可能会看到一条“已加入 Telegram”的通知。tgscope 每次都会先询问,并且个人资料卡片会记录使用的是哪个账户。
npm test # 92 个后端测试和 42 个前端测试,无需网络
npm run build # 客户端生产构建
后端是基于 Telethon 核心的 FastAPI,使用模拟的 Telethon 客户端进行测试:覆盖抓取器、导出器、媒体目录结构以及所有模式迁移。前端测试覆盖浏览器背后的纯逻辑、周期运算、直方图分桶、数字和时间戳格式化,并渲染每个屏幕两次,一次为空、一次已有数据。
scripts/demo/ 通过预置的假数据重新生成 docs/preview.gif。它需要 chromium 和 ffmpeg,不会触碰您真实的工作区,也不属于应用的一部分。
源码不含注释 —— 含义由命名和结构承载,并且有测试强制执行这一点。
适用于研究、新闻和授权调查。它通过 Telethon 使用 Telegram 官方 API,只读取您的账户已经能看到的内容——不会绕过任何人的隐私设置。请勿将其用于骚扰或跟踪,遵守 Telegram 的服务条款,并注意适用于您的数据保护法律。
MIT 许可证。
| 格式 | 您将获得的内容 |
|---|
csv | 每个对话一个文件 |
json / jsonl | 完整元数据;JSONL 逐行流式输出 |
xlsx | 包含消息、媒体、参与者和反应的工作表 |
html | 独立报告:统计、活跃度、最佳发送者、转发来源、可搜索表格 |
markdown | 相同的报告,以文本形式呈现 |
gexf / edges | 用于 Gephi 和 Maltego 的转发图 |
sqlite | 仅包含所选对话的独立数据库 |
bundle | 包含数据、媒体、SHA-256 哈希清单和收集日志的 ZIP 包 |
~/.local/share/tgscope/tgscope.db(WAL、FTS5) |
| 媒体 | ~/.local/share/tgscope/media/ |
| 导出 | ~/.local/share/tgscope/exports/<时间戳>-<标签>/ |
| 配置文件 | 媒体工作线程数 | 请求间隔 | 可静默吸收的等待 |
|---|
stealth | 1 | 1.6 秒 | 最长 180 秒 |
balanced | 4 | 0.35 秒 | 最长 90 秒 |
fast | 8 | 无 | 最长 45 秒 |