首页/新闻资讯/正文详情

tg-ws-proxy 贡献者开发指南:从源码构建、测试、代码检查到提交 PR 的完整流程

发布时间:2026/9/24 19:53:10 来源:云帆数科 栏目:资讯中心
tg-ws-proxy 贡献者开发指南:从源码构建、测试、代码检查到提交 PR 的完整流程
【免费下载链接】tg-ws-proxyLocal MTProto proxy server for partial bypassing of Telegram loading项目地址https://gitcode.com/gh_mirrors/tg/tg-ws-proxy点击查看免费下载本指南基于仓库根目录的 docs/CONTRIBUTING.md与 docs/EN/CONTRIBUTING.md 英文版互为对照面向希望参与tg-ws-proxyTelegram Desktop 的本地 MTProto/WebSocket 桥接代理开发的贡献者。读完本文你将掌握如何规范地报告 issue、如何在本机用pip install -e .从源码拉起代理并调试、如何用标准库unittest跑通全部测试、如何用ruff做静态检查以及如何提交一个能被快速合并的 PR。一、贡献前的准备工作在创建 issue 或 PR 之前请先完成三项检查避免重复劳动、提高 triage问题分类效率先查文档通读 docs/README.md俄文及其英文版 docs/EN/README.md确认你的问题是否已有现成答案例如安装方式docs/RU/README.windows.md、docs/RU/README.macos.md、docs/RU/README.linux.md、docs/RU/README.docker.md、Cloudflare 代理配置docs/CfProxy.md、Cloudflare Worker 配置docs/CfWorker.md、测试数据中心docs/RU/TestDc.md以及 Fake TLS 与 Nginx 上游docs/RU/FakeTlsNginx.md等专题文档。检索已有 issue确认是否已存在相似问题避免重复提交。使用标准标签为保证 triage 流程顺畅请使用.github/labels.md中定义的标准标签。二、如何报告高质量问题Issue原文档要求使用ПроблемаProblem模板报告问题并尽可能提供以下信息描述越精确得到帮助的速度越快应用版本当前仓库的版本号定义在 proxy/init.py例如1.10.4对应__version__ 1.10.4。报告时应说明是打包好的二进制发行版还是源码运行。操作系统Windows / macOS / Linux 及具体版本项目分别通过 windows.py、macos.py、linux.py 提供不同平台的托盘入口平台差异可能直接影响问题表现。复现步骤从启动代理到触发问题的最小可复现路径。预期行为与实际行为明确写出期望发生什么与实际发生了什么的差异。日志文件或错误文本使用--log-file参数落盘日志详见下文第四节或直接粘贴控制台输出的错误行日志中的报错格式为时间 级别 消息例如[ip:port] bad handshake (wrong secret or proto)就出现在 proxy/tg_ws_proxy.py 处。一个优秀的问题报告应当让维护者无需追问即可定位到proxy/包内proxy/、ui/、utils/的具体模块。三、本地开发环境搭建3.1 环境要求Python ≥ 3.8这是 pyproject.toml 中requires-python 3.8的硬性要求同时 [tool.ruff] 的target-version py38pyproject.toml也表明代码需保持 Python 3.8 兼容。git用于克隆仓库、创建分支与提交 PR。可选Windows 7/8 用户安装时会引入psutil、cryptography、Pillow的旧版本依赖见 pyproject.toml 中带platform_system Windows and python_version 3.9条件的约束。3.2 可编辑安装pip install -e .-eeditable模式会把当前源码目录直接链接进 Python 环境修改代码后无需重装即可生效非常适合开发调试。构建后端是hatchlingpyproject.toml首次安装时会自动解析dependencies中列出的运行依赖pyperclip、certifi、customtkinter、pystray等。3.3 四个入口命令与源码映射安装完成后项目在 pyproject.toml 的[project.scripts]段注册了四个控制台命令命令对应实现用途tg-ws-proxyproxy/tg_ws_proxy.py 的main()纯控制台模式无图形界面仅运行 MTProto 代理核心tg-ws-proxy-tray-winwindows.py 的main()Windows 系统托盘应用tg-ws-proxy-tray-macosmacos.py 的main()macOS 系统托盘应用tg-ws-proxy-tray-linuxlinux.py 的main()Linux 系统托盘应用日常开发调试建议使用tg-ws-proxy控制台模式托盘应用则基于ui/目录下的 CustomTkinter 界面ui/ctk_tray_ui.py、ui/ctk_theme.py与utils/tray_common.py的公共逻辑构建。深入提示从源码结构看tg-ws-proxy的核心调用链为main()解析参数 → 填充 proxy/config.py 的proxy_config单例 →asyncio.run(_run())启动监听服务器再由_handle_client()完成 MTProto 握手、Fake TLS 校验与 WebSocket 桥接proxy/tg_ws_proxy.py。修改握手或转发逻辑时重点关注这些函数。四、控制台模式运行与调试参数从源码运行控制台模式的完整语法详见 docs/RU/BuildFromSource.md英文版见 docs/EN/BuildFromSource.mdtg-ws-proxy [--port PORT] [--host HOST] [--dc-ip DC:IP ...] [-v]4.1 参数全表下表综合了 BuildFromSource 文档与 proxy/tg_ws_proxy.py 中argparse的默认值实现参数默认值说明--port1443代理监听端口--host127.0.0.1代理监听地址仅本机时保持默认--secret自动随机生成32 位十六进制客户端鉴权密钥源码要求长度必须为 32 且为合法 hex否则报错退出proxy/tg_ws_proxy.py--dc-ip2:149.154.167.220、4:149.154.167.220指定某个 DC 的目标 IP格式DC:IP可重复指定多个--no-cfproxy关闭禁用 Cloudflare 代理回退docs/CfProxy.md--cfproxy-domain无自定义 CF 代理域名可重复传入--cfproxy-worker-domain无Cloudflare Worker 域名docs/CfWorker.md优先于其他回退方式可重复传入--no-secure关闭强制使用 80 端口连接 CF-proxy / CF-worker--fake-tls-domain关闭启用 Fake TLSee-secret伪装参数为 SNI 域名如example.com--proxy-protocol关闭接受 HAProxy PROXY protocol v1 头用于 nginx/haproxy 前置场景--buf-kb256Socket 收发缓冲区大小KB源码下限 4proxy/tg_ws_proxy.py--pool-size4每个 DC 预建的 WebSocket 连接池大小下限 0--log-file关闭日志输出文件路径默认仅 stderr开启后按大小滚动--log-max-mb5单个日志文件最大体积MB达到后滚动--log-backups1源码默认滚动保留的日志份数源码实现要求最小为 1 才能正确滚动-v/--verbose关闭开启 DEBUG 级详细日志注意BuildFromSource 文档表格中--log-backups标注为0而当前源码 proxy/tg_ws_proxy.py 的默认值是1且帮助文本注明rotation needs at least one backup to bound size。开发调试时建议显式传参不要依赖默认值。4.2 常用启动示例# 标准启动自动生成 secret启动日志会打印连接链接 tg-ws-proxy --secret 00112233445566778899aabbccddeeff # 自定义端口与额外 DC tg-ws-proxy --port 9050 --dc-ip 1:149.154.175.205 --dc-ip 2:149.154.167.220 # 详细日志且不直连 DC-v 配合空 --dc-ip 触发回退链路调试 tg-ws-proxy -v --dc-ip # 开启 Fake TLS 伪装 tg-ws-proxy --fake-tls-domain example.com启动成功后控制台会打印监听地址、Secret、各 DC 目标 IP 与两种连接链接dd普通密钥、eeFake TLS 密钥这些信息来自 proxy/tg_ws_proxy.py 的启动横幅逻辑。五、运行测试仅依赖标准库原文档强调测试只使用 Python 标准库无需安装额外依赖。这一点在测试源码中得到印证——tests/test_bridge.py 只导入os、unittest和proxy包自身模块没有任何第三方测试框架。运行全部测试python -m unittest discover -s tests -t .参数含义discover自动发现测试用例-s tests指定测试目录-t .将仓库根目录设为测试的顶层目录从而保证proxy、utils包能被正确导入。当前仓库的测试套件覆盖以下模块每个文件对应一个核心功能单元测试文件覆盖对象tests/test_bridge.pyWebSocket 桥接与MsgSplitter消息分包器tests/test_config.pyproxy/config.py 配置解析tests/test_fake_tls.pyproxy/fake_tls.py Fake TLS 握手tests/test_pool.pyproxy/pool.py 连接池tests/test_raw_websocket.pyproxy/raw_websocket.py 底层 WS 客户端tests/test_update_check.pyutils/update_check.py 更新检查一个值得借鉴的测试模式来自 tests/test_bridge.pytest_abridged_stream_splits_into_packets先构造 abridged 协议的多条报文经 AES-CTR 加密后喂给MsgSplitter.split()断言能正确还原出每条独立报文且拼接结果与原始密文一致。这类测试验证了在一条 TCP 流中切分多条 MTProto 消息这一核心能力修改proxy/bridge.py后必须保证此类用例通过。六、静态检查ruff项目的 lint 规则集中在 pyproject.toml 的[tool.ruff]段target-version py38检查时以 Python 3.8 语法为准select [E4, E7, E9, F, B, C4]启用 pycodestyle 错误类E4/E7/E9、pyflakesF、flake8-bugbearB与 flake8-comprehensionsC4ignore [F403, F405, B023]放行通配导入等特定规则macos.py单独忽略E402模块导入顺序。运行检查ruff check .若环境未安装 ruff可先pip install ruff。提交前请确保ruff check .与测试全部通过——这既是 PR 的门槛也是 CI 会执行的标准动作。七、提交 Pull Request 的流程与最佳实践按原文档要求打开 PR 前必须完成三步确认改动解决具体问题每个 PR 应只针对一个明确的问题或特性避免顺手改一堆无关代码。回归验证完整运行第五节与第六节的测试与 lint 命令确保既有场景不被破坏。同步更新文档如果改动改变了行为、配置项或默认值必须同步更新docs/下的相关文档例如新增命令行参数时docs/RU/BuildFromSource.md 的参数表和英文版 docs/EN/BuildFromSource.md 都要跟进。原文档特别强调小且聚焦的 PR 审查与合并速度更快。结合项目结构以下几点能显著提高合入概率改动尽量限定在单一模块代理核心改动放proxy/如 proxy/bridge.py、proxy/balancer.py界面改动放ui/平台托盘改动放 windows.py、macos.py、linux.py公共工具放utils/。为行为改动补充或更新测试参考 tests/test_bridge.py 的写法新增逻辑应在tests/下有对应用例。涉及打包时检查 spec 文件如果改动影响打包产物需同步核对 packaging/windows.spec、packaging/macos.spec、packaging/linux.spec。八、贡献流程速查清单阅读 docs/README.md 与专题文档确认问题未被文档覆盖检索已有 issue / PR确认无重复报告 issue 时填写版本号proxy/init.py、OS、复现步骤、预期/实际行为、日志本地执行pip install -e .用tg-ws-proxy控制台模式复现问题修改代码后运行python -m unittest discover -s tests -t .与ruff check .按需更新docs/文档提交小而聚焦的 PR并使用.github/labels.md的标准标签遵循上述流程你的贡献就能以最快的速度被审查、合并并随着tg-ws-proxy一起帮助更多用户绕过 Telegram 加载受限问题。赞分享【免费下载链接】tg-ws-proxyLocal MTProto proxy server for partial bypassing of Telegram loading项目地址https://gitcode.com/gh_mirrors/tg/tg-ws-proxy点击查看免费下载相关推荐Radarr开发者贡献指南从提交PR到代码审查流程Radarr开发者贡献指南从提交PR到代码审查流程 引言 你是否曾想为开源电影管理工具Radarr贡献自己的力量但却不知道从何开始本文将详细介绍从提交PR后端前端QOwnNotes开发者贡献指南从提交PR到代码审查流程QOwnNotes开发者贡献指南从提交PR到代码审查流程 QOwnNotes是一款开源笔记应用支持Markdown编辑和Nextcloud/ownCloud桌面应用Soundflower源码贡献指南从提交PR到代码审查的完整流程Soundflower源码贡献指南从提交PR到代码审查的完整流程 1. 项目概述 Soundflower是一款MacOS系统扩展System Extensi驱动开发音视频上一篇CMake与CLion深度整合代码导航与重构的编译配置支持下一篇readxl社区贡献指南如何参与开发和提交代码创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Laravel + Symfony Process 组件实战:在 PHP 应用中可靠地执行子进程命令
Laravel + Symfony Process 组件实战:在 PHP 应用中可靠地执行子进程命令

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/24 19:53:10

三丰USB INPUT TOOL详解:量具数据免驱动直连Excel的解决方案
三丰USB INPUT TOOL详解:量具数据免驱动直连Excel的解决方案

简介:《Mitutoyo三丰USB INPUT TOOL使用说明书》面向使用三丰数显量具、需要将测量数据快速导入PC的工业质检与实验室人员,帮助简化数据记录流程、降低人工录入误差。资源为单个PDF电子文档,共1个文件,压缩包约726KB,排… · 2026/9/24 19:53:10

2026年正规医用红外热像仪品牌盘点6家:核心技术指标与临床适配场景选型注意事项与避坑指南FAQ
2026年正规医用红外热像仪品牌盘点6家:核心技术指标与临床适配场景选型注意事项与避坑指南FAQ

2026年正规医用红外热像仪品牌盘点6家:核心技术指标与临床适配场景选型注意事项与避坑指南FAQ 医用红外热像仪作为一种无创、无辐射的功能性成像设备,近年来在中医体质辨识、疼痛区域定位、血液循环评估及早期炎症筛查等领域得到广泛应用。其通过捕捉人体… · 2026/9/24 19:53:10

OpenSandbox实战:轻量级进程隔离沙箱的部署与配置指南
OpenSandbox实战:轻量级进程隔离沙箱的部署与配置指南

我最近在几个开发环境里反复折腾应用隔离的方案,最后被一个叫 OpenSandbox 的命令行工具给留住了。这东西说白了就是一个开源的应用级沙箱运行环境,能把不太可信的脚本、二进制程序、甚至整组服务进程关进一个受限的运行空间里,让它在里面折腾… · 2026/9/24 20:25:20

OpenSandbox极简部署与实践:让不可信代码在隔离沙盒中安全运行
OpenSandbox极简部署与实践:让不可信代码在隔离沙盒中安全运行

1. OpenSandbox到底解决什么问题:从一次重装系统的教训说起1.1 一个让人崩溃的开发场景先说我自己的经历。去年有段时间,我在研究一个第三方提供的自动化测试脚本,对方打包了一堆二进制文件和一个安装入口,文档里写着“建议在干净… · 2026/9/24 20:25:20

B站直播API实战指南:WebSocket弹幕协议、wbi签名与20+功能实现全解析
B站直播API实战指南:WebSocket弹幕协议、wbi签名与20+功能实现全解析

不夸张地说,B站直播API 是中文互联网里最“香”但也最容易被劝退的接口之一。香在哪里?免费、实时性高、事件类型丰富,一个 WebSocket 连上之后,直播间里的弹幕、礼物、SC、入场、关注、舰长开通全都能推到你的服务器上。劝退在哪… · 2026/9/24 20:25:20

ComfyUI抠图全攻略:语义分割、SAM2交互式与BiRefNet自动抠像实战
ComfyUI抠图全攻略:语义分割、SAM2交互式与BiRefNet自动抠像实战

玩ComfyUI的人,十个有九个迟早都会碰到一个问题:怎么把图里的人物或者物体干干净净地抠出来。修图要抠、训练LoRA要抠、做电商图要抠、给视频换背景也要抠。我最早在SD WebUI里习惯了用插件一键搞定,刚转到ComfyUI那会儿还真有点不习惯&#… · 2026/9/24 20:25:20

RabbitMQ在大数据场景下的高级特性与实践:仲裁队列、延迟队列与高可用集群搭建
RabbitMQ在大数据场景下的高级特性与实践:仲裁队列、延迟队列与高可用集群搭建

在大数据这个圈子里,只要一提到消息中间件,大家的第一反应基本都是Kafka,接着就是一顿吞吐量对比、分区副本讨论。RabbitMQ在很多人眼里好像只是给传统业务系统做异步解耦用的“小玩意儿”,跟大数据场景搭不上边。但实际情况是&am… · 2026/9/24 20:25:20

Dopamine 中的 DQN 与 Rainbow 智能体:从三大核心组件到可复现的 Atari 基准实验
Dopamine 中的 DQN 与 Rainbow 智能体:从三大核心组件到可复现的 Atari 基准实验

强化学习机器学习深度学习 【免费下载链接】dopamine Dopamine is a research framework for fast prototyping of reinforcement learning algorithms. 项目地址: https://gitcode.com/gh_mirrors/dopami/dopamine 点击查看 免费下载 本文以仓库文档 docs/agents… · 2026/9/24 20:25:07

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码