ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

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),仅供参考
返回列表