一个基于 Xboard 插件钩子的订阅节点排序插件。它在各协议生成订阅内容之前统一整理节点顺序,并可自动在真实节点名称前添加国家或地区旗帜,不需要修改 Xboard 核心代码。
- 三类订阅信息固定置顶:
剩余流量、距离下次重置剩余、套餐到期。 - 其他通知、公告、客户端提示和订阅提示排在真实节点之前。
- 中文国家或地区节点整体排在英文名称节点之前。
- 中文国家或地区按无声调拼音排序,英文国家或地区按英文字母排序。
- 同一国家或地区的不同别名会合并为同一组,例如
US、USA和United States。 - 同组节点按首个数字编号自然排序,例如
2排在10前。 - 默认自动添加国家或地区旗帜,可在插件配置中关闭。
- 已有旗帜不会重复添加,通知节点和无法识别地区的节点不会被改名。
- 使用稳定排序:排序键相同时保留节点原有相对顺序。
输入:
US 10|L10
通知:如果无法使用请先更新订阅
台湾 5|SN|L3
套餐到期:2029-07-15
Japan 2|L2
剩余流量:599.44 GB
US 2|L2
台湾 4|Kbro|L3
距离下次重置剩余:4 天
Japan 1|L1
默认配置下输出:
剩余流量:599.44 GB
距离下次重置剩余:4 天
套餐到期:2029-07-15
通知:如果无法使用请先更新订阅
🇹🇼 台湾 4|Kbro|L3
🇹🇼 台湾 5|SN|L3
🇯🇵 Japan 1|L1
🇯🇵 Japan 2|L2
🇺🇸 US 2|L2
🇺🇸 US 10|L10
- Xboard
>= 1.0.0 - PHP
>= 8.2 - PHP
mbstring扩展 - Xboard 版本需要提供
protocol.servers.filtered过滤钩子
- 从 GitHub Releases 下载最新的
node_sorter_v*.zip。 - 进入 Xboard 管理后台的插件页面并上传 ZIP。
- 找到
Subscription Node Sorter,点击安装。 - 启用插件。
- 重新更新客户端订阅,检查节点顺序和名称。
ZIP 可以包含顶层 NodeSorter/ 目录,也可以直接包含 config.json 与 Plugin.php。不要额外嵌套两个同名目录。
将仓库克隆到 Xboard 的 plugins/NodeSorter:
cd /path/to/Xboard/plugins
git clone git@github.com:xiaoyaohanyue/xb-node-sorter.git NodeSorter然后在 Xboard 管理后台安装并启用 node_sorter。
上传版本号更高的新 ZIP。Xboard 会根据 config.json 中的 code: node_sorter 和版本号执行插件升级。升级完成后确认插件仍处于启用状态,并让客户端重新更新订阅。
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 自动添加国家地区旗帜 | 开启 | 为可识别国家或地区的真实节点添加旗帜 Emoji。通知、已有旗帜和未知地区不处理。 |
| 附加通知关键词 | 空 | 使用逗号、中文逗号、竖线或换行分隔。名称包含任一关键词的节点会归入通知层级。 |
内置通知识别包含:通知、公告、提示、客户端、订阅、官网、网站、流量、套餐、到期、重置、剩余、更新、推荐、维护、客服、群组、群聊、频道等常见文案。
插件支持常见中文名称、英文全称、两位/三位地区代码及部分常用别名。例如:
- 中文:香港、台湾、日本、韩国、美国、英国、新加坡、澳大利亚等。
- 英文:Hong Kong、Taiwan、Japan、South Korea、United States、United Kingdom 等。
- 别名或代码:HK、HKBN、TW、JP、KR、US、USA、UK、SG、AU 等。
中文别名会归一到同一地区。例如 澳洲 归入 澳大利亚,马来 归入 马来西亚。无法识别的名称仍会保留,不会删除节点。
插件注册 Xboard 的 protocol.servers.filtered 过滤器,并使用较晚的优先级执行。该钩子位于协议兼容性过滤以及 Xboard 订阅信息节点插入之后,因此能够对最终下发列表统一排序。
处理顺序如下:
- 去除用于识别的协议显示前缀,但保留节点原名。
- 区分固定订阅信息、其他通知和真实节点。
- 识别真实节点的国家或地区并生成排序键。
- 进行稳定排序。
- 在启用配置时,为真实节点添加旗帜。
安装开发依赖:
composer install运行测试:
composer test仅检查 PHP 语法:
composer lint测试覆盖通知层级、中文拼音排序、英文别名归组、自然数字排序、自定义通知关键词,以及旗帜添加和防重复行为。
在仓库父目录执行:
zip -r node_sorter_v1.1.0.zip NodeSorter \
-x 'NodeSorter/.git/*' 'NodeSorter/vendor/*'发布新版本时,需要先同步更新 config.json 中的版本号和打包文件名。
- 插件没有出现在后台:确认目录是
plugins/NodeSorter,并且目录内直接存在config.json和Plugin.php。 - 安装后没有排序:确认插件已启用,并让客户端强制刷新订阅;旧的客户端缓存不会被插件主动清除。
- 自定义公告被当作真实节点:将公告名称中的稳定关键词加入“附加通知关键词”。
- 国旗没有显示:确认“自动添加国家地区旗帜”已开启,并检查节点名称中是否包含支持的地区名称或别名。
- 国旗显示为两个字母:这是客户端或系统字体对地区旗帜 Emoji 的显示差异,不影响节点连接。