!!! warning - 如果创建了多个 Script 配置,按照启用顺序先后,链式执行。 - 配置修改后需要重新启用,生效时卡片有颜色标识(右键配置 禁用 再 启用 ,也可以点击右上角的 🔥 按钮)。
::: tip 🎉 节点推荐
- 🚀 Cyberguard: 解锁Netflix/Hbo/Disney+/Dazn等流媒体,18.00元/月↗
- 🚀 扬帆云:老牌机场分站,年付低至¥11.00/月↗
- 🚀 优信云:IEPL/IPLC 高速专线,¥15.00/月↗
- 🚀 尔湾云:最大峰值1000Mbps,全流媒体及ChatGPT解锁!最低12元/月↗
- 🚀 TNTCloud:新开机场,季付30,每月低至¥10.00/月↗
- 🚀 魔戒:不限时,不限制使用人数,直至套餐流量用完,低至¥14.9/130G流量↗
- 🚀 宝可梦星云:新用户首单:9折优惠码:9999,低至5.9/月 ↗
- 🚀 NanoCloud: 绑定TG机器人每天领取免费流量,月付最低1元/月↗
- 🚀 肥猫云:全专线中转隧道,高速大宽带不限设备数,低至6元/月(年付)↗
- 🚀 疾风云:包年 6.9折 优惠码: jf2025↗
- 🚀 闪狐云:不限速,不限设备。高速专线。20元/月↗ :::
::: warning 💬 交流群
- 🫂 Telegram:@jichang360↗
:::
脚本说明
- 脚本语言为
javascript, 使用boa_engine作为执行器。 - 程序的入口为
main函数,接受一个config参数(参数名不限制),并返回修改后的该参数。 config为object类型,属性值为yaml配置文件内容转JSON后对应的object对象。
!!! danger “Changelog” v1.7.3 版本新增 string 类型参数 profileName (参数名不限制),属性值为当前处理的配置文件名。
function main(config, profileName) { return config;}支持的 API
作用域支持以下 API,不支持网络 IO、文件 IO 操作。
| API 类型 | API 范围 |
|---|---|
| 常量 | Infinity、NaN、undefined |
| 基本函数和对象 | Function、Object、Math、JSON、Array、Proxy |
| 数据类型和数组 | ArrayBuffer、SharedArrayBuffer、BigInt、Boolean、Date、DataView、Map、TypedArray、Int8Array、Uint8Array、Uint8ClampedArray、Int16Array、Uint16Array、Int32Array、Uint32Array、BigInt64Array、BigUint64Array、Float32Array、Float64Array |
| 字符串、正则表达式和符号 | String、RegExp、Symbol |
| 错误对象 | Error、RangeError、ReferenceError、TypeError、SyntaxError、EvalError、URIError、AggregateError |
| 反射和异步 | Reflect、Promise |
| 编码和解码 | encodeURI、encodeURIComponent、decodeURI、decodeURIComponent |
| 弱引用 | WeakRef、WeakMap、WeakSet |
| 原子操作 | Atomics |
| 控制台输出 | console |
脚本示例
1. 自定义规则(集)
如下是一个套用规则集的 Script 脚本示例(可点击复制按钮)。
!!! info - 你可以在脚本中的 // 自定义规则 注释部分的下面,添加自定义的规则。 - 规则配置请参考 规则配置文档↗(不懂该用哪个规则必看!!!)。
// 国内DNS服务器const domesticNameservers = [ "https://dns.alidns.com/dns-query", // 阿里云公共DNS "https://doh.pub/dns-query", // 腾讯DNSPod "https://doh.360.cn/dns-query" // 360安全DNS];// 国外DNS服务器const foreignNameservers = [ "https://1.1.1.1/dns-query", // Cloudflare(主) "https://1.0.0.1/dns-query", // Cloudflare(备) "https://208.67.222.222/dns-query", // OpenDNS(主) "https://208.67.220.220/dns-query", // OpenDNS(备) "https://194.242.2.2/dns-query", // Mullvad(主) "https://194.242.2.3/dns-query" // Mullvad(备)];// DNS配置const dnsConfig = { "enable": true, "listen": "0.0.0.0:1053", "ipv6": true, "use-system-hosts": false, "cache-algorithm": "arc", "enhanced-mode": "fake-ip", "fake-ip-range": "198.18.0.1/16", "fake-ip-filter": [ // 本地主机/设备 "+.lan", "+.local", // Windows网络出现小地球图标 "+.msftconnecttest.com", "+.msftncsi.com", // QQ快速登录检测失败 "localhost.ptlogin2.qq.com", "localhost.sec.qq.com", // 微信快速登录检测失败 "localhost.work.weixin.qq.com" ], "default-nameserver": ["223.5.5.5", "119.29.29.29", "1.1.1.1", "8.8.8.8"], "nameserver": [...domesticNameservers, ...foreignNameservers], "proxy-server-nameserver": [...domesticNameservers, ...foreignNameservers], "nameserver-policy": { "geosite:private,cn,geolocation-cn": domesticNameservers, "geosite:google,youtube,telegram,gfw,geolocation-!cn": foreignNameservers }};// 规则集通用配置const ruleProviderCommon = { "type": "http", "format": "yaml", "interval": 86400};// 规则集配置const ruleProviders = { "reject": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt", "path": "./ruleset/loyalsoldier/reject.yaml" }, "icloud": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt", "path": "./ruleset/loyalsoldier/icloud.yaml" }, "apple": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt", "path": "./ruleset/loyalsoldier/apple.yaml" }, "google": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt", "path": "./ruleset/loyalsoldier/google.yaml" }, "proxy": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt", "path": "./ruleset/loyalsoldier/proxy.yaml" }, "direct": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt", "path": "./ruleset/loyalsoldier/direct.yaml" }, "private": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt", "path": "./ruleset/loyalsoldier/private.yaml" }, "gfw": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt", "path": "./ruleset/loyalsoldier/gfw.yaml" }, "tld-not-cn": { ...ruleProviderCommon, "behavior": "domain", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt", "path": "./ruleset/loyalsoldier/tld-not-cn.yaml" }, "telegramcidr": { ...ruleProviderCommon, "behavior": "ipcidr", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt", "path": "./ruleset/loyalsoldier/telegramcidr.yaml" }, "cncidr": { ...ruleProviderCommon, "behavior": "ipcidr", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt", "path": "./ruleset/loyalsoldier/cncidr.yaml" }, "lancidr": { ...ruleProviderCommon, "behavior": "ipcidr", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt", "path": "./ruleset/loyalsoldier/lancidr.yaml" }, "applications": { ...ruleProviderCommon, "behavior": "classical", "url": "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt", "path": "./ruleset/loyalsoldier/applications.yaml" }, "openai": { ...ruleProviderCommon, "behavior": "classical", "url": "https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/OpenAI/OpenAI.yaml", "path": "./ruleset/blackmatrix7/openai.yaml" }};// 规则const rules = [ // 自定义规则 "DOMAIN-SUFFIX,googleapis.cn,节点选择", // Google服务 "DOMAIN-SUFFIX,gstatic.com,节点选择", // Google静态资源 "DOMAIN-SUFFIX,xn--ngstr-lra8j.com,节点选择", // Google Play下载服务 "DOMAIN-SUFFIX,github.io,节点选择", // Github Pages "DOMAIN,v2rayse.com,节点选择", // V2rayse节点工具 // blackmatrix7 规则集 "RULE-SET,openai,ChatGPT", // Loyalsoldier 规则集 "RULE-SET,applications,全局直连", "RULE-SET,private,全局直连", "RULE-SET,reject,广告过滤", "RULE-SET,icloud,微软服务", "RULE-SET,apple,苹果服务", "RULE-SET,google,谷歌服务", "RULE-SET,proxy,节点选择", "RULE-SET,gfw,节点选择", "RULE-SET,tld-not-cn,节点选择", "RULE-SET,direct,全局直连", "RULE-SET,lancidr,全局直连,no-resolve", "RULE-SET,cncidr,全局直连,no-resolve", "RULE-SET,telegramcidr,电报消息,no-resolve", // 其他规则 "GEOIP,LAN,全局直连,no-resolve", "GEOIP,CN,全局直连,no-resolve", "MATCH,漏网之鱼"];// 代理组通用配置const groupBaseOption = { "interval": 300, "timeout": 3000, "url": "https://www.google.com/generate_204", "lazy": true, "max-failed-times": 3, "hidden": false};
// 程序入口function main(config) { 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("配置文件中未找到任何代理"); }
// 覆盖原配置中DNS配置 config["dns"] = dnsConfig;
// 覆盖原配置中的代理组 config["proxy-groups"] = [ { ...groupBaseOption, "name": "节点选择", "type": "select", "proxies": ["延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/adjust.svg" }, { ...groupBaseOption, "name": "延迟选优", "type": "url-test", "tolerance": 100, "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/speed.svg" }, { ...groupBaseOption, "name": "故障转移", "type": "fallback", "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/ambulance.svg" }, { ...groupBaseOption, "name": "负载均衡(散列)", "type": "load-balance", "strategy": "consistent-hashing", "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/merry_go.svg" }, { ...groupBaseOption, "name": "负载均衡(轮询)", "type": "load-balance", "strategy": "round-robin", "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/balance.svg" }, { ...groupBaseOption, "name": "谷歌服务", "type": "select", "proxies": ["节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)", "全局直连"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/google.svg" }, { ...groupBaseOption, "name": "国外媒体", "type": "select", "proxies": ["节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)", "全局直连"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/youtube.svg" }, { ...groupBaseOption, "name": "电报消息", "type": "select", "proxies": ["节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)", "全局直连"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/telegram.svg" }, { ...groupBaseOption, "url": "https://chatgpt.com", "expected-status": "200", "name": "ChatGPT", "type": "select", "include-all": true, "filter": "AD|🇦🇩|AE|🇦🇪|AF|🇦🇫|AG|🇦🇬|AL|🇦🇱|AM|🇦🇲|AO|🇦🇴|AR|🇦🇷|AT|🇦🇹|AU|🇦🇺|AZ|🇦🇿|BA|🇧🇦|BB|🇧🇧|BD|🇧🇩|BE|🇧🇪|BF|🇧🇫|BG|🇧🇬|BH|🇧🇭|BI|🇧🇮|BJ|🇧🇯|BN|🇧🇳|BO|🇧🇴|BR|🇧🇷|BS|🇧🇸|BT|🇧🇹|BW|🇧🇼|BZ|🇧🇿|CA|🇨🇦|CD|🇨🇩|CF|🇨🇫|CG|🇨🇬|CH|🇨🇭|CI|🇨🇮|CL|🇨🇱|CM|🇨🇲|CO|🇨🇴|CR|🇨🇷|CV|🇨🇻|CY|🇨🇾|CZ|🇨🇿|DE|🇩🇪|DJ|🇩🇯|DK|🇩🇰|DM|🇩🇲|DO|🇩🇴|DZ|🇩🇿|EC|🇪🇨|EE|🇪🇪|EG|🇪🇬|ER|🇪🇷|ES|🇪🇸|ET|🇪🇹|FI|🇫🇮|FJ|🇫🇯|FM|🇫🇲|FR|🇫🇷|GA|🇬🇦|GB|🇬🇧|GD|🇬🇩|GE|🇬🇪|GH|🇬🇭|GM|🇬🇲|GN|🇬🇳|GQ|🇬🇶|GR|🇬🇷|GT|🇬🇹|GW|🇬🇼|GY|🇬🇾|HN|🇭🇳|HR|🇭🇷|HT|🇭🇹|HU|🇭🇺|ID|🇮🇩|IE|🇮🇪|IL|🇮🇱|IN|🇮🇳|IQ|🇮🇶|IS|🇮🇸|IT|🇮🇹|JM|🇯🇲|JO|🇯🇴|JP|🇯🇵|KE|🇰🇪|KG|🇰🇬|KH|🇰🇭|KI|🇰🇮|KM|🇰🇲|KN|🇰🇳|KR|🇰🇷|KW|🇰🇼|KZ|🇰🇿|LA|🇱🇦|LB|🇱🇧|LC|🇱🇨|LI|🇱🇮|LK|🇱🇰|LR|🇱🇷|LS|🇱🇸|LT|🇱🇹|LU|🇱🇺|LV|🇱🇻|LY|🇱🇾|MA|🇲🇦|MC|🇲🇨|MD|🇲🇩|ME|🇲🇪|MG|🇲🇬|MH|🇲🇭|MK|🇲🇰|ML|🇲🇱|MM|🇲🇲|MN|🇲🇳|MR|🇲🇷|MT|🇲🇹|MU|🇲🇺|MV|🇲🇻|MW|🇲🇼|MX|🇲🇽|MY|🇲🇾|MZ|🇲🇿|NA|🇳🇦|NE|🇳🇪|NG|🇳🇬|NI|🇳🇮|NL|🇳🇱|NO|🇳🇴|NP|🇳🇵|NR|🇳🇷|NZ|🇳🇿|OM|🇴🇲|PA|🇵🇦|PE|🇵🇪|PG|🇵🇬|PH|🇵🇭|PK|🇵🇰|PL|🇵🇱|PS|🇵🇸|PT|🇵🇹|PW|🇵🇼|PY|🇵🇾|QA|🇶🇦|RO|🇷🇴|RS|🇷🇸|RW|🇷🇼|SA|🇸🇦|SB|🇸🇧|SC|🇸🇨|SD|🇸🇩|SE|🇸🇪|SG|🇸🇬|SI|🇸🇮|SK|🇸🇰|SL|🇸🇱|SM|🇸🇲|SN|🇸🇳|SO|🇸🇴|SR|🇸🇷|SS|🇸🇸|ST|🇸🇹|SV|🇸🇻|SZ|🇸🇿|TD|🇹🇩|TG|🇹🇬|TH|🇹🇭|TJ|🇹🇯|TL|🇹🇱|TM|🇹🇲|TN|🇹🇳|TO|🇹🇴|TR|🇹🇷|TT|🇹🇹|TV|🇹🇻|TW|🇹🇼|TZ|🇹🇿|UA|🇺🇦|UG|🇺🇬|US|🇺🇸|UY|🇺🇾|UZ|🇺🇿|VA|🇻🇦|VC|🇻🇨|VN|🇻🇳|VU|🇻🇺|WS|🇼🇸|YE|🇾🇪|ZA|🇿🇦|ZM|🇿🇲|ZW|🇿🇼", "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/chatgpt.svg" }, { ...groupBaseOption, "name": "微软服务", "type": "select", "proxies": ["全局直连", "节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/microsoft.svg" }, { ...groupBaseOption, "name": "苹果服务", "type": "select", "proxies": ["节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)", "全局直连"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/apple.svg" }, { ...groupBaseOption, "name": "广告过滤", "type": "select", "proxies": ["REJECT", "DIRECT"], "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/bug.svg" }, { ...groupBaseOption, "name": "全局直连", "type": "select", "proxies": ["DIRECT", "节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/link.svg" }, { ...groupBaseOption, "name": "全局拦截", "type": "select", "proxies": ["REJECT", "DIRECT"], "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/block.svg" }, { ...groupBaseOption, "name": "漏网之鱼", "type": "select", "proxies": ["节点选择", "延迟选优", "故障转移", "负载均衡(散列)", "负载均衡(轮询)", "全局直连"], "include-all": true, "icon": "https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/fish.svg" } ];
// 覆盖原配置中的规则 config["rule-providers"] = ruleProviders; config["rules"] = rules;
// 返回修改后的配置 return config;}2. 剔除高倍率节点
如下是一个按倍率过滤代理组节点的 Script 脚本示例(可点击复制按钮)。
!!! info - 通过配置每个代理组的最大倍率,将超过最大倍率的节点从代理组中剔除。 - 本脚本的剔除无法作用于通过 include-all、include-all-proxies、include-all-providers 引入的节点。
// 代理组最大倍率const multipliers = { "低倍率分组名称(自行修改)": 1.0, "中倍率分组名称(自行增删)": 2.5 };// 剔除代理节点名称中不含倍率信息的节点const multipliersOnly = false;// 正则表达式const regex = /(\d+(\.\d*)?) *?([xX✕✖⨉]|倍率?)/m;
function main(config) { const removed = []; // 过滤后不含任何节点将被移除的group config["proxy-groups"] = (config["proxy-groups"] ?? []) .map(group => { if (multipliers[group?.name]) { group["proxies"] = (group["proxies"] ?? []).filter(proxy => { const multiplier = regex.exec(proxy)?.[1]; return multipliersOnly ? multiplier !== undefined && Number(multiplier) <= multipliers[group.name] : multiplier === undefined || Number(multiplier) <= multipliers[group.name]; }); if (group["proxies"]?.length > 0) { return group; } removed.push(group.name); } else { return group; } }) .filter(Boolean); if (removed.length > 0) { // 移除代理组的引用 config["proxy-groups"].forEach(group => {group["proxies"] = group["proxies"].filter(proxy => !removed.includes(proxy));}); // 移除规则的引用 config["rules"] = (config["rules"] ?? []).filter(rule => rule && removed.every(name => !rule.endsWith(name) && !rule.endsWith(`${name},no-resolve`))); } return config;}3. 使用扩展脚本实现prependrules
参考Issue1437-comment-2395050752↗
::: tip 🎉 节点推荐
- 🚀 Cyberguard: 解锁Netflix/Hbo/Disney+/Dazn等流媒体,18.00元/月↗
- 🚀 优信云:IEPL/IPLC 高速专线,¥15.00/月↗
- 🚀 尔湾云:最大峰值1000Mbps,全流媒体及ChatGPT解锁!最低12元/月↗
- 🚀 TNTCloud:新开机场,季付30,每月低至¥10.00/月↗
- 🚀 魔戒:不限时,不限制使用人数,直至套餐流量用完,低至¥14.9/130G流量↗
- 🚀 宝可梦星云:新用户首单:9折优惠码:9999,低至5.9/月 ↗
- 🚀 NanoCloud: 绑定TG机器人每天领取免费流量,月付最低1元/月↗
- 🚀 肥猫云:全专线中转隧道,高速大宽带不限设备数,低至6元/月(年付)↗
- 🚀 疾风云:包年 6.9折 优惠码: jf2025↗
- 🚀 闪狐云:不限速,不限设备。高速专线。20元/月↗ :::
::: warning 💬 交流群
- 🫂 Telegram:@jichang360↗
:::
Thanks for reading!