news 2026/10/15 2:32:20

TG WS Proxy贡献者指南:项目结构剖析与如何提交你的第一个PR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TG WS Proxy贡献者指南:项目结构剖析与如何提交你的第一个PR

TG WS Proxy贡献者指南:项目结构剖析与如何提交你的第一个PR

TG WS Proxy 是一款免费的本地 MTProto 代理服务器,专为 Telegram Desktop 加速加载而设计。它将 Telegram 流量通过 WebSocket 连接重定向,数据全程保持加密传输,且无需任何第三方服务器——一切都运行在你本地。如果你想为这个开源项目贡献力量,本指南将带你看懂项目结构、跑通本地运行环境,并手把手教你提交第一个 PR。

先搞懂 TG WS Proxy 的工作原理

在动手改代码前,先理解数据流。一句话概括整个链路:

Telegram Desktop → MTProto 代理 (127.0.0.1:1443) → WebSocket → Telegram 数据中心

具体分为 5 步:

  1. 应用在127.0.0.1:1443启动本地 MTProto 代理
  2. 拦截 Telegram Desktop 的数据中心连接
  3. 从 MTProto 混淆初始包中提取 DC ID
  4. 通过 Telegram 官方域名建立 WebSocket(TLS)连接
  5. 若 WebSocket 不可用(遇到 302 重定向),自动降级到 Cloudflare 代理或直连 TCP

项目结构剖析:每个模块在哪里

仓库顶层结构非常清晰,一眼就能分清职责:

目录 / 文件职责
proxy/核心代理引擎(asyncio 异步实现)
ui/基于 CustomTkinter 的系统托盘界面
utils/配置、日志、更新检查等公共工具
packaging/PyInstaller 打包规范
docs/多语言文档(俄 / 英 / 中)
pyproject.toml项目元数据与依赖声明

proxy/:核心代理引擎

这是改动频率最高、也是最值得新人阅读的目录:

  • proxy/tg_ws_proxy.py — 入口与主调度:监听端口、握手校验、连接分发
  • proxy/bridge.py — 数据双向桥接与 MTProto 层 1 重加密,包含 CF 代理 / TCP 回退策略
  • proxy/raw_websocket.py — 自研 WebSocket 客户端,手工实现握手与帧解析,零第三方依赖
  • proxy/pool.py — WebSocket 连接池:预分配、补充、轮换
  • proxy/fake_tls.py — Fake TLS(ee-secret)伪装支持
  • proxy/balancer.py — 数据中心域名负载均衡
  • proxy/_aes.py — AES-CTR 加解密核心
  • proxy/config.py — 端口、DC IP、CF 代理域名等配置解析

ui/:托盘界面与国际化

  • ui/ctk_tray_ui.py — 设置表单、连通性测试按钮等全部 UI 逻辑
  • ui/ctk_theme.py — 跨平台主题适配
  • ui/i18n/ — 多语言资源:en.json 与 ru.json

🌏想贡献翻译?从这里入手最友好——新增一个xx.json并在ui/i18n/注册语言即可,不涉及核心逻辑。

utils/ 与各平台入口

  • utils/tray_common.py — 配置读写、单实例锁、代理线程生命周期管理
  • utils/update_check.py — 版本更新检查
  • utils/logging_setup.py — 滚动日志文件配置
  • windows.py / macos.py / linux.py — 三大平台的托盘入口点

打包与入口命令

pyproject.toml 中注册了 4 个控制台命令:tg-ws-proxy(纯控制台代理)和tg-ws-proxy-tray-win / tray-macos / tray-linux(托盘版)。桌面端打包由 PyInstaller 规范驱动:packaging/windows.spec、packaging/macos.spec、packaging/linux.spec。

本地构建步骤:5 分钟跑起 TG WS Proxy

贡献的前提是先把项目跑起来。唯一硬性要求:Python ≥ 3.8。

第一步:克隆并安装

git clone https://gitcode.com/gh_mirrors/tg/tg-ws-proxy cd tg-ws-proxy pip install -e .

第二步:启动控制台模式(无托盘界面,适合调试)

tg-ws-proxy --port 1443 -v

第三步:按系统选择托盘版启动

tg-ws-proxy-tray-win # Windows tg-ws-proxy-tray-macos # macOS(需 Python 带 Tk 支持) tg-ws-proxy-tray-linux # Linux(需 AppIndicator)

完整参数表(--dc-ip、--fake-tls-domain、--cfproxy-domain等)见 docs/EN/BuildFromSource.md。

首次启动会看到这样一个引导窗口,包含连接信息和一键跳转到 Telegram 的选项:

💡调试小贴士:加-v输出 DEBUG 级日志是定位代理问题的第一手段;日志落盘参数--log-file配合--log-max-mb可长期留存现场。

如何提交你的第一个 PR

官方贡献指南是 docs/CONTRIBUTING.md,核心要求如下。

提 issue 之前

  1. 先查阅 docs/README.md 及相关平台文档
  2. 确认没有重复的 issue
  3. 按仓库标准 label 规范提交,方便维护者分诊

Bug 报告要包含的信息

  • 应用版本号、操作系统
  • 复现步骤
  • 预期行为 vs 实际行为
  • 日志文件或错误文本

描述越精确,修复越快——这是官方指南的原文态度。

PR 提交前的三项检查

依据 docs/CONTRIBUTING.md:

  • 你的改动解决了具体问题(不夹带无关修改)
  • 现有功能场景没有被破坏
  • 若行为或配置有变化,同步更新了文档

⚡小步、聚焦的 PR 会被最快审核合并——这既是官方建议,也是经验之谈。

新手友好任务推荐

任务类型入手位置难度
翻译 / 本地化ui/i18n/、docs/⭐
文档勘误补充docs/ 各平台 README⭐
新增控制台参数proxy/tg_ws_proxy.py 参数解析部分⭐⭐
桥接 / 回退逻辑优化proxy/bridge.py⭐⭐⭐

代码风格遵循 pyproject.toml 中的 Ruff lint 规则,提交前本地跑一遍 lint,能省去不少往返。

写在最后

TG WS Proxy 是一个"小而完整"的网络工程项目:核心逻辑高度集中在proxy/目录,从加密、桥接到 UI 分层清晰,每个文件都能独立读懂。先按上面的步骤跑通本地环境,再从任务表中挑一个 ⭐ 难度的小改动练手——你的第一个 PR 就会水到渠成。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 2:28:49

基于SpringBoot+Vue的宠物领养系统架构设计与实践

1. 项目概述这个宠物领养系统是一个典型的互联网应用,采用前后端分离架构。前端使用Vue.js框架构建用户界面,后端基于SpringBoot技术栈实现业务逻辑。系统主要解决传统宠物领养过程中信息不对称、流程繁琐的问题,为宠物救助机构和领养者搭建数…

作者头像 李华
网站建设 2026/10/15 2:25:17

当年超火的三款软件,现已风光不再,曾被嫌弃的它成香饽饽

“滚滚长江东逝水,浪花淘尽英雄”。当我们翻开中国互联网产业的历史长卷,DOS时代的峥嵘岁月里,曾涌现出无数叱咤风云的豪杰。那些曾被奉为圭臬的“霸主”,在技术浪潮中成了沉舟侧畔的标本;而当年被嗤之以鼻的“异类”&…

作者头像 李华
网站建设 2026/10/15 2:22:46

宠物医疗信息化系统开发实战:SSM与Flask混合架构解析

1. 项目概述:宠物医疗信息化解决方案这个宠物医院信息管理系统是我去年为本地一家中型连锁宠物诊所开发的数字化管理平台。当时诊所老板向我吐槽说,他们还在用Excel表格记录病例,经常出现预约冲突、药品库存不准的问题,甚至发生过…

作者头像 李华
网站建设 2026/10/15 2:22:10

H5手游联运推广平台源码解析:PHP环境搭建与分成结算实战

简介:这份资源是2020年最新的H5游戏手游联运推广平台系统源码,基于PHP开发,面向手游联运创业者、推广平台搭建者以及希望研究联运系统架构的开发者,可帮助快速搭建一套集游戏接入、渠道推广与用户管理于一体的运营平台。压缩包共约…

作者头像 李华
网站建设 2026/10/15 2:21:58

VGGNet论文精读:从3×3卷积到VGG16的完整解析与复现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华