Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/btn/connect.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Sparkle 是 PBH-BTN 组织的官方 BTN 服务器。

### 注册账号并创建 UserApp

请在浏览器中打开 [https://sparkle.pbh-btn.com](https://sparkle.pbh-btn.com) 并使用 GitHub 授权登录,系统将自动为您创建一个账号。
请在浏览器中打开 [https://sparkle.pbh-btn.com](https://sparkle.pbh-btn.com) 并使用 GitHub 授权登录,系统将自动为您创建一个账号。

接着,点击页面顶部的“用户应用程序”链接,进入管理页面。

Expand Down
2 changes: 1 addition & 1 deletion docs/downloader/BiglyBT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 2

:::warning

所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!
所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!

:::

Expand Down
8 changes: 4 additions & 4 deletions docs/downloader/BitComet.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 5

:::warning

所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!
所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!

:::

Expand Down Expand Up @@ -51,8 +51,8 @@ PeerBanHelper 所需的 WebAPI 仅在 `v2.10 Beta6 [20240928]` 或更高版本
默认情况下,WebUI 会受到网络连接中的速度限制。这可能会影响 PeerBanHelper 访问 BitComet WebAPI 的性能,导致封禁失败和延迟。因此,需要禁用此功能。

1. 在设置界面左侧树形菜单中,选择“高级设置”。
2. 关闭远程访问速度限制
(如果使用的是较旧版本)找到`network.ignore_remote_access_in_speed_limit`,并将其值设置为“是”。
2. 关闭远程访问速度限制。
(如果使用的是较旧版本)找到`network.ignore_remote_access_in_speed_limit`,并将其值设置为“是”。
(如果使用的是较新版本)找到`network.exclude_remote_access_from_connection_restrictions`,并将其值设置为“是”。

| 较旧版本 | 较新版本 |
Expand All @@ -74,7 +74,7 @@ PeerBanHelper 需要通过远程访问功能连接 BitComet。此功能默认关
- 确保防火墙配置正确,只开放必要端口
:::

![step4](./assets/BitComet-step4.png)
![step4](./assets/BitComet-step4.png)


完成所有设置后,请确保点击保存。
Expand Down
53 changes: 51 additions & 2 deletions docs/downloader/Deluge.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,57 @@ sidebar_position: 4

:::warning

所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!
所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!

:::

还在施工
PeerBanHelper 将通过 Deluge 的插件系统连接到 Deluge。

## 安装 PBH-Adapter-Deluge 适配器

首先需要下载 Deluge 适配器:[PBH-BTN/PBH-Adapter-Deluge](releases),请选择与您的 Deluge 版本匹配的插件 Egg 文件进行下载,如无特殊说明,请下载最新版本。

Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
### Windows 系统安装步骤

1. 在 Deluge 中,选择"编辑"->"首选项"打开配置窗口。

![step1](assets/Deluge-step1.png)

2. 转到"插件"菜单,点击"安装插件"按钮。

![step2](assets/Deluge-step2.png)

3. 在弹出的选择文件对话框中,选择刚刚下载的 Egg 文件。

![step3](assets/Deluge-step3.png)

4. 选择后,插件应该就会安装完成,返回插件菜单,您应该已经看到了 PeerBanHelper 插件,请在前面的复选框中打勾启用,并点击"关闭"保存退出。

![ste4p](assets/Deluge-step4.png)

### Linux 系统安装步骤

对于 Linux 用户,请将下载的 Egg 文件放置在 Deluge 的插件目录中。

## 配置 PBH-Adapter-Deluge 适配器

PBH-Adapter-Deluge 插件安装后会自动启用,无需额外配置。

## 连接到 PeerBanHelper

在 PeerBanHelper 的添加下载器页面,选择 Deluge 下载器。

1. 点击 PBH 的新建下载器按钮,弹出的对话框中选择 Deluge 下载器。

![step5](assets/Deluge-step5.png)

2. 填写连接参数:
* **名称**:起一个自己喜欢的名字
* **地址**:填写你的 Deluge WebUI 地址
* **密码**:填写你的 Deluge WebUI 密码
* **RPC URL**:如果不知道这是什么,请填写 `/json`
* **增量封禁**:建议启用,可减少对下载器的请求次数
* **HTTP 版本**:保持默认(HTTP/1.1)
* **验证 SSL 证书**:如果使用 HTTPS 连接且证书有效,则启用;如果使用自签名证书或不需要验证,则禁用

3. 点击确定保存,即完成添加。
6 changes: 3 additions & 3 deletions docs/downloader/Transmission.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ sidebar_position: 999

## 配置 PeerBanHelper 屏蔽列表提供端点

由于 Transmission 的封禁列表更新方式是主动拉取,而非 PeerBanHelper 向其推送。因此你需要配置一个 “屏蔽列表提供端点”,向 Transmission 提供 HTTP 服务来提供封禁列表。
由于 Transmission 的封禁列表更新方式是主动拉取,而非 PeerBanHelper 向其推送。因此你需要配置一个 “屏蔽列表提供端点”,向 Transmission 提供 HTTP 服务来提供封禁列表。
不过别担心,PeerBanHelper 已经帮你完成了这个任务。PBH 的 WebUI 的 HTTP 服务器也可以兼任这个角色。这样当封禁列表有任何变化时,PeerBanHelper 就会自动更新并通知 Transmission 拉取。

你需要打开 PeerBanHelper 的 WebUI 并转到 “设置 -> 基础设置 -> WebUI -> 前缀”,将其设置为一个在 Transmission 所在位置可访问 PeerBanHelper WebUI 的地址。
你需要打开 PeerBanHelper 的 WebUI 并转到 “设置 -> 基础设置 -> WebUI -> 前缀”,将其设置为一个在 Transmission 所在位置可访问 PeerBanHelper WebUI 的地址。

![step3](assets/transmission-config-prefix.png)

Expand All @@ -45,7 +45,7 @@ http://127.0.0.1:<PBHWebUI端口>
http://127.0.0.1:9898
```

注意不要以斜线结尾。
注意不要以斜线结尾。
保存配置后,添加 Transmission 下载器,如果能够成功添加,则说明配置正确。

## 添加 Transmission 到 PeerBanHepler 中
Expand Down
Binary file added docs/downloader/assets/Deluge-step1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/downloader/assets/Deluge-step2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/downloader/assets/Deluge-step3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/downloader/assets/Deluge-step4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/downloader/assets/Deluge-step5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/downloader/qBittorrent.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 1

:::warning

所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!
所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!

:::

Expand Down
4 changes: 2 additions & 2 deletions docs/downloader/qBittorrentEE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sidebar_position: 2

:::warning

所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!
所有部署在 Docker 中的下载器,不得使用 bridge 桥接网络模式,必须使用 host 网络模式,以使下载器能够获取正确的 Peer 入站地址,否则 PeerBanHelper 将完全不会工作!

:::

Expand All @@ -19,6 +19,6 @@ sidebar_position: 2
qBittorrent EE 提供了 [ShadowBan API](https://github.com/c0re100/qBittorrent-Enhanced-Edition/issues/538),作为传统 IP 封禁的替代方案。要使用此功能,您需要确保已安装 qBittorrent Enhanced Edition 4.6.6.10 或更高版本。

:::warning
**除非在必要情况下,否则不建议启用 ShadowBan 功能。** 误用此功能可能会导致您的行为类似于恶意吸血端,进而引发一系列问题。
**除非在必要情况下,否则不建议启用 ShadowBan 功能。** 误用此功能可能会导致您的行为类似于恶意吸血端,进而引发一系列问题。
此外,在成功达到恶意吸血者的连接数限制之前,您可能会首先达到互联网服务提供商(ISP)设定的连接数限制,从而导致您自己的网络连接中断。这种情况可能会产生反向效果。考虑到当前的吸血端在长时间未接收到您的上传数据时会自动断开连接,这使得 ShadowBan 功能的效果大打折扣。
:::
8 changes: 4 additions & 4 deletions docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@

## PeerBanHelper 能检测到需要封禁的 Peer 但是不封禁 (严重错误:下载器处于不正确的网络模式下,PeerBanHelper 可能不会工作)

通常是因为 IP 地址不正确,检查没有封禁的 Peer 的 IP 地址是否是 172.x.x.x, 10.x.x.x, 192.x.x.x 等内网 IP 地址。
如果是,且下载器部署在 Docker 中,则必须将下载器的容器网络模式切换为 host 模式,而不能使用 bridge 模式。经过 Docker 转发的入站连接会因为丢失真实 IP 地址导致 PBH 不会工作。
通常是因为 IP 地址不正确,检查没有封禁的 Peer 的 IP 地址是否是 172.x.x.x, 10.x.x.x, 192.x.x.x 等内网 IP 地址。
如果是,且下载器部署在 Docker 中,则必须将下载器的容器网络模式切换为 host 模式,而不能使用 bridge 模式。经过 Docker 转发的入站连接会因为丢失真实 IP 地址导致 PBH 不会工作。

尽管你可以修改配置取消这个检查,但这并不推荐。一旦你这样做,PBH 将会 **错误地封禁所有的入站连接**,因此正确的设置网络模式是非常必要的。
尽管你可以修改配置取消这个检查,但这并不推荐。一旦你这样做,PBH 将会 **错误地封禁所有的入站连接**,因此正确的设置网络模式是非常必要的。

某些 IP 转发工具,如 Lucky, FRP 等可能会在用户空间转发数据表,这也会修改包的 IP 地址,并导致下载器中 Peer IP 显示不正确。如果您正在使用这些工具,请查看对应工具的帮助文档以寻求解决方案。
某些 IP 转发工具,如 Lucky, FRP 等可能会在用户空间转发数据表,这也会修改包的 IP 地址,并导致下载器中 Peer IP 显示不正确。如果您正在使用这些工具,请查看对应工具的帮助文档以寻求解决方案。
OpenWRT/RouterOS 等高自由度路由固件可能需要检查 NAT 设定。

## 启动时报错:“Failed to bind to port / Port already in use. Make sure no other process is using port XXXX and try again.”
Expand Down
4 changes: 2 additions & 2 deletions docs/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ sidebar_position: 1

## PeerBanHelper:开源共享的力量

PeerBanHelper 是一个开源软件,您可以自由的传播和免费下载 PeerBanHelper。
PeerBanHelper 是一个开源软件,您可以自由的传播和免费下载 PeerBanHelper。

如果 PeerBanHelper 对你有所帮助,考虑在[面包多](https://mbd.pub/o/ghostchu)或[爱发电](https://afdian.com/a/Ghost_chu)捐赠支持我们。
如果 PeerBanHelper 对你有所帮助,考虑在[面包多](https://mbd.pub/o/ghostchu)或[爱发电](https://afdian.com/a/Ghost_chu)捐赠支持我们。
所有的捐赠收入都将用于维护 PBH-BTN 的基础设施以及奖励我们辛勤的社区维护者们。
4 changes: 2 additions & 2 deletions docs/misc/json-engine.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ PBH 使用 JSON 规则引擎来解析规则。

每个规则执行后都会在 `TRUE`, `FALSE` 和 `DEFAULT` 三个结果中选择一个作为返回值。

对于 **if条件** 来说,`TRUE` 和 `DEFAULT` 都返回真结果,`FALSE` 返回假结果。
对于 **if条件** 来说,`TRUE` 和 `DEFAULT` 都返回真结果,`FALSE` 返回假结果。
对于 **封禁规则** 来说,`TRUE` 会封禁 Peer,`FALSE` 会**强制**放行 Peer(优先级比封禁更高),而 `DEFAULT` 则会保持默认,什么都不做。

对于 if 条件,如果用户没有明确指定,则总是返回 TRUE,使得条件为真,执行规则。
对于 if 条件,如果用户没有明确指定,则总是返回 TRUE,使得条件为真,执行规则。
对于 封禁规则,如果用户没有明确指定,则 hit 行为总是返回 TRUE,使得条件为真,封禁 Peer;而 miss 行为总是返回 DEFAULT,保持默认,不做额外操作。

### 自定返回类型
Expand Down
4 changes: 2 additions & 2 deletions docs/module/client-name.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# ClientName 过滤器

ClientName 过滤器会使用由 Peer 主动汇报的 ClientName(有时也称为 “客户端名称” 或者 “UserAgent”)来检测。对于内置 PeerID 过滤器的客户端(例如 qBittorrent Enhanced Edition),建议优先使用其内置的 ClientName 过滤功能。
ClientName 过滤器会使用由 Peer 主动汇报的 ClientName(有时也称为 “客户端名称” 或者 “UserAgent”)来检测。对于内置 PeerID 过滤器的客户端(例如 qBittorrent Enhanced Edition),建议优先使用其内置的 ClientName 过滤功能。
:::warning
ClientName 是由 Peer 主动汇报的(可以被随意修改),因此不能作为判定对方客户端的依据。
ClientName 是由 Peer 主动汇报的(可以被随意修改),因此不能作为判定对方客户端的依据。
:::
ClientName 是 BitTorrent 的一个[扩展协议](https://www.bittorrent.org/beps/bep_0010.html),因此一个 Peer 可以没有 ClientName。对于这种情况,PeerBanHelper 会显示为 `N/A`。

Expand Down
8 changes: 4 additions & 4 deletions docs/module/expression-engine.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# AviatorScript 引擎

PeerBanHelper 允许用户加载 [AviatorScript 用户脚本](https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90)。
PeerBanHelper 允许用户加载 [AviatorScript 用户脚本](https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90)。

## 简述

AviatorScript 允许用户加载一个用户脚本,以便在 PBH 检测 Peer 时执行自定义的代码。支持反射、实例创建等高级操作,拥有完整编程能力。
AviatorScript 允许用户加载一个用户脚本,以便在 PBH 检测 Peer 时执行自定义的代码。支持反射、实例创建等高级操作,拥有完整编程能力。
有时 PBH 遇到新变种时,在无法发布新版本 PBH 的情况下,会向社区公开 AviatorScript 脚本,以便在不更新 PBH 的情况下进行检查和封禁。

## 安装 AviatorScript 脚本

AviatorScript 脚本以 `.av` 结尾。将其放入 `data/scripts/` 目录即可加载。
AviatorScript 脚本以 `.av` 结尾。将其放入 `data/scripts/` 目录即可加载。
如果你是本地安装,则可以直接通过 WebUI 管理脚本。

![expression-engine](./assets/expression-engine.png)
Expand Down Expand Up @@ -40,7 +40,7 @@ AviatorScript 脚本以 `.av` 结尾。将其放入 `data/scripts/` 目录即可

### 预设变量

一些变量在执行前就已提前注入到 AviatorScript 运行时,您可以直接使用它们,参见配置文件。
一些变量在执行前就已提前注入到 AviatorScript 运行时,您可以直接使用它们,参见配置文件。

### 返回值

Expand Down
2 changes: 1 addition & 1 deletion docs/module/ip-address-blocker-rules.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 订阅规则

PeerBanHelper 的重要模块之一,默认订阅来自 [PBH-BTN/BTN-Collected-Rules](https://github.com/PBH-BTN/BTN-Collected-Rules) 的规则。
PeerBanHelper 的重要模块之一,默认订阅来自 [PBH-BTN/BTN-Collected-Rules](https://github.com/PBH-BTN/BTN-Collected-Rules) 的规则。
当有规则内的 IP 连接下载器时,PeerBanHelper 会立刻封禁它。

:::tip
Expand Down
8 changes: 4 additions & 4 deletions docs/module/ip-address-blocker.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ IP 黑名单,支持输入一个或多个 IP 地址或者 CIDR 地址。列出

## ASNs

ASN 黑名单。需要配合 Maxmind GeoLite2 ASN 数据库使用。ASN 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。
ASN 黑名单。需要配合 Maxmind GeoLite2 ASN 数据库使用。ASN 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。
支持输入一个或者多个 [ASN](https://zh-hans.ipshu.com/asn_list),所有在给定的 ASN 内的 IP 地址在连接到您的下载器即会被封禁。

不建议中国大陆地区使用 ASN 封禁,因为 AOE 范围可能过大。

## Regions

国家/地区黑名单。可以输入一个或者多个 [ISO 3166-1 国家二字母码](https://www.rr78.com/World/postal/)。需要配合 Maxmind GeoLite2 City 数据库。 City 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。
国家/地区黑名单。可以输入一个或者多个 [ISO 3166-1 国家二字母码](https://www.rr78.com/World/postal/)。需要配合 Maxmind GeoLite2 City 数据库。 City 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。

## Cities

城市黑名单。对于境外城市,使用 Maxmind 城市名称。如果是 GeoCN 收录的城市(中国大陆境内、部分台湾香港澳门),使用标准简体中文名称。
城市黑名单。对于境外城市,使用 Maxmind 城市名称。如果是 GeoCN 收录的城市(中国大陆境内、部分台湾香港澳门),使用标准简体中文名称。
使用包含匹配算法,只要名称中包含给定关键字,即封禁:

* `New York` - 封禁美国纽约
Expand All @@ -53,7 +53,7 @@ ASN 黑名单。需要配合 Maxmind GeoLite2 ASN 数据库使用。ASN 数据

## Net Type

网络类型黑名单。需要配合 GeoCN 数据库。 GeoCN 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。
网络类型黑名单。需要配合 GeoCN 数据库。 GeoCN 数据库应该会在启动 PBH 时伴随 IPDB 一起下载。

如果 IP 的网络类型被 GeoCN 数据库收录,则可以封禁对应网络类型的 IP 地址。

Expand Down
2 changes: 1 addition & 1 deletion docs/module/peer-id.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# PeerID 过滤器

PeerID 过滤器会使用由 Peer 主动汇报的 PeerID 来检测。对于内置 PeerID 过滤器的客户端(例如 qBittorrent Enhanced Edition),建议优先使用其内置的 PeerID 过滤功能。
PeerID 过滤器会使用由 Peer 主动汇报的 PeerID 来检测。对于内置 PeerID 过滤器的客户端(例如 qBittorrent Enhanced Edition),建议优先使用其内置的 PeerID 过滤功能。

:::warning
PeerID 是由 Peer 主动汇报的(可以被随意修改),因此不能作为判定对方客户端的依据。
Expand Down
6 changes: 3 additions & 3 deletions docs/module/progress-cheat-blocker.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 进度检查器

进度检查器(ProgressCheatBlocker)(有时也称为 PCB 或者启发式检测算法)是由 PeerBanHelper 创建的基于下载进度的一种启发式的反吸血检测算法。
进度检查器(ProgressCheatBlocker)(有时也称为 PCB 或者启发式检测算法)是由 PeerBanHelper 创建的基于下载进度的一种启发式的反吸血检测算法。

## 概述

Expand All @@ -13,11 +13,11 @@ PeerBanHelper 会持续追踪所有活动种子上的活跃 Peers,实时追踪
* Peer 断开重连后进度归零,或者进度变少超过一定值(进度回退)
* Peer 在下载了 100% 种子体积大小后,没有断开连接而是仍然持续下载(超量下载)

对于进度检查器来说,其进度判定不是基于单个 IP 地址,而是基于 “IP 组”。同一个组里的 IP 地址都被视为同一个 Peer,不论 IP、端口、PeerID、ClientName 是否相同。
对于进度检查器来说,其进度判定不是基于单个 IP 地址,而是基于 “IP 组”。同一个组里的 IP 地址都被视为同一个 Peer,不论 IP、端口、PeerID、ClientName 是否相同。
* 对于 IPv4,这个组的默认大小是 `/32`,也就是 1 个 IPv4 地址
* 对于 IPv6,这个组的默认大小是 `/60`,通常是路由器得到的 IPv6 前缀大小

PBH 持续追踪 Peer 的下载进度,并计算其上传量和上传增量。当 Peer 的统计数据由于某种原因重置了(例如更换端口和PeerID),PBH 会通过之前记录的数据为 Peer 修正进度以避免进度欺骗。
PBH 持续追踪 Peer 的下载进度,并计算其上传量和上传增量。当 Peer 的统计数据由于某种原因重置了(例如更换端口和PeerID),PBH 会通过之前记录的数据为 Peer 修正进度以避免进度欺骗。

![PCB](./assets/pcb.jpeg)

Expand Down
Loading