-
-
Save log2c/6d2aab87dfe560fbcec3fd3b8c7830bd to your computer and use it in GitHub Desktop.
module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => { | |
const remove_names = new Set(); | |
const allowList = [80, 8080, 443, 27833, 22]; // 待保留端口的节点 | |
const fallbackProxy = ["DIRECT", "REJECT"]; // proxies为空时自动追加__"自动选择" | |
if (Array.isArray(content.proxies)) { | |
content.proxies = content.proxies | |
.filter((proxy => { | |
if (allowList.indexOf(proxy.port) === -1) { | |
remove_names.add(proxy.name); | |
return false; | |
} else { | |
return true; | |
} | |
})); | |
} | |
const groups = content['proxy-groups'] || []; | |
if (Array.isArray(groups)) { | |
groups.forEach((group) => { | |
const proxies = group.proxies | |
.filter((proxy) => !remove_names.has(proxy)); | |
group.proxies = proxies; | |
// update 2022/4/8 | |
if ((group.proxies || []).length === 0) { | |
group.proxies = [...fallbackProxy]; | |
} | |
}); | |
} | |
return content | |
} |
昨晚找到了大神写的脚本用来筛选订阅的节点很好用,后来发现在ClashForWindows中之前几个订阅使用这段mixin脚本正确的筛选掉了节点,但后来发现有部分订阅一开启mixin就报错,提示could not switch to this profile! proxy group[2]: 'use' or 'proxies' missing,不同的订阅报错的group不一样,有的是group[2],有的是group[4],也有group[5]的,所有报错和没报错的配置用的都是同一套ACL4SSR_Online_Full_Netflix模板,所以分组也是一模一样,想贴配置文件上来发现字数不够就发个链接吧: https://subcon.dlj.tf/sub?target=clash&url=https%3A%2F%2Fraw.githubusercontent.com%2FAlvin9999%2Fpac2%2Fmaster%2Fclashfile%2F1&insert=true&fdn=true&config=https%3A%2F%2Fraw.githubusercontent.com%2FACL4SSR%2FACL4SSR%2Fmaster%2FClash%2Fconfig%2FACL4SSR_Online_Full_Netflix.ini 刚才突发奇想是不是过滤规则的问题又尝试了一下,结果发现用ACL4SSR_Online_Full系列的都不行,改成ACL4SSR_Online.ini突然就好了…… 请教有没有办法在使用ACL4SSR_Online_Full_Netflix.ini的情况下js脚本还是可以正常运行呢?
按理解来看,你应该确定 - 🇨🇳 台湾节点 之类的分组没有引用到你过滤掉的节点,如果有就要另外写判断了
好像的确是因为过滤了443端口,导致过滤后的规则中如果有按地区分类的节点组(比如香港节点、台湾节点、狮城节点之类的)是空白,又被其他分组引用时(比如group[2]->自动选择),clash发现引用组的服务器是空白,所以报错了,而且因为clash for windows看不到内存中mixin后的配置文件,所以之前的报错也是要研究很久才能找到问题的。。。请教一下能否改进脚本避免出现报错的问题呢?
btw,查了一下函数indexOf,说是顺序检索,如果我仅填了443端口,类似4438和8443这样端口的节点是不是过滤之后还是会被保留在列表中呢?
好像的确是因为过滤了443端口,导致过滤后的规则中如果有按地区分类的节点组(比如香港节点、台湾节点、狮城节点之类的)是空白,又被其他分组引用时(比如group[2]->自动选择),clash发现引用组的服务器是空白,所以报错了,而且因为clash for windows看不到内存中mixin后的配置文件,所以之前的报错也是要研究很久才能找到问题的。。。请教一下能否改进脚本避免出现报错的问题呢? btw,查了一下函数indexOf,说是顺序检索,如果我仅填了443端口,类似4438和8443这样端口的节点是不是过滤之后还是会被保留在列表中呢?
更新了试试
好像的确是因为过滤了443端口,导致过滤后的规则中如果有按地区分类的节点组(比如香港节点、台湾节点、狮城节点之类的)是空白,又被其他分组引用时(比如group[2]->自动选择),clash发现引用组的服务器是空白,所以报错了,而且因为clash for windows看不到内存中mixin后的配置文件,所以之前的报错也是要研究很久才能找到问题的。。。请教一下能否改进脚本避免出现报错的问题呢? btw,查了一下函数indexOf,说是顺序检索,如果我仅填了443端口,类似4438和8443这样端口的节点是不是过滤之后还是会被保留在列表中呢?
更新了试试
感谢大神!试过了果然有效,不再报错了。想有没有办法可以直接删除没有节点的地区分组吗?比如韩国节点筛选完没有443端口的,这一组直接去掉?暂时我修改了一下仅保留DIRECT在正常使用,只不过有点强迫症感觉挂在那里占空间。。。
有了ChatGPT之后代码水平一日千里,分享一下从ChatGPT那里学来的代码:
const portList = [22,80,443,1080,8080,]; // 设置端口号匹配规则
const fallbackProxy = ['DIRECT','REJECT',]; // 分组无匹配结果的默认设置
content.proxies = content.proxies?.filter(proxy => portList.includes(proxy.port));
content['proxy-groups']?.forEach(group => {
group.proxies = group.proxies.filter( proxy =>
['DIRECT', 'REJECT', ...content.proxies?.map(proxy => proxy.name), ...content['proxy-groups'].map(group => group.name)].includes(proxy));
group.proxies = group.proxies.length ? group.proxies : fallbackProxy;
});
昨晚找到了大神写的脚本用来筛选订阅的节点很好用,后来发现在ClashForWindows中之前几个订阅使用这段mixin脚本正确的筛选掉了节点,但后来发现有部分订阅一开启mixin就报错,提示could not switch to this profile! proxy group[2]: 'use' or 'proxies' missing,不同的订阅报错的group不一样,有的是group[2],有的是group[4],也有group[5]的,所有报错和没报错的配置用的都是同一套ACL4SSR_Online_Full_Netflix模板,所以分组也是一模一样,想贴配置文件上来发现字数不够就发个链接吧:
https://subcon.dlj.tf/sub?target=clash&url=https%3A%2F%2Fraw.githubusercontent.com%2FAlvin9999%2Fpac2%2Fmaster%2Fclashfile%2F1&insert=true&fdn=true&config=https%3A%2F%2Fraw.githubusercontent.com%2FACL4SSR%2FACL4SSR%2Fmaster%2FClash%2Fconfig%2FACL4SSR_Online_Full_Netflix.ini
刚才突发奇想是不是过滤规则的问题又尝试了一下,结果发现用ACL4SSR_Online_Full系列的都不行,改成ACL4SSR_Online.ini突然就好了……
请教有没有办法在使用ACL4SSR_Online_Full_Netflix.ini的情况下js脚本还是可以正常运行呢?