{"id":22674257,"url":"https://github.com/dyaxy/telegram-channel-parser","last_synced_at":"2025-04-12T13:35:05.043Z","repository":{"id":267117117,"uuid":"900300621","full_name":"DyAxy/Telegram-Channel-Parser","owner":"DyAxy","description":"将 Telegram 的频道内的消息转换为 图片 + Markdown 文字的内容","archived":false,"fork":false,"pushed_at":"2024-12-26T03:46:47.000Z","size":912,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T08:11:08.595Z","etag":null,"topics":["bun","hono","telegram","telegram-api","telegram-bot","telegram-channel","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DyAxy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-08T12:32:38.000Z","updated_at":"2025-03-14T14:57:34.000Z","dependencies_parsed_at":"2024-12-08T13:38:39.307Z","dependency_job_id":"50f35f14-3f0c-4cc7-a8f4-bbecf0d62278","html_url":"https://github.com/DyAxy/Telegram-Channel-Parser","commit_stats":null,"previous_names":["dyaxy/telegram-channel-praser","dyaxy/telegram-channel-parser"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DyAxy%2FTelegram-Channel-Parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DyAxy%2FTelegram-Channel-Parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DyAxy%2FTelegram-Channel-Parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DyAxy%2FTelegram-Channel-Parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DyAxy","download_url":"https://codeload.github.com/DyAxy/Telegram-Channel-Parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248573824,"owners_count":21126909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","hono","telegram","telegram-api","telegram-bot","telegram-channel","typescript"],"created_at":"2024-12-09T17:14:29.503Z","updated_at":"2025-04-12T13:35:05.037Z","avatar_url":"https://github.com/DyAxy.png","language":"TypeScript","readme":"# Telegram Channel Parser\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/banner.png\" alt=\"banner\" style=\"width: 75%;\"\u003e\n\u003c/div\u003e\n\n将 *Telegram* 的频道内的消息转换为 Base64 编码后的图片 + *Markdown* 文字的内容，并存储到本地 SQLite 数据库。  \n内置 *HTTP* 服务器，可通过 *RESTful API* 灵活调用。  \n基于 *Telegram MTProto* 协议，相比于 Telegram Bot API 可以更加灵活的导入、监听频道的所有消息。  \n\n## :sparkles: 主要特性\n\n- :arrows_counterclockwise: 启动后自动同步频道历史消息\n- :satellite: 实时监听 Telegram 频道动态：\n  - :incoming_envelope: 新消息推送\n  - :pencil2: 消息编辑时自动更新\n  - :wastebasket: 消息删除时自动同步\n- :floppy_disk: 基于 SQLite3 实现的本地高性能、持久化存储：\n  - :compass: 使用 Brotli 压缩算法减轻存储压力\n  - :camera: 图片附件使用 AVIF/WebP 高效编码格式\n  - :file_folder: 支持多种消息类型的存储\n- :rocket: 基于 Hono 的 RESTful API：\n  - :bar_chart: 便捷的消息查询接口\n  - :zap: 高性能数据访问\n  - :wrench: 易于扩展的接口设计\n\n## 免责声明\n\n\u003e [!WARNING]\n\u003e 警告： Telegram MTProto API 的限制比 Bot API 更为严格，使用本项目存在账号被封禁的风险。  \n\u003e 我们强烈建议您了解这些风险后再使用本项目。使用本项目即表示您已知晓并愿意承担所有风险，请勿因封号问题提交 Issue。\n\n**Telegram讨论组：** https://t.me/dyaogroup\n\n## 申请 Telegram Developer API\n\n1. 在 [这里](https://my.telegram.org/ \"这里\") 登录你的 Telegram 账号\n2. 点击“API development tools”，填入 *App title* 和 *Short name* 保存即可。\n3. 需要保存 *api_id* 和 *api_hash*\n\n\u003e [!IMPORTANT]\n\u003e 请注意：**申请 API 属于高危操作**，特别是新注册的 Telegram 账号和使用 VoIP 语音号码注册的账号会加大封号概率，如被封号，请尽快向客服申诉申请解封，千万不要将 API 泄露给他人。\n\n\u003e 来自 Telegram X 安卓端的 *api_id* 和 *api_hash*，**并不保证可用性**\n\u003e API_ID=21724\n\u003e API_HASH=3e0cb5efcd52300aec5994fdfc5bdc16\n\n## 启动程序\n\n### 从构建启动\n\n\u003e [!IMPORTANT]\n\u003e 请注意：由 GitHub CI 自动构建的 x64 二进制包 **不支持没有 AVX2 的古董型号 CPU**，例如 Haswell 系列之前的 CPU。   \n\u003e 自动构建工作流正在使用 Ubuntu Intel x64 环境 + 交叉编译技术，因此如果无法正常运行，请选择 [从源码启动](#从源码启动) 或者提交 PR！\n\n1. 在 [Releases](https://github.com/DyAxy/Telegram-Channel-Parser/releases) 页面根据自己的环境下载对应压缩包\n2. 解压压缩包 (`tar -zxvf telegram-parser*.tar.gz`)\n3. 进入解压后的目录 (`cd telegram-parser*`)\n4. 修改权限 (`chmod +x telegram-parser*`)\n5. 使用 `cp .env.example .env` 后修改 `.env` 的配置内容\n6. 启动程序 (`./telegram-parser*`)\n7. 根据提示输入手机号、Telegram 收到的验证码、二次密码等。\n8. 第一次使用会创建数据库并拉取频道内容，后续每次启动只会拉取最新内容。\n9. 如有开机自启动等需求，请参阅 [持久化服务](#持久化服务)\n\n```\n项目文件结构\n├── database/               # 数据库目录\n│   ├── init.sql            # 数据库初始化文件，请不要删除\n|   ├── messages.db         # 存储消息的 SQLite 数据库\n│   └── ...\n├── static/                 # 前端静态目录\n│   └── ...\n├── .env                    # 环境变量文件\n├── .session                # Session 文件（登陆后才会有）\n├── telegram-parser_...     # 程序主文件\n└── ...                     # 其他文件\n```\n\n### 从源码启动\n\n1. 你需要使用 [Bun](https://bun.sh/ \"Bun\")（一款高性能的 Javascript 运行环境）来运行本程序。\n   一键安装 Bun: `curl -fsSL https://bun.sh/install | bash`\n2. 使用 `cp .env.example .env` 后修改 `.env` 的配置内容。\n3. 使用 `bun install` 来安装所有依赖。\n4. 使用 `bun run dev` 启动服务端。\n5. 根据提示输入手机号、Telegram收到的验证码、二次密码等。\n6. 第一次使用会创建数据库并拉取频道内容，后续每次启动只会拉取最新内容。\n7. 如有开机自启动等需求，请参阅 [持久化服务](#持久化服务)\n\n## 持久化服务\n   \n1. 本项目使用 pm2 进行服务管理，安装依赖 pm2：`bun i -g pm2`\n2. 先使用 `bun run dev` 启动并成功登录后，关闭服务端\n3. 确认 Session 登录成功后一键启动: `pm2 start ecosystem.config.js`\n\n### 修改 .env.example 为 .env\n\n修改 .env 中的对应配置，如果未修改则无法启动服务端\n\n```ini\n# 将 Telegram 获得的api_id api_hash 填入下方\nAPI_ID=123456\nAPI_HASH=1234567890abcdef1234567890abcdef\n\n# 来自 Telegram X 安卓端的 api_id 和 api_hash，并不保证可用性\n# API_ID=21724\n# API_HASH=3e0cb5efcd52300aec5994fdfc5bdc16\n\n# 频道名称，复制时去掉@\n# 如果需要监听新消息/编辑消息/删除消息，需要加入该频道\nCHANNEL_ID=test\n# API分页功能，显示多少条内容一页\nCHANNEL_PAGE_SIZE=10\n\n# HTTP 监听 IP 和端口\nHOST=0.0.0.0\nPORT=3000\n\n# CORS 白名单\n# 使用英文逗号分隔，请填写前端地址的 new URL().origin 的结果（不带 /）。\n# 如果不配置好则默认为 *，不推荐。\nCORS_WHITELIST=https://example.com,http://localhost:3000\n\n# 日志等级，默认 debug，生产环境请修改为 info 或 warn\n# 可选 none | error | warn | info | debug\nLOG_LEVEL=debug\n\n# 性能优化\n# 默认使用 Brotli 压缩数据库中的文本消息，可节约硬盘空间，可选值 0~11\n# 0 即不压缩仅编码，11 即最大压缩，推荐范围 6~9\nCONTENT_ENCODE_CPU_LEVEL=6\n\n# 图片编码格式，当前支持 avif / webp / jpeg (原图格式)\n# 推荐 avif \u003e webp，如果需要兼容老旧浏览器（如 IE）时请选择 jpeg。\nIMAGE_ENCODE_FORMAT=avif\n\n# 【jpeg 原图格式不支持此选项】图片有损压缩比率，可选值：1-100。\n# 值越低图片的肉眼观感越差、占存储空间越小，推荐 60~80，压缩比再高就推荐选择使用 jpeg 原图格式。\nIMAGE_QUALITY=60\n\n# 【jpeg 原图格式不支持此选项】图片编码压缩等级，可选值：0-9，推荐范围：6~8\n# 等级越高压缩效果越好，图片的肉眼观感不变，但编码时消耗的 CPU 性能也越多，如果压缩时出现 OOM 内存不足报错时可适当降低。\nIMAGE_EFFORT_LEVEL=6\n\n# 【jpeg 原图格式不支持此选项】是否启用无损压缩，可选值：true / false，推荐: false\n# 使用 avif / webp 无损压缩时有可能存在比原图还大的情况，如果有无损的需求请使用 jpeg 原图格式。\nIMAGE_LOSSLESS=false\n\n# Session 会话文件保存路径，不推荐修改\nSESSION_FILE=./.session\n\n# Message SQLite 数据库文件保存路径，不推荐修改\nMESSAGE_SQLITE_FILE=./database/messages.db\n```\n\n## API 接口：\n\n当前使用：`/api/v1/`\n\n| 名称     | 路径      | 方法  | 参数 | 返回                               |\n| -------- | --------- | ----- | ---- | ---------------------------------- |\n| 版本信息 | `version` | `GET` | `无` | `{\"name\":\"\",\"version\":\"\",\"ts\": 0}` |\n| 拉取列表 | `list`    | `GET` | `无` | `{\"data\":[],\"total\":0}`            |\n\n\n... 待完善，可参见 ./utils/routers.ts 定义\n\n## 删除本地缓存\n\n如果要更换 IP 或者修改监听频道目标 / 账号，请务必执行以下操作：\n\n\u003e 注意：如果你修改了配置文件中的 `MESSAGE_SQLITE_FILE` 或 `SESSION_FILE` 路径，请相应地修改脚本，在此不做赘述。\n\n```bash\nbash ./clear-cache.sh [选项]\n\n选项:\n  -M, --message    删除消息缓存 (如果需要修改监听频道)\n  -S, --session    删除会话缓存 (如果更换了 IP / 账号)\n\n示例:\n  ./clear-cache.sh -M          # 只删除消息缓存\n  ./clear-cache.sh -S          # 只删除会话缓存\n  ./clear-cache.sh -M -S       # 同时删除消息和会话缓存\n```\n\n## TODO List\n\n- 完善对于新特性的 parser\n  - `MessageEntityCustomEmoji` - 自定义 Emojipack\n  - `MessageEntitySpoiler` - 消息剧透遮罩效果\n  - `MessageMediaPhoto` - 图片剧透遮罩效果\n- 修复在多张图片附图场景下的图片缺失问题（只能获取到第一张附图）\n- 使用 MTProto + Bot API 混合结构\n  - 对于同步历史消息使用 MTProto API\n  - 对于新发送的消息采用 WebHook / Polling Bot API 实现\n  - 好处：可以最大程度地降低账号被封锁的风险\n\n## 开源协议\n\n本项目基于 [*GPL-3.0*](./LICENSE) 开源协议，您可以在遵守协议的前提下自由使用、修改、分发本项目。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyaxy%2Ftelegram-channel-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdyaxy%2Ftelegram-channel-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyaxy%2Ftelegram-channel-parser/lists"}