将 Telegram 的频道内的消息转换为 Base64 编码后的图片 + Markdown 文字的内容,并存储到本地 SQLite 数据库。
内置 HTTP 服务器,可通过 RESTful API 灵活调用。
基于 Telegram MTProto 协议,相比于 Telegram Bot API 可以更加灵活的导入、监听频道的所有消息。
- 🔄 启动后自动同步频道历史消息
- 📡 实时监听 Telegram 频道动态:
- 📨 新消息推送
- ✏️ 消息编辑时自动更新
- 🗑️ 消息删除时自动同步
- 💾 基于 SQLite3 实现的本地高性能、持久化存储:
- 🧭 使用 Brotli 压缩算法减轻存储压力
- 📷 图片附件使用 AVIF/WebP 高效编码格式
- 📁 支持多种消息类型的存储
- 🚀 基于 Hono 的 RESTful API:
- 📊 便捷的消息查询接口
- ⚡ 高性能数据访问
- 🔧 易于扩展的接口设计
Warning
警告: Telegram MTProto API 的限制比 Bot API 更为严格,使用本项目存在账号被封禁的风险。
我们强烈建议您了解这些风险后再使用本项目。使用本项目即表示您已知晓并愿意承担所有风险,请勿因封号问题提交 Issue。
Telegram讨论组: https://t.me/dyaogroup
- 在 这里 登录你的 Telegram 账号
- 点击“API development tools”,填入 App title 和 Short name 保存即可。
- 需要保存 api_id 和 api_hash
Important
请注意:申请 API 属于高危操作,特别是新注册的 Telegram 账号和使用 VoIP 语音号码注册的账号会加大封号概率,如被封号,请尽快向客服申诉申请解封,千万不要将 API 泄露给他人。
来自 Telegram X 安卓端的 api_id 和 api_hash,并不保证可用性 API_ID=21724 API_HASH=3e0cb5efcd52300aec5994fdfc5bdc16
Important
请注意:由 GitHub CI 自动构建的 x64 二进制包 不支持没有 AVX2 的古董型号 CPU,例如 Haswell 系列之前的 CPU。
自动构建工作流正在使用 Ubuntu Intel x64 环境 + 交叉编译技术,因此如果无法正常运行,请选择 从源码启动 或者提交 PR!
- 在 Releases 页面根据自己的环境下载对应压缩包
- 解压压缩包 (
tar -zxvf telegram-parser*.tar.gz
) - 进入解压后的目录 (
cd telegram-parser*
) - 修改权限 (
chmod +x telegram-parser*
) - 使用
cp .env.example .env
后修改.env
的配置内容 - 启动程序 (
./telegram-parser*
) - 根据提示输入手机号、Telegram 收到的验证码、二次密码等。
- 第一次使用会创建数据库并拉取频道内容,后续每次启动只会拉取最新内容。
- 如有开机自启动等需求,请参阅 持久化服务
项目文件结构
├── database/ # 数据库目录
│ ├── init.sql # 数据库初始化文件,请不要删除
| ├── messages.db # 存储消息的 SQLite 数据库
│ └── ...
├── static/ # 前端静态目录
│ └── ...
├── .env # 环境变量文件
├── .session # Session 文件(登陆后才会有)
├── telegram-parser_... # 程序主文件
└── ... # 其他文件
- 你需要使用 Bun(一款高性能的 Javascript 运行环境)来运行本程序。
一键安装 Bun:
curl -fsSL https://bun.sh/install | bash
- 使用
cp .env.example .env
后修改.env
的配置内容。 - 使用
bun install
来安装所有依赖。 - 使用
bun run dev
启动服务端。 - 根据提示输入手机号、Telegram收到的验证码、二次密码等。
- 第一次使用会创建数据库并拉取频道内容,后续每次启动只会拉取最新内容。
- 如有开机自启动等需求,请参阅 持久化服务
- 本项目使用 pm2 进行服务管理,安装依赖 pm2:
bun i -g pm2
- 先使用
bun run dev
启动并成功登录后,关闭服务端 - 确认 Session 登录成功后一键启动:
pm2 start ecosystem.config.js
修改 .env 中的对应配置,如果未修改则无法启动服务端
# 将 Telegram 获得的api_id api_hash 填入下方
API_ID=123456
API_HASH=1234567890abcdef1234567890abcdef
# 来自 Telegram X 安卓端的 api_id 和 api_hash,并不保证可用性
# API_ID=21724
# API_HASH=3e0cb5efcd52300aec5994fdfc5bdc16
# 频道名称,复制时去掉@
# 如果需要监听新消息/编辑消息/删除消息,需要加入该频道
CHANNEL_ID=test
# API分页功能,显示多少条内容一页
CHANNEL_PAGE_SIZE=10
# HTTP 监听 IP 和端口
HOST=0.0.0.0
PORT=3000
# CORS 白名单
# 使用英文逗号分隔,请填写前端地址的 new URL().origin 的结果(不带 /)。
# 如果不配置好则默认为 *,不推荐。
CORS_WHITELIST=https://example.com,http://localhost:3000
# 日志等级,默认 debug,生产环境请修改为 info 或 warn
# 可选 none | error | warn | info | debug
LOG_LEVEL=debug
# 性能优化
# 默认使用 Brotli 压缩数据库中的文本消息,可节约硬盘空间,可选值 0~11
# 0 即不压缩仅编码,11 即最大压缩,推荐范围 6~9
CONTENT_ENCODE_CPU_LEVEL=6
# 图片编码格式,当前支持 avif / webp / jpeg (原图格式)
# 推荐 avif > webp,如果需要兼容老旧浏览器(如 IE)时请选择 jpeg。
IMAGE_ENCODE_FORMAT=avif
# 【jpeg 原图格式不支持此选项】图片有损压缩比率,可选值:1-100。
# 值越低图片的肉眼观感越差、占存储空间越小,推荐 60~80,压缩比再高就推荐选择使用 jpeg 原图格式。
IMAGE_QUALITY=60
# 【jpeg 原图格式不支持此选项】图片编码压缩等级,可选值:0-9,推荐范围:6~8
# 等级越高压缩效果越好,图片的肉眼观感不变,但编码时消耗的 CPU 性能也越多,如果压缩时出现 OOM 内存不足报错时可适当降低。
IMAGE_EFFORT_LEVEL=6
# 【jpeg 原图格式不支持此选项】是否启用无损压缩,可选值:true / false,推荐: false
# 使用 avif / webp 无损压缩时有可能存在比原图还大的情况,如果有无损的需求请使用 jpeg 原图格式。
IMAGE_LOSSLESS=false
# Session 会话文件保存路径,不推荐修改
SESSION_FILE=./.session
# Message SQLite 数据库文件保存路径,不推荐修改
MESSAGE_SQLITE_FILE=./database/messages.db
当前使用:/api/v1/
名称 | 路径 | 方法 | 参数 | 返回 |
---|---|---|---|---|
版本信息 | version |
GET |
无 |
{"name":"","version":"","ts": 0} |
拉取列表 | list |
GET |
无 |
{"data":[],"total":0} |
... 待完善,可参见 ./utils/routers.ts 定义
如果要更换 IP 或者修改监听频道目标 / 账号,请务必执行以下操作:
注意:如果你修改了配置文件中的
MESSAGE_SQLITE_FILE
或SESSION_FILE
路径,请相应地修改脚本,在此不做赘述。
bash ./clear-cache.sh [选项]
选项:
-M, --message 删除消息缓存 (如果需要修改监听频道)
-S, --session 删除会话缓存 (如果更换了 IP / 账号)
示例:
./clear-cache.sh -M # 只删除消息缓存
./clear-cache.sh -S # 只删除会话缓存
./clear-cache.sh -M -S # 同时删除消息和会话缓存
- 完善对于新特性的 parser
MessageEntityCustomEmoji
- 自定义 EmojipackMessageEntitySpoiler
- 消息剧透遮罩效果MessageMediaPhoto
- 图片剧透遮罩效果
- 修复在多张图片附图场景下的图片缺失问题(只能获取到第一张附图)
- 使用 MTProto + Bot API 混合结构
- 对于同步历史消息使用 MTProto API
- 对于新发送的消息采用 WebHook / Polling Bot API 实现
- 好处:可以最大程度地降低账号被封锁的风险
本项目基于 GPL-3.0 开源协议,您可以在遵守协议的前提下自由使用、修改、分发本项目。