Clash Verge Rev 使用 Script 自定义代理组
anlondon Lv6

Clash Verge Rev 使用 Script 自定义代理组

image

前言

很多机场都会提供一个默认的 自动选择(url-test) 策略组。

但它通常会将所有节点(香港、日本、新加坡、美国等)一起参与测速。

对于有明确需求的用户来说,这并不理想。

例如:

  • 只希望使用日本节点
  • 只希望使用新加坡节点
  • 日本 + 澳大利亚自动选择
  • 排除香港节点
  • 自定义测速间隔

如果直接修改订阅文件,每次更新订阅都会被覆盖,因此并不可取。

最开始尝试过 编辑代理组(Merge) 的方式,但对于修改已有策略组的支持有限。最终发现 全局扩展脚本(Script) 才是最灵活、也是最推荐的方案。


为什么使用 Script?

Clash Verge Rev 在每次更新订阅后,会经历大致如下流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
机场订阅


下载配置


Script(JavaScript)


最终配置


Mihomo(Core)

Script 的作用就是:

在配置加载到内核之前,对整个配置对象进行修改。

因此:

  • 不需要修改机场订阅
  • 更新订阅不会丢失
  • 可以自由修改策略组、节点、DNS、规则等内容

它更像是一个配置后处理器(Post Processor)


Script 能做什么?

Script 可以访问整个配置对象。

例如:

1
2
3
4
5
6
function main(config, profileName) {

console.log(profileName);

return config;
}

其中:

  • config:整个 Clash 配置对象(所有代理组、规则、DNS 等)
  • profileName:当前订阅名称

例如:

红杏云

使用优惠码ABING888,可以减免一些费用

因此可以针对不同订阅执行不同逻辑。

1
2
3
4
5
6
7
8
9
10
11
机场A

不修改

机场B

执行脚本

机场C

执行另一套逻辑

示例:仅修改指定机场

image
例如:

1
2
3
4
5
6
7
8
function main(config, profileName) {

if (profileName !== "红杏云") {
return config;
}

return config;
}

这样脚本仅会作用于 红杏云 这一份订阅,不会影响其它机场。


示例:自动选择仅保留新加坡节点

机场默认:

1
2
3
4
5
6
7
8
9
10
11
自动选择

香港
香港
日本
日本
新加坡
新加坡
美国
台湾
...

修改后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function main(config, profileName) {

if (profileName !== "红杏云") {
return config;
}

const group = config["proxy-groups"]?.find(
g => g.name === "自动选择"
);

if (!group) {
return config;
}

group.proxies = group.proxies.filter(name =>
/(新加坡|Singapore|SG)/i.test(name)
);

group.interval = 300;
group.tolerance = 50;
group.lazy = true;

return config;
}

最终:

1
2
3
4
5
6
7
自动选择

新加坡01
新加坡02
🇸🇬 新加坡原生
🇸🇬 新加坡直连1
🇸🇬 新加坡直连2

测速也改成:

  • 300 秒
  • 容忍值 50ms
  • Lazy 模式

而无需修改机场订阅。


更多玩法

由于 Script 可以直接修改整个配置,因此可以实现很多自定义功能。

日本 + 新加坡自动选择

1
2
3
const re = /(日本|JP|Japan|新加坡|SG|Singapore)/i;

group.proxies = group.proxies.filter(name => re.test(name));

排除香港节点

1
2
3
group.proxies = group.proxies.filter(
name => !/(香港|HK|Hong Kong)/i.test(name)
);

修改测速间隔

1
2
3
group.interval = 300;
group.tolerance = 50;
group.lazy = true;

修改故障转移策略组

1
2
3
4
5
6
7
const fallback = config["proxy-groups"]?.find(
g => g.name === "故障转移"
);

if (fallback) {
fallback.proxies = fallback.proxies.filter(name => re.test(name));
}

为什么推荐 Script?

相比直接修改订阅文件:

  • 更新订阅不会丢失修改
  • 不依赖机场后台是否支持节点过滤
  • 不影响其它机场订阅
  • 可以编写任意 JavaScript 逻辑
  • 可维护性高,后续扩展方便

对于需要长期维护 Clash Verge Rev 配置的用户来说,Script 比直接修改 YAML 更灵活,也更适合作为个性化配置的统一入口。

 Comments