diff --git a/Scripts/resource-parser.js b/Scripts/resource-parser.js index 86d6f17..426cb26 100644 --- a/Scripts/resource-parser.js +++ b/Scripts/resource-parser.js @@ -1,5 +1,5 @@ /** -☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2020-07-07 17:39⟧ +☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2020-07-08 14:39⟧ ---------------------------------------------------------- 🚫 发现 𝐁𝐔𝐆 请反馈: @Shawn_KOP_bot ⛳️ 关注 🆃🅶 相关频道: https://t.me/QuanX_API @@ -9,7 +9,7 @@ A. 将各格式的服务器订阅解析成 𝐐𝐮𝐚𝐧𝐭𝐮𝐦𝐮𝐥𝐭 𝐗 格式引用 ✔︎ 支持 Vmess/SS(R/D)/Trojan/QuanX/Surge/HTTP(s) 订阅 ✔︎ 提供说明 1⃣️ 中的可选个性化参数(筛选、重命名 等) -B. rewrite(重写) /filter(分流) 的转换&筛选 +B. rewrite(重写) /filter(分流) 的 转换&筛选 ✔︎ 用于禁用远程引用中某(几)项 rewrite/hostname/filter ✔︎ Surge 类型规则 list(不含策略组)的解析与使用 ✔︎ Surge 模块/配置 URL-REGEX、302(7) 复写、Script 的解析 @@ -74,14 +74,32 @@ PS. 隐藏参数 ntf=0/1, 用于关闭/打开资源解析器的提示通知 var content0=$resource.content; var link0=$resource.link; //debug -//const $notify=console.log -//const $resource={} -//const $done=function(snt){return snt} +const $notify=console.log +const $resource={} +const $done=function(snt){return snt} //parameters var para=(link0.indexOf("http")!=-1 && link0.indexOf("://")!=-1)? link0:link0+content0.split("\n")[0]; +var para1=para.slice(para.indexOf("#")+1) //防止参数中其它位置也存在"#" var mark0=para.indexOf("#")!=-1? true:false; -var type0=Type_Check(content0); -para1=para.slice(para.indexOf("#")+1) //防止参数中其它位置也存在"#" +const subinfo=$resource.info; +const subtag=$resource.tag!=undefined? $resource.tag:""; +var Pinfo=mark0 && para1.indexOf("info=")!=-1? para1.split("info=")[1].split("&")[0]:0; +var ntf_flow=0; +//常用量 +const Base64=new Base64Code(); +const escapeRegExp = str => str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); //处理特殊符号以便正则匹配使用 +const qxpng="https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png" +const subinfo_link = {"open-url": "https://t.me/QuanX_API", "media-url" :"https://shrtm.nu/ebAr"}; +const rwrite_link = {"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/x3o2"} +const rwhost_link = {"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/0n5J"} +const rule_link={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/cpHD"} +const nan_link={"open-url":link0.split("#")[0], "media-url": qxpng} +const sub_link={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/ebAr"} +const subinfo_link1={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/uo13"} + +SubFlow() //流量通知 +var type0=Type_Check(content0); // 类型 +//$notify(type0) var Pin0=mark0 && para1.indexOf("in=")!=-1? (para1.split("in=")[1].split("&")[0].split("+")).map(decodeURIComponent):null; var Pout0=mark0 && para1.indexOf("out=")!=-1? (para1.split("out=")[1].split("&")[0].split("+")).map(decodeURIComponent):null; var Preg=mark0 && para1.indexOf("regex=")!=-1? decodeURIComponent(para1.split("regex=")[1].split("&")[0]):null; //server正则过滤参数 @@ -91,7 +109,6 @@ var Phout0=mark0 && para1.indexOf("outhn=")!=-1? (para1.split("outhn=")[1].split var Pemoji=mark0 && para1.indexOf("emoji=")!=-1? para1.split("emoji=")[1].split("&")[0]:null; var Pudp0=mark0 && para1.indexOf("udp=")!=-1? para1.split("udp=")[1].split("&")[0]:0; var Ptfo0=mark0 && para1.indexOf("tfo=")!=-1? para1.split("tfo=")[1].split("&")[0]:0; -var Pinfo=mark0 && para1.indexOf("info=")!=-1? para1.split("info=")[1].split("&")[0]:0; var Prname=mark0 && para1.indexOf("rename=")!=-1? para1.split("rename=")[1].split("&")[0].split("+"):null; var Prrname=mark0 && para1.indexOf("rrname=")!=-1? para1.split("rrname=")[1].split("&")[0].split("+"):null; var Ppolicy=mark0 && para1.indexOf("policy=")!=-1? decodeURIComponent(para1.split("policy=")[1].split("&")[0]):"Shawn"; @@ -107,38 +124,27 @@ var pfihn=Phin0? "inhn="+Phin0.join(", ")+", ":"" var pfohn=Phout0? "outhn="+Phout0.join(", "):"" var flow=""; var exptime=""; -var ntf_flow=0; -const subinfo=$resource.info; -const subtag=$resource.tag!=undefined? $resource.tag:""; -const Base64=new Base64Code(); -const escapeRegExp = str => str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); //处理特殊符号以便正则匹配使用 -const qxpng="https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png" -var subinfo_link = {"open-url": "https://t.me/QuanX_API", "media-url" :"https://shrtm.nu/ebAr"}; -var rwrite_link = {"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/x3o2"} -var rwhost_link = {"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/0n5J"} -var rule_link={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/cpHD"} -var nan_link={"open-url":link0.split("#")[0], "media-url": qxpng} -var sub_link={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/ebAr"} -var subinfo_link1={"open-url":link0.split("#")[0], "media-url": "https://shrtm.nu/uo13"} //响应头流量处理部分 -if(Pinfo==1 && subinfo){ - var sinfo=subinfo.replace(/ /g,"").toLowerCase(); - var total="总流量: "+(parseFloat(sinfo.split("total=")[1].split(",")[0])/(1024**3)).toFixed(2)+"GB"; - var usd="已用流量: "+((parseFloat(sinfo.split("upload=")[1].split(",")[0])+parseFloat(sinfo.split("download=")[1].split(",")[0]))/(1024**3)).toFixed(2)+"GB" - var left="剩余流量: "+((parseFloat(sinfo.split("total=")[1].split(",")[0])/(1024**3))-((parseFloat(sinfo.split("upload=")[1].split(",")[0])+parseFloat(sinfo.split("download=")[1].split(",")[0]))/(1024**3))).toFixed(2)+"GB" - if(sinfo.indexOf("expire=")!=-1){ - var epr= new Date(parseFloat(sinfo.split("expire=")[1].split(",")[0])*1000); - var year=epr.getFullYear(); // 获取完整的年份(4位,1970) - var mth=epr.getMonth()+1 < 10 ? '0'+(epr.getMonth()+1):(epr.getMonth()+1); // 获取月份(0-11,0代表1月,用的时候记得加上1) - var day=epr.getDate()<10 ? "0"+(epr.getDate()):epr.getDate(); - epr="过期时间: "+year+"-"+mth+"-"+day - } else{ - epr=""; //"过期时间: ✈️ 未提供該信息" //没过期时间的显示订阅链接 - } - var message=total+"\n"+usd+", "+left; - ntf_flow=1; - $notify("流量信息: ⟦"+subtag+"⟧", epr, message,subinfo_link) +function SubFlow(){ + if(Pinfo==1 && subinfo){ + var sinfo=subinfo.replace(/ /g,"").toLowerCase(); + var total="总流量: "+(parseFloat(sinfo.split("total=")[1].split(",")[0])/(1024**3)).toFixed(2)+"GB"; + var usd="已用流量: "+((parseFloat(sinfo.split("upload=")[1].split(",")[0])+parseFloat(sinfo.split("download=")[1].split(",")[0]))/(1024**3)).toFixed(2)+"GB" + var left="剩余流量: "+((parseFloat(sinfo.split("total=")[1].split(",")[0])/(1024**3))-((parseFloat(sinfo.split("upload=")[1].split(",")[0])+parseFloat(sinfo.split("download=")[1].split(",")[0]))/(1024**3))).toFixed(2)+"GB" + if(sinfo.indexOf("expire=")!=-1){ + var epr= new Date(parseFloat(sinfo.split("expire=")[1].split(",")[0])*1000); + var year=epr.getFullYear(); // 获取完整的年份(4位,1970) + var mth=epr.getMonth()+1 < 10 ? '0'+(epr.getMonth()+1):(epr.getMonth()+1); // 获取月份(0-11,0代表1月,用的时候记得加上1) + var day=epr.getDate()<10 ? "0"+(epr.getDate()):epr.getDate(); + epr="过期时间: "+year+"-"+mth+"-"+day + } else{ + epr=""; //"过期时间: ✈️ 未提供該信息" //没过期时间的显示订阅链接 + } + var message=total+"\n"+usd+", "+left; + ntf_flow=1; + $notify("流量信息: ⟦"+subtag+"⟧", epr, message,subinfo_link) + } } if(type0=="Subs-B64Encode"){ @@ -217,12 +223,13 @@ if(flag==3){ } total=TagCheck_QX(total) total=total.join("\n"); +$notify("Final","test",total) if(flag==1){ total=Base64.encode(total)} //强制 base64 $done({content : total}); } -//flowcheck +//flowcheck-fake-server function flowcheck(cnt){ for(var i=0;i