Clash Verge Rev 利用脚本实现本地地区分组

一般机场给的订阅链接只有简单分组,而在线节点订阅地址转换存在多个问题,包括节点被盗的风险、转换节点数量的限制、难以找到可靠的直链平台以及对后端平台稳定性的依赖。通过脚本在本地对节点进行分组不依赖外部平台,操作更灵活,确保数据的隐私和安全。

脚本说明

参考 Clash Verge Rev Docs Script 配置 更多分组

地区分组

function main(config, profileName) {
const proxyCount = config?.proxies?.length ?? 0;
const proxyProviderCount = typeof config?.["proxy-providers"] === "object" ? Object.keys(config["proxy-providers"]).length : 0;
if (proxyCount === 0 && proxyProviderCount === 0) {
throw new Error("配置文件中未找到任何代理");
}
// proxies
var regions = [];
if (proxyCount !== 0) {
const regex = /^([\u4e00-\u9fa5]+).*-.+$/;
// 遍历proxies进行分组
config.proxies.forEach((proxy, index) => {
// 加上UDP
proxy["udp"] = true;
const match = proxy.name.match(regex);
if (match) {
// console.log(`匹配的元素: ${proxy.name}`);
regions.push(match[1])
}
});
}
// proxy-providers
var regions2 = [];
if (proxyProviderCount!== 0) {
// 常用的几个分组
regions2 = ['香港', '美国', '日本', '新加坡', '英国', '台湾', '韩国']
}

// 代理组通用配置
const groupBaseOption = {
"interval": 300,
"timeout": 3000,
"url": "https://www.google.com/generate_204",
// "lazy": true,
// "max-failed-times": 3,
// "hidden": false
};

// 合并
const uniqueRegions = [...new Set([...regions, ...regions2])];
uniqueRegions.forEach((item, index) => {
config["proxy-groups"].push({
...groupBaseOption,
"name": `${flagMap[item]} ${item}节点`,
"type": "url-test",
"tolerance": 50,
"include-all": true,
"filter": `(?i)${item}`,
})
});

// 返回修改后的配置
return config;
}

地区节点对应图标

const flagMap = {
"阿富汗": "🇦🇫",
"阿尔巴尼亚": "🇦🇱",
"阿尔及利亚": "🇩🇿",
"安道尔": "🇦🇩",
"安哥拉": "🇦🇴",
"安提瓜和巴布达": "🇦🇬",
"阿根廷": "🇦🇷",
"亚美尼亚": "🇦🇲",
"澳大利亚": "🇦🇺",
"奥地利": "🇦🇹",
"阿塞拜疆": "🇦🇿",
"巴哈马": "🇧🇸",
"巴林": "🇧🇭",
"孟加拉": "🇧🇩",
"巴巴多斯": "🇧🇧",
"白俄罗斯": "🇧🇾",
"比利时": "🇧🇪",
"伯利兹": "🇧🇿",
"贝宁": "🇧🇯",
"不丹": "🇧🇹",
"玻利维亚": "🇧🇴",
"波斯尼亚和黑塞哥维那": "🇧🇦",
"博茨瓦纳": "🇧🇼",
"巴西": "🇧🇷",
"文莱": "🇧🇳",
"保加利亚": "🇧🇬",
"布基纳法索": "🇧🇫",
"布隆迪": "🇧🇮",
"佛得角": "🇨🇻",
"柬埔寨": "🇰🇭",
"喀麦隆": "🇨🇲",
"加拿大": "🇨🇦",
"中非共和国": "🇨🇫",
"乍得": "🇹🇩",
"智利": "🇨🇱",
"中国": "🇨🇳",
"哥伦比亚": "🇨🇴",
"科摩罗": "🇰🇲",
"刚果民主共和国": "🇨🇩",
"刚果共和国": "🇨🇬",
"哥斯达黎加": "🇨🇷",
"克罗地亚": "🇭🇷",
"古巴": "🇨🇺",
"塞浦路斯": "🇨🇾",
"捷克共和国": "🇨🇿",
"丹麦": "🇩🇰",
"吉布提": "🇩🇯",
"多米尼加": "🇩🇲",
"多米尼加共和国": "🇩🇴",
"东帝汶": "🇹🇱",
"厄瓜多尔": "🇪🇨",
"埃及": "🇪🇬",
"萨尔瓦多": "🇸🇻",
"赤道几内亚": "🇬🇶",
"厄立特里亚": "🇪🇷",
"爱沙尼亚": "🇪🇪",
"斯威士兰": "🇸🇿",
"埃塞俄比亚": "🇪🇹",
"斐济": "🇫🇯",
"芬兰": "🇫🇮",
"法国": "🇫🇷",
"加蓬": "🇬🇦",
"冈比亚": "🇬🇲",
"格鲁吉亚": "🇬🇪",
"德国": "🇩🇪",
"加纳": "🇬🇭",
"希腊": "🇬🇷",
"格林纳达": "🇬🇩",
"危地马拉": "🇬🇹",
"几内亚": "🇬🇳",
"几内亚比绍": "🇬🇼",
"圭亚那": "🇬🇾",
"海地": "🇭🇹",
"梵蒂冈": "🇻🇦",
"洪都拉斯": "🇭🇳",
"匈牙利": "🇭🇺",
"冰岛": "🇮🇸",
"印度": "🇮🇳",
"印度尼西亚": "🇮🇩",
"伊朗": "🇮🇷",
"伊拉克": "🇮🇶",
"爱尔兰": "🇮🇪",
"以色列": "🇮🇱",
"意大利": "🇮🇹",
"牙买加": "🇯🇲",
"日本": "🇯🇵",
"约旦": "🇯🇴",
"哈萨克斯坦": "🇰🇿",
"肯尼亚": "🇰🇪",
"基里巴斯": "🇰🇮",
"朝鲜": "🇰🇵",
"韩国": "🇰🇷",
"科威特": "🇰🇼",
"吉尔吉斯斯坦": "🇰🇬",
"老挝": "🇱🇦",
"拉脱维亚": "🇱🇻",
"黎巴嫩": "🇱🇧",
"莱索托": "🇱🇸",
"利比里亚": "🇱🇷",
"利比亚": "🇱🇾",
"列支敦士登": "🇱🇮",
"立陶宛": "🇱🇹",
"卢森堡": "🇱🇺",
"马达加斯加": "🇲🇬",
"马拉维": "🇲🇼",
"马来西亚": "🇲🇾",
"马尔代夫": "🇲🇻",
"马里": "🇲🇱",
"马耳他": "🇲🇹",
"马绍尔群岛": "🇲🇭",
"毛里塔尼亚": "🇲🇷",
"毛里求斯": "🇲🇺",
"墨西哥": "🇲🇽",
"密克罗尼西亚": "🇫🇲",
"摩尔多瓦": "🇲🇩",
"摩纳哥": "🇲🇨",
"蒙古": "🇲🇳",
"黑山": "🇲🇪",
"摩洛哥": "🇲🇦",
"莫桑比克": "🇲🇿",
"缅甸": "🇲🇲",
"纳米比亚": "🇳🇦",
"瑙鲁": "🇳🇷",
"尼泊尔": "🇳🇵",
"荷兰": "🇳🇱",
"新西兰": "🇳🇿",
"尼加拉瓜": "🇳🇮",
"尼日尔": "🇳🇪",
"尼日利亚": "🇳🇬",
"北马其顿": "🇲🇰",
"挪威": "🇳🇴",
"阿曼": "🇴🇲",
"巴基斯坦": "🇵🇰",
"帕劳": "🇵🇼",
"巴勒斯坦": "🇵🇸",
"巴拿马": "🇵🇦",
"巴布亚新几内亚": "🇵🇬",
"巴拉圭": "🇵🇾",
"秘鲁": "🇵🇪",
"菲律宾": "🇵🇭",
"波兰": "🇵🇱",
"葡萄牙": "🇵🇹",
"卡塔尔": "🇶🇦",
"罗马尼亚": "🇷🇴",
"俄罗斯": "🇷🇺",
"卢旺达": "🇷🇼",
"圣基茨和尼维斯": "🇰🇳",
"圣卢西亚": "🇱🇨",
"圣文森特和格林纳丁斯": "🇻🇨",
"萨摩亚": "🇼🇸",
"圣马力诺": "🇸🇲",
"圣多美和普林西比": "🇸🇹",
"沙特阿拉伯": "🇸🇦",
"塞内加尔": "🇸🇳",
"塞尔维亚": "🇷🇸",
"塞舌尔": "🇸🇨",
"塞拉利昂": "🇸🇱",
"新加坡": "🇸🇬",
"斯洛伐克": "🇸🇰",
"斯洛文尼亚": "🇸🇮",
"所罗门群岛": "🇸🇧",
"索马里": "🇸🇴",
"南非": "🇿🇦",
"南苏丹": "🇸🇸",
"西班牙": "🇪🇸",
"斯里兰卡": "🇱🇰",
"苏丹": "🇸🇩",
"苏里南": "🇸🇷",
"瑞典": "🇸🇪",
"瑞士": "🇨🇭",
"叙利亚": "🇸🇾",
"台湾": "🇹🇼",
"塔吉克斯坦": "🇹🇯",
"坦桑尼亚": "🇹🇿",
"泰国": "🇹🇭",
"东帝汶": "🇹🇱",
"多哥": "🇹🇬",
"汤加": "🇹🇴",
"特立尼达和多巴哥": "🇹🇹",
"突尼斯": "🇹🇳",
"土耳其": "🇹🇷",
"土库曼斯坦": "🇹🇲",
"图瓦卢": "🇹🇻",
"乌干达": "🇺🇬",
"乌克兰": "🇺🇦",
"阿联酋": "🇦🇪",
"英国": "🇬🇧",
"美国": "🇺🇸",
"乌拉圭": "🇺🇾",
"乌兹别克斯坦": "🇺🇿",
"瓦努阿图": "🇻🇺",
"梵蒂冈": "🇻🇦",
"委内瑞拉": "🇻🇪",
"越南": "🇻🇳",
"也门": "🇾🇪",
"赞比亚": "🇿🇲",
"津巴布韦": "🇿🇼",
"香港": "🇭🇰",
"澳门": "🇲🇴",
"台湾": "🇨🇳"
}