diff --git a/Scripts/resource-parser.js b/Scripts/resource-parser.js index 9e881e5..87bc821 100644 --- a/Scripts/resource-parser.js +++ b/Scripts/resource-parser.js @@ -1,10 +1,22 @@ +/** + +#Quantumult X 节点资源解析器 + +本资源解析器作者: Shawn (@XIAO_KOP) , 有问题请反馈:@Shawn_KOP_bot + +#tag 2020-04-25: 11:50 + +功能:将不同格式订阅转换成 Quantumult X,并支持简单的节点过滤/emoji添加删除,udp/tfo 的开启. +- 目前支持 V2RayN/SSR/Trojan/Quanx 格式写法的节点引用; + +1⃣️ 过滤参数为 in,out, 分别为保留与排除,多个参数间用+号连接, 可直接使用中文(如 in=香港+台湾) +2⃣️ emoji 参数为 emoji=1,2 或-1,为添加或删除节点名中的emoji旗帜(国行设备请用 emoji=2) +3⃣️ udp=1,tfo=1 参数开启 udp-relay 及fast-open + + */ + /** - * 2020-04-24:14:42 #tag - * 本资源解析器作者: Shawn (@XIAO_KOP) , 有问题请反馈:@Shawn_KOP_bot - * 功能: 将不同格式订阅转换成 Quantumult X,并支持简单的过滤. - * 目前支持 V2RayN/SSR/Trojan/Quanx 格式写法的节点引用; - * 过滤参数为 in,out, 分别为保留与排除,多个参数间用+号连接, 可直接使用中文(如 in=香港+台湾) - * 示范, + * 使用, 0⃣️ 在quantumult X 配置文件中[general] 部分,加入 resource_parser_url=https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js 1⃣️ 原始订阅连接为: https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt , 2⃣️ 想要保留的参数为 in=tls+ss, 想要过滤的参数为 out=http+2, 请注意下面订阅链接后一定要加 ”#“ 符号 @@ -15,36 +27,44 @@ var content0=$resource.content; var para=decodeURIComponent($resource.link); var type0=Type_Check(content0); +var Pin0=para.indexOf("in=")!=-1? para.split("#")[1].split("in=")[1].split("&")[0].split("+"):null; +var Pout0=para.indexOf("out=")!=-1? para.split("#")[1].split("out=")[1].split("&")[0].split("+"):null; +var Pemoji=para.indexOf("emoji=")!=-1? para.split("#")[1].split("emoji=")[1].split("&")[0].split("+"):null; +var Pudp0=para.indexOf("udp=")!=-1? para.split("#")[1].split("udp=")[1].split("&")[0].split("+"):0; +var Ptfo0=para.indexOf("tfo=")!=-1? para.split("#")[1].split("tfo=")[1].split("&")[0].split("+"):0; + +qx=["trojan=13.235.70.75:8443, password=8cacb13816.wns.windows.com, over-tls=true, tls-verification=false, tag=印度 AWS", +"trojan=47.105.52.185:458, password=8cacb13816.wns.windows.com, over-tls=true, tls-verification=false, tag=😀上海 BGP"] if(type0=="Vmess"){ - total=V2QX(content0); + total=V2QX(content0,Pudp0,Ptfo0); flag=1; }else if(type0=="QuanX"){ total=content0.split("\n"); flag=1; }else if(type0=="SSR"){ - total=SSR2QX(content0); + total=SSR2QX(content0,Pudp0,Ptfo0); flag=1; }else if(type0=="Trojan"){ - total=TJ2QX(content0); + total=TJ2QX(content0,Pudp0,Ptfo0); flag=1; }else{ - $notify("👻该解析器暂未支持您的订阅格式"); + $notify("👻该解析器暂未支持您的订阅格式","😭太难写了", "stay tuned"); flag=0; $done({content : content0}); } if(flag==1){ - $notify("🤖 您订阅类型为:"+type0,"☠️ 您的订阅连接为: 其中#后面的为自定义传入参数","👉"+ para); - var Pin0=para.indexOf("in=")!=-1? para.split("#")[1].split("in=")[1].split("&")[0].split("+"):null; - var Pout0=para.indexOf("out=")!=-1? para.split("#")[1].split("out=")[1].split("&")[0].split("+"):null; if(Pin0||Pout0){ - $notify("👥 开始转换并过滤节点","🐶 具体参数如下","👍️ 保留的关键字:"+Pin0+"\n👎️ 排除的关键字:"+Pout0); + $notify("👥 开始转换节点,类型:"+type0,"🐶 您已添加节点筛选参数,如下","👍️ 保留的关键字:"+Pin0+"\n👎️ 排除的关键字:"+Pout0); total=filter(total,Pin0,Pout0) - } else { - $notify("🐷 未开启过滤节点","🐼️ 如需过滤节点请使用in/out参数,具体操作参考此示范:","👉 https://t.me/QuanXNews/110"); + } else { + $notify("🐷 开始转换节点,类型:"+type0,"🐼️ 如需筛选节点请使用in/out及其他参数,可参考此示范:","👉 https://t.me/QuanXNews/110"); + } + if(Pemoji){ + $notify("🏳️‍🌈 开始更改旗帜 emoji","清除emoji请用参数 -1, 国行设备添加emoji请使用参数 2","你当前所用的参数为 emoji="+Pemoji); + total=emoji_handle(total,Pemoji); } - //console.log(total) $done({content : total.join("\n")}); } @@ -65,12 +85,12 @@ function Type_Check(subs){ } //V2RayN 订阅转换成 QUANX 格式 -function V2QX(subs){ +function V2QX(subs,Pudp,Ptfo){ const $base64 = new Base64() var list0=$base64.decode(subs).split("\n"); var QXList=[] - for(i in list0){ -if(list0[i].trim()!=""){ + for(var i=0;i name.indexOf(item) != -1; @@ -143,11 +163,11 @@ function Pobfs(jsonl){ } //SSR 转换 quanx 格式 -function SSR2QX(subs){ +function SSR2QX(subs,Pudp,Ptfo){ const $base64 = new Base64() var list0=$base64.decode(subs).split("\n"); var QXList=[]; - for(i in list0){ + for(var i=0;i