mirror of
https://github.com/KOP-XIAO/QuantumultX.git
synced 2026-01-25 13:05:10 +00:00
update
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2025-04-30 22:12⟧
|
☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2025-05-14 16:15⟧
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
🛠 发现 𝐁𝐔𝐆 请反馈: https://t.me/Shawn_Parser_Bot
|
🛠 发现 𝐁𝐔𝐆 请反馈: https://t.me/Shawn_Parser_Bot
|
||||||
⛳️ 关注 🆃🅶 相关频道: https://t.me/QuanX_API
|
⛳️ 关注 🆃🅶 相关频道: https://t.me/QuanX_API
|
||||||
@@ -220,6 +220,8 @@ var Palpn = mark0 && para1.indexOf("alpn=") != -1 && version >= 712? para1.split
|
|||||||
var Pobfs = mark0 && para1.indexOf("obfs=") != -1 && version >= 770? para1.split("obfs=")[1].split("&")[0] : ""; // 指定特殊情况下的 obfs=xx-http 类型
|
var Pobfs = mark0 && para1.indexOf("obfs=") != -1 && version >= 770? para1.split("obfs=")[1].split("&")[0] : ""; // 指定特殊情况下的 obfs=xx-http 类型
|
||||||
var Psession = mark0 && para1.indexOf("tsession=") != -1 && version >= 771? para1.split("tsession=")[1].split("&")[0] : "";//tls-no-session-ticket and tls-no-session-reuse
|
var Psession = mark0 && para1.indexOf("tsession=") != -1 && version >= 771? para1.split("tsession=")[1].split("&")[0] : "";//tls-no-session-ticket and tls-no-session-reuse
|
||||||
// 0/1 代表关闭 session-ticket/reuse,2 表示全部关闭。
|
// 0/1 代表关闭 session-ticket/reuse,2 表示全部关闭。
|
||||||
|
var Pmix = mark0 && version>=844? 1 : 0 // allow rewrite and filter mix from version 844
|
||||||
|
var Pjsonjq = mark0 && version>=845? 0 : 1 // allow jsonjq from version 845
|
||||||
|
|
||||||
var RegoutList= [] ;//用于 regout参数删选提醒
|
var RegoutList= [] ;//用于 regout参数删选提醒
|
||||||
// URL-Scheme 增加配置
|
// URL-Scheme 增加配置
|
||||||
@@ -583,7 +585,7 @@ function Type_Check(subs) {
|
|||||||
var SurgeK = ["=ss,", "=vmess,", "=trojan,", "=http,", "=custom,", "=https,", "=shadowsocks", "=shadowsocksr", "=sock5", "=sock5-tls"];
|
var SurgeK = ["=ss,", "=vmess,", "=trojan,", "=http,", "=custom,", "=https,", "=shadowsocks", "=shadowsocksr", "=sock5", "=sock5-tls"];
|
||||||
var ClashK = ["proxies:"]
|
var ClashK = ["proxies:"]
|
||||||
var SubK = ["dm1lc3M", "c3NyOi8v", "CnNzOi8", "dHJvamFu", "c3M6Ly", "c3NkOi8v", "c2hhZG93", "aHR0cDovLw", "aHR0cHM6L", "CnRyb2phbjo", "aHR0cD0", "aHR0cCA","U1RBVFVT"];
|
var SubK = ["dm1lc3M", "c3NyOi8v", "CnNzOi8", "dHJvamFu", "c3M6Ly", "c3NkOi8v", "c2hhZG93", "aHR0cDovLw", "aHR0cHM6L", "CnRyb2phbjo", "aHR0cD0", "aHR0cCA","U1RBVFVT"];
|
||||||
var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo"] // quantumult X 类型 rewrite
|
var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo", " url jsonjq"] // quantumult X 类型 rewrite
|
||||||
var SubK2 = ["ss://", "vmess://", "ssr://", "trojan://", "ssd://", "\nhttps://", "\nhttp://","socks://","ssocks://","vless://"];
|
var SubK2 = ["ss://", "vmess://", "ssr://", "trojan://", "ssd://", "\nhttps://", "\nhttp://","socks://","ssocks://","vless://"];
|
||||||
var ModuleK = ["[Script]", "[Rule]", "[URL Rewrite]", "[Map Local]", "\nhttp-r", "script-path"]
|
var ModuleK = ["[Script]", "[Rule]", "[URL Rewrite]", "[Map Local]", "\nhttp-r", "script-path"]
|
||||||
var QXProfile = ["[filter_local]","[filter_remote]","[server_local]","[server_remote]"]
|
var QXProfile = ["[filter_local]","[filter_remote]","[server_local]","[server_remote]"]
|
||||||
@@ -1082,7 +1084,7 @@ function URX2QX(subs) {
|
|||||||
function SCP2QX(subs) {
|
function SCP2QX(subs) {
|
||||||
var nrw = []
|
var nrw = []
|
||||||
var rw = ""
|
var rw = ""
|
||||||
var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo"] // quantumult X 类型 rewrite
|
var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo", " url jsonjq"] // quantumult X 类型 rewrite
|
||||||
subs = subs.split("\n").map(x => x.trim().replace(/\s+/g," "))
|
subs = subs.split("\n").map(x => x.trim().replace(/\s+/g," "))
|
||||||
//$notify("Script","",subs)
|
//$notify("Script","",subs)
|
||||||
for (var i = 0; i < subs.length; i++) {
|
for (var i = 0; i < subs.length; i++) {
|
||||||
@@ -1119,13 +1121,13 @@ function SCP2QX(subs) {
|
|||||||
rw = ptn + " url " + type + js
|
rw = ptn + " url " + type + js
|
||||||
nrw.push(rw)
|
nrw.push(rw)
|
||||||
}
|
}
|
||||||
} else if (/\s30(7|2)$/.test(subs[i])) { //rewrite 302&307 复写(Surge)
|
} else if (/\d\s30(7|2)$/.test(subs[i])) { //rewrite 302&307 复写(Surge)
|
||||||
//tpe = subs[i].indexOf(" 302") != -1? "302":"307"
|
//tpe = subs[i].indexOf(" 302") != -1? "302":"307"
|
||||||
//$notify("307/2",subs[i])
|
//$notify("307/2",subs[i])
|
||||||
rw = subs[i].split(" ")[0] + " url " + subs[i].split(" ")[2] + " " + subs[i].split(" ")[1].trim()
|
rw = subs[i].split(" ")[0] + " url " + subs[i].split(" ")[2] + " " + subs[i].split(" ")[1].trim()
|
||||||
//if(rw.indexOf("307")!=-1) {$notify("XX",subs[i],rw.split(" "))}
|
//if(rw.indexOf("307")!=-1) {$notify("XX",subs[i],rw.split(" "))}
|
||||||
nrw.push(rw)
|
nrw.push(rw)
|
||||||
} else if (/\s\-\s30(2|7)\s/.test(subs[i])) { //rewrite 302&307 复写(Shadowrocket)
|
} else if (/\d\s\-\s30(2|7)\s/.test(subs[i])) { //rewrite 302&307 复写(Shadowrocket)
|
||||||
//xx - 302 $1$2$3
|
//xx - 302 $1$2$3
|
||||||
rw = subs[i].replace(" - "," url ")
|
rw = subs[i].replace(" - "," url ")
|
||||||
nrw.push(rw)
|
nrw.push(rw)
|
||||||
@@ -1194,10 +1196,11 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) {
|
|||||||
var hnc = 0;
|
var hnc = 0;
|
||||||
var dwrite = []
|
var dwrite = []
|
||||||
var hostname = ""
|
var hostname = ""
|
||||||
|
//$notify("S0","Content",subs)
|
||||||
for (var i = 0; i < subs.length; i++) {
|
for (var i = 0; i < subs.length; i++) {
|
||||||
subi = subs[i].trim();
|
subi = subs[i].trim();
|
||||||
var subii = subi.replace(/ /g, "")
|
var subii = subi.replace(/ /g, "")
|
||||||
if (subi != "" && (subi.indexOf(" url ")!=-1 || subi.indexOf(" url-and-header ")!=-1 || /^hostname\=/.test(subii))) {
|
if (subi != "" && (subi.indexOf(" url ")!=-1 || subi.indexOf("host")!=-1 || subi.indexOf(" url-and-header ")!=-1 || /^hostname\=/.test(subii))) {
|
||||||
const notecheck = (item) => subi.indexOf(item) == 0
|
const notecheck = (item) => subi.indexOf(item) == 0
|
||||||
if (noteK.some(notecheck)) { // 注释项跳过
|
if (noteK.some(notecheck)) { // 注释项跳过
|
||||||
continue;
|
continue;
|
||||||
@@ -1216,6 +1219,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Pntf0 != 0) {
|
if (Pntf0 != 0) {
|
||||||
nowrite = dwrite.length <= 10 ? emojino[dwrite.length] : dwrite.length
|
nowrite = dwrite.length <= 10 ? emojino[dwrite.length] : dwrite.length
|
||||||
no1write = Nlist.length <= 10 ? emojino[Nlist.length] : Nlist.length
|
no1write = Nlist.length <= 10 ? emojino[Nlist.length] : Nlist.length
|
||||||
@@ -1229,6 +1233,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Nlist.length == 0 ) {
|
if (Nlist.length == 0 ) {
|
||||||
if ((Pin0 || Pout0 || Phin0 || Phout0 || Pregout || Preg)) {
|
if ((Pin0 || Pout0 || Phin0 || Phout0 || Pregout || Preg)) {
|
||||||
$notify("🤖 " + "重写引用 ➟ " + "⟦" + subtag + "⟧", "⛔️ 筛选参数: " + pfi + pfo, "⚠️ 筛选后剩余rewrite规则数为 0️⃣ 条, 请检查参数及原始链接", nan_link)
|
$notify("🤖 " + "重写引用 ➟ " + "⟦" + subtag + "⟧", "⛔️ 筛选参数: " + pfi + pfo, "⚠️ 筛选后剩余rewrite规则数为 0️⃣ 条, 请检查参数及原始链接", nan_link)
|
||||||
@@ -1243,6 +1248,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) {
|
|||||||
RegCheck(Nlist, "重写引用", "regout", Pregout) }
|
RegCheck(Nlist, "重写引用", "regout", Pregout) }
|
||||||
if (hostname != "") { Nlist.push(hostname) }
|
if (hostname != "") { Nlist.push(hostname) }
|
||||||
Nlist =Phide ==1? Nlist : [...dwrite,...Nlist]
|
Nlist =Phide ==1? Nlist : [...dwrite,...Nlist]
|
||||||
|
//$notify("final","Content",Nlist)
|
||||||
return Nlist
|
return Nlist
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,6 +1324,7 @@ function Rule_Handle(subs, Pout, Pin) {
|
|||||||
var nlist = []
|
var nlist = []
|
||||||
var RuleK = ["//", "#", ";","[","^"]; //排除项目
|
var RuleK = ["//", "#", ";","[","^"]; //排除项目
|
||||||
var RuleK2 = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,", "ip-asn"];
|
var RuleK2 = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,", "ip-asn"];
|
||||||
|
//$notify("nlist-s0","",subs)
|
||||||
if (Tout != "" && Tout != null) { // 有 out 参数时
|
if (Tout != "" && Tout != null) { // 有 out 参数时
|
||||||
var dlist = [];
|
var dlist = [];
|
||||||
for (var i = 0; i < cnt.length; i++) {
|
for (var i = 0; i < cnt.length; i++) {
|
||||||
@@ -1428,7 +1435,9 @@ function Rule_Policy(content) { //增加、替换 policy
|
|||||||
} else { return "" }
|
} else { return "" }
|
||||||
if (cnt[0].indexOf("URL-REGEX") != -1 || cnt[0].indexOf("PROCESS") != -1) {
|
if (cnt[0].indexOf("URL-REGEX") != -1 || cnt[0].indexOf("PROCESS") != -1) {
|
||||||
nn = ""
|
nn = ""
|
||||||
} else { nn = nn.replace("IP-CIDR6", "ip6-cidr") }
|
} else {
|
||||||
|
nn = nn.replace("IP-CIDR6", "ip6-cidr").replace(/^(domain|Domain|DOMAIN)/,"host")
|
||||||
|
}
|
||||||
return nn
|
return nn
|
||||||
} else if (cnt.length == 1 && !RuleK.some(RuleCheck) && cnt[0]!="" && cnt[0].indexOf("payload:")==-1 && cnt[0].indexOf("=")==-1 && cnt[0].trim()!="https:") { // 纯域名/ip 列表
|
} else if (cnt.length == 1 && !RuleK.some(RuleCheck) && cnt[0]!="" && cnt[0].indexOf("payload:")==-1 && cnt[0].indexOf("=")==-1 && cnt[0].trim()!="https:") { // 纯域名/ip 列表
|
||||||
//$notify("LIST-HANDLE")
|
//$notify("LIST-HANDLE")
|
||||||
@@ -2338,7 +2347,7 @@ function isQuanX(content) {
|
|||||||
|
|
||||||
//surge script/quanx-rewrite - > quanx
|
//surge script/quanx-rewrite - > quanx
|
||||||
function isQuanXRewrite(content) {
|
function isQuanXRewrite(content) {
|
||||||
cnt = content
|
cnt = content.filter(Boolean)
|
||||||
cnt0=[]
|
cnt0=[]
|
||||||
var RuleK = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,","force-http", "ip-asn"];
|
var RuleK = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,","force-http", "ip-asn"];
|
||||||
for (var i = 0; i< cnt.length; i++){
|
for (var i = 0; i< cnt.length; i++){
|
||||||
@@ -2361,18 +2370,22 @@ function isQuanXRewrite(content) {
|
|||||||
cnti= cnti.split(" ")[1] == "url" ? cnti : ""
|
cnti= cnti.split(" ")[1] == "url" ? cnti : ""
|
||||||
} else if (cnti.indexOf(" url-and-header ")!=-1 ){ // url-and-header : ^https:xxx.com header-content url-and-header type-rule content
|
} else if (cnti.indexOf(" url-and-header ")!=-1 ){ // url-and-header : ^https:xxx.com header-content url-and-header type-rule content
|
||||||
cnti= cnti //cnti.split(" ")[2] == "url-and-header" ? cnti : ""
|
cnti= cnti //cnti.split(" ")[2] == "url-and-header" ? cnti : ""
|
||||||
|
} else if (RuleK.some(RuleCheck) && Pmix==1) {
|
||||||
|
cnti= Rule_Policy(cnti)
|
||||||
|
} else if (Pjsonjq==0 && cnti.indexOf(" url jsonjq-")!=-1) { // lower version jsonjq pass
|
||||||
|
cnti=""
|
||||||
} else {
|
} else {
|
||||||
cnti=""
|
cnti=""
|
||||||
}
|
}
|
||||||
if (cnti!="" && cnti.trim()[0]!="[" && cnti.indexOf("RULE-SET")==-1 && !/cronexp\=|type\=cron/.test(cnti.replace(/ /g,"")) && !RuleK.some(RuleCheck)) {
|
if (cnti!="" && cnti.trim()[0]!="[" && cnti.indexOf("RULE-SET")==-1 && !/cronexp\=|type\=cron/.test(cnti.replace(/ /g,""))) { //&& !RuleK.some(RuleCheck)
|
||||||
if (!(/\;$/.test(cnti))) { // 某些特殊情形 let url = xxx;
|
if (!(/\;$/.test(cnti))) { // 某些特殊情形 let url = xxx;
|
||||||
cnt0.push(cnti) // 排除其它项目后写入
|
cnt0.push(cnti) // 排除其它项目后写入
|
||||||
|
//$notify(cnti,"已经写入")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//console.log(cnt0)
|
//console.log(cnt0)
|
||||||
//$notify("RWT","",cnt0)
|
|
||||||
return cnt0
|
return cnt0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user