├── .DS_Store
├── HotKids-JS
├── .DS_Store
└── scripts.conf
├── Q-Search.list
├── QuanX-RuleSet-Divine-Engine.json
├── QuantumultX_Profiles.conf
├── README.md
├── Scripts
├── .DS_Store
├── Cron-Switch.json
├── IPCheck.js
├── IPConfig.js
├── IPCustom.js
├── IPInfo.js
├── IP_API.js
├── IP_bili.js
├── IP_bili_cn.js
├── TaskGallery.json
├── UI-Action.json
├── disney-ui-check.js
├── emoji.json
├── geo_location.js
├── network-direct.js
├── nf-ui-check.js
├── nf_ytb_ui-check.js
├── nfcheck.js
├── resource-parser.js
├── server-info-plus.js
├── streaming-ui-check.js
├── switch-check-disneyplus.js
├── switch-check-google.js
├── switch-check-nf.js
├── switch-check-ytb.js
├── traffic-check.js
├── ytb-ui-check.js
└── ytbcheck.js
├── TikTok_Rewrite.list
├── img
├── .DS_Store
├── dragonball
│ ├── 1.PNG
│ ├── 10.PNG
│ ├── 11.PNG
│ ├── 12.PNG
│ ├── 13.PNG
│ ├── 14.PNG
│ ├── 15.PNG
│ ├── 16.PNG
│ ├── 17.PNG
│ ├── 18.PNG
│ ├── 19.PNG
│ ├── 2.PNG
│ ├── 20.PNG
│ ├── 21.PNG
│ ├── 22.PNG
│ ├── 23.PNG
│ ├── 24.PNG
│ ├── 25.PNG
│ ├── 26.PNG
│ ├── 27.PNG
│ ├── 28.PNG
│ ├── 29.PNG
│ ├── 3.PNG
│ ├── 30.PNG
│ ├── 31.PNG
│ ├── 32.PNG
│ ├── 33.PNG
│ ├── 34.PNG
│ ├── 4.PNG
│ ├── 7.PNG
│ ├── 8.PNG
│ └── 9.PNG
├── others
│ └── lee.png
├── policy
│ ├── apple.png
│ ├── as.PNG
│ ├── cn.PNG
│ ├── cn0.PNG
│ ├── downloads.png
│ ├── eu.PNG
│ ├── final.png
│ ├── hk.PNG
│ ├── jp.PNG
│ ├── mine.PNG
│ ├── mo.PNG
│ ├── netflix.png
│ ├── proxy.png
│ ├── telegram.png
│ ├── us.png
│ ├── youtube.png
│ └── ytb.png
├── southpark
│ ├── .DS_Store
│ ├── 1.png
│ ├── 10.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ ├── 8.png
│ └── 9.png
└── sub
│ └── Dler.png
└── remote-resource.json
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/.DS_Store
--------------------------------------------------------------------------------
/HotKids-JS/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/HotKids-JS/.DS_Store
--------------------------------------------------------------------------------
/HotKids-JS/scripts.conf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/HotKids-JS/scripts.conf
--------------------------------------------------------------------------------
/Q-Search.list:
--------------------------------------------------------------------------------
1 | #From 🐩️哥 (https://raw.githubusercontent.com/Neurogram-R/Surge/master/module/Q-Search.sgmodule)
2 | #- Safari 内输入 命令 + 空格 + 关键词 快速指定搜索引擎搜索
3 | #注:先进入设置更改 Safari 默认搜索为 DuckDuckGO
4 |
5 | hostname = duckduckgo.com
6 |
7 |
8 | ^https:\/\/duckduckgo.com\/\?q=db\+([^&]+).+ url 302 https://m.douban.com/search/?query=$1
9 | ^https:\/\/duckduckgo.com\/\?q=ddg\+([^&]+).+ url 302 https://duckduckgo.com/?ia=about&q=$1
10 | ^https:\/\/duckduckgo.com\/\?q=bd\+([^&]+).+ url 302 https://www.baidu.com/s?wd=$1
11 | ^https:\/\/duckduckgo.com\/\?q=gh\+([^&]+).+ url 302 https://github.com/search?q=$1
12 | ^https:\/\/duckduckgo.com\/\?q=gm\+([^&]+).+ url 302 https://www.google.com/search?&tbm=isch&q=$1
13 | ^https:\/\/duckduckgo.com\/\?q=yd\+([^&]+).+ url 302 https://dict.youdao.com/search?q=$1
14 | ^https:\/\/duckduckgo.com\/\?q=([^&]+).+ url 302 https://www.google.com/search?q=$1
15 |
--------------------------------------------------------------------------------
/QuanX-RuleSet-Divine-Engine.json:
--------------------------------------------------------------------------------
1 | {
2 | "list": [
3 | {
4 | "enable": true,
5 | "url": "https://gist.githubusercontent.com/Fndroid/58106962a852aa5c45bd1803b34b8651/raw/aa4649d63190a909a22e1c44fc23bfda382809dc/LAN.list",
6 | "note": "LAN",
7 | "policy": "DIRECT"
8 | },
9 | {
10 | "enable": true,
11 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Apple.list",
12 | "note": "苹果",
13 | "policy": "Apple"
14 | },
15 | {
16 | "enable": true,
17 | "url": "https://gist.githubusercontent.com/Fndroid/58106962a852aa5c45bd1803b34b8651/raw/97d927bf19d7b61a7da0c8b305728f958f22b0eb/SYSTEM.list",
18 | "note": "SYSTEM",
19 | "policy": "DIRECT"
20 | },
21 | {
22 | "enable": true,
23 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Advertising.list",
24 | "note": "黑名单",
25 | "policy": "REJECT"
26 | },
27 | {
28 | "enable": true,
29 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Hijacking.list",
30 | "note": "运营商劫持",
31 | "policy": "REJECT"
32 | },
33 | {
34 | "enable": true,
35 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Global.list",
36 | "note": "代理",
37 | "policy": "PROXY"
38 | },
39 | {
40 | "enable": true,
41 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Telegram.list",
42 | "note": "Telegram",
43 | "policy": "PROXY"
44 | },
45 | {
46 | "enable": true,
47 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/ForeignMedia.list",
48 | "note": "国外媒体",
49 | "policy": "PROXY"
50 | },
51 | {
52 | "enable": true,
53 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/China.list",
54 | "note": "国内",
55 | "policy": "DIRECT"
56 | },
57 | {
58 | "enable": true,
59 | "url": "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/DomesticMedia.list",
60 | "note": "国内媒体",
61 | "policy": "DIRECT"
62 | }
63 | ]
64 | }
65 |
--------------------------------------------------------------------------------
/QuantumultX_Profiles.conf:
--------------------------------------------------------------------------------
1 | ;2023-02-24: 部分修改
2 | ;2022-09-26: 增加对各个模块的说明(部分内容只适用于 1.1.0 以上版本)
3 | ;⚠️注意⚠️: 以下内容中,带“;” “#”的都是注释符号,去掉前面的符号,该行才有效
4 |
5 | ;general 模块内为一些通用的设置参数项
6 | [general]
7 |
8 | ;Quantumult X 会对 server_check_url 指定的网址进行相应测试,以确认节点的可用性
9 | ;你同样可以在 server_local/remote 中,为节点、订阅单独指定server_check_url参数
10 | ;如您为节点单独指定了 url,则所有相关延迟测试中,均会采用此 url 地址
11 | server_check_url= http://www.qualcomm.cn/generate_204
12 | ;节点延迟测试超时参数,需小于 5000 毫秒才生效
13 | server_check_timeout=2000
14 |
15 | ;👍👍👍资源解析器,可用于自定义各类远程资源的转换,如节点,规则 filter,复写 rewrite 等,url 地址可远程,可 本地/iCloud(Quantumult X/Scripts目录);
16 | ;下面是我写的一个解析器,具体内容直接参照链接里的使用说明
17 | resource_parser_url= https://fastly.jsdelivr.net/gh/KOP-XIAO/QuantumultX@master/Scripts/resource-parser.js
18 |
19 | ;👍👍geo_location_checker用于节点页面的节点信息展示,可完整自定义展示内容与方式
20 | ; extreme-ip-lookup为Quantumult X 作者提供的示范 api
21 | ;geo_location_checker=http://extreme-ip-lookup.com/json/, https://raw.githubusercontent.com/crossutility/Quantumult-X/master/sample-location-with-script.js
22 | ;下面是我所使用的 api 及获取、展示节点信息的 js
23 | geo_location_checker=http://ip-api.com/json/?lang=zh-CN, https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/IP_API.js
24 |
25 |
26 | ;👍👍👍运行模式模块,running_mode_trigger 设置,即根据网络自动切换 分流/直连/全局代理 等模式。
27 | ;running-mode-trigger 模式下,跟手动切换直连/全局代理 等效,rewrite/task 模块始终会生效,比 ssid 策略组设置简单,比 ssid-suspend 更灵活。
28 |
29 | ;running_mode_trigger=filter, filter, asus-5g:all_direct, asus:all_proxy
30 | ; 上述写法,前两个 filter 先后表示 在 [数据蜂窝网络] 跟 [一般 Wi-Fi] 下,走 filter(分流)模式,后面则表示在 asus-5g 下切换为全局直连[all_direct],asus 切换为全局代理[all_proxy]
31 | ; 如需使用,相应 SSID 换成你自己 Wi-Fi 名即可
32 |
33 | ;ssid_suspended_list,让 Quantumult X 在特定 Wi-Fi 网络下暂停工作(仅 task 模块会继续工作),多个Wi-Fi用“,”连接
34 | ;ssid_suspended_list=Asus, Shawn-Wifi
35 |
36 | ;dns exclusion list中的域名将不使用fake-ip方式. 其它域名则全部采用 fake-ip 及远程解析的模式
37 | ;dns_exclusion_list=*.qq.com
38 |
39 | ;UDP 白名单,留空则默认所有为端口。不在udp白名单列表中的端口,将被丢弃处理(返回 ICMP “端口不可达” 信息)。
40 | ;udp_whitelist=53, 80-427, 444-65535
41 |
42 | ; UDP Drop名单,同白名单类似,但不会返回 ICMP “端口不可达” 信息
43 | ; drop 名单仅处理 whitelist名单中的端口
44 | ;udp_drop_list = 1900, 80
45 |
46 | # 参数 fallback_udp_policy 仅支持 v1.0.19 以及之后的版本。
47 | # 参数 fallback_udp_policy 的值仅支持末端策略(末端策略为经由规则模块和策略模块后所命中的策略,例如:direct、reject 以及节点;不支持内置策略 proxy 以及其它自定义策略)。
48 | fallback_udp_policy=direct
49 |
50 | ;下列表中的内容将不经过 QuantumultX的处理,设置后建议重启设备
51 | ;excluded_routes= 192.168.0.0/16, 172.16.0.0/12, 100.64.0.0/10, 10.0.0.0/8
52 | ;icmp_auto_reply=true
53 |
54 | ;指定 DoH 请求所使用的 User-Agent
55 | ;doh_user_agent=Agent/1.0
56 |
57 | ;指定服务器测试时所使用的 User-Agent
58 | ;server_check_user_agent = Agent/1.0
59 |
60 | // 默认当 DNS 层面某domain 被reject时,将返回loopback IP。你可以通过下面的参数
61 | // 修改成为 “no-error-no-answer”,或者 “nxdomain”
62 | ;dns_reject_domain_behavior = loopback
63 |
64 |
65 |
66 | [dns]
67 | ; 禁用系统 DNS(no-system) 以及 ipv6
68 | ;no-system
69 | ;no-ipv6
70 | ;支持参数 excluded_ssids , included_ssids(1.0.29+) 指定在特定 Wi-Fi下失效/生效
71 |
72 | // circumvent-ipv4-answer, circumvent-ipv6-answer 参数
73 | //1、当并发向多个上游 DNS 进行查询时,如响应最快的上游 DNS 抢答的结果命中了该条目,则 Quantumult X Tunnel DNS 模块会等待其他 DNS 服务器的响应结果(如抢答的结果中至少有一个不属于该条目,则不会等待其他 DNS 的响应,此时有效结果采用不属于该条目的所有记录)
74 | //2、如所有上游 DNS 返回的所有结果均命中该条目,则判定为 DNS 查询失败
75 | //3、如配置的上游 DNS 包含有去广告功能的 DNS 服务器,请勿使用该参数
76 | ;circumvent-ipv4-answer = 127.0.0.1, 0.0.0.0
77 | ;circumvent-ipv6-answer = ::
78 |
79 | //如需使用 DoH3,DNS over HTTP/3,请开启下面👇参数
80 | ;prefer-doh3
81 |
82 | ;指定 dns 服务器,并发响应选取最优结果
83 | server=114.114.114.114
84 | server=202.141.176.93
85 | server=202.141.178.13
86 | server=117.50.10.10
87 | server=223.5.5.5
88 | server=119.29.29.29:53
89 | server=119.28.28.28
90 |
91 | ;如指定 doh 服务,则👆️上面的一般 dns 解析均失效 额外参数,在特定网络下禁用该 doh
92 | ;doh-server=xxx.com, excluded_ssids=SSID1, SSID2
93 | ; 1.0.29 版本后支持多个 doh 并发,👇
94 | ;doh-server=xx1.com,xx2.com,excluded_ssids=SSID1, SSID2
95 | ; 1.0.29 版本后支持 alias 映射类型
96 | ;alias=/example.com/another-example.com
97 |
98 |
99 | ;如指定了 DoQ 服务,则 DoH 以及其它 dns解析均失效
100 | ;doq-server = quic://dns.adguard.com
101 | ;doq-server = quic://dns1.example.com, quic://dns2.example.com
102 | ;doq-server = quic://dns.adguard.com, excluded_ssids=SSID1
103 | ;doq-server = quic://dns.adguard.com, included_ssids=SSID2
104 |
105 |
106 |
107 | ;指定域名解析dns, 下面为示范,按需启用, 同样支持 excluded_ssids/included_ssids 参数
108 | ;server=/*.taobao.com/223.5.5.5, excluded_ssids=My-Wifi, Your-Wifi
109 | ;server=/*.tmall.com/223.5.5.5, included_ssids=His-Wifi
110 | ;server=/example1.com/8.8.4.4
111 | ;server=/*.example2.com/223.5.5.5
112 | ;server=/example4.com/[2001:4860:4860::8888]:53
113 | ;address=/example5.com/192.168.16.18
114 | ;address=/example6.com/[2001:8d3:8d3:8d3:8d3:8d3:8d3:8d3]
115 | //映射域名到其它域名的类型
116 | ;alias = /example7.com/another-example.com
117 |
118 |
119 | [task_local]
120 | ;包含3⃣️种类型: cron 定时任务,UI交互脚本,网络切换脚本
121 |
122 | ; 1⃣️ 任务模块,可用于签到,天气话费查询等
123 | ;js文件放于iCloud或者本机的Quantumult X/Scripts 路径下。TF版本可直接使用远程js链接
124 | ;从 “分” 开始的5位cron 写法,具体 cron 表达式可自行 Google
125 | ;比如上述语句 代表每天 12 点 2 分,自动执行一次;
126 | ;tag参数为 task 命名标识;
127 | ;img-url参数用于指定 task 的图标(108*108)
128 |
129 | 2 12 * * * sample.js, tag=本地示范(左滑编辑,右滑执行), enabled=false, img-url=https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png
130 | 13 12 * * * https://raw.githubusercontent.com/crossutility/Quantumult-X/master/sample-task.js, tag=远程示范(点击缓存/更新脚本), enabled=false, img-url=https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png
131 |
132 | # 2⃣️ UI交互查询脚本示范,在首页长按 节点/策略组 唤出
133 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/streaming-ui-check.js, tag = 流媒体 - 解锁查询, img-url=checkmark.seal.system, enabled=true
134 |
135 | # 3⃣️ 网络切换/变化时 触发的脚本类型
136 | ;event-network sample-taks.js
137 |
138 |
139 | #以下为策略组[policy]部分
140 | # static 策略组中,你需要手动选择想要的节点/策略组。
141 | # available 策略组将按顺序选择你列表中第一个可用的节点。
142 | # round-robin 策略组,将按列表的顺序轮流使用其中的节点。
143 | # url-latency-benchmark 延迟策略组,选取延迟最优节点。
144 | # dest-hash 策略组,随机负载均衡,但相同域名走固定节点。
145 | # ssid 策略组,将根据你所设定的网络来自动切换节点/策略组
146 | ;img-url 参数用于指定策略组图标,可远程,也可本地/iCloud(Quantumult X/Images路径下) (108*108 大小)
147 | ;direct/proxy/reject 则只能用本地图标,名字分别为 direct.png, proxy.png,reject.png 放置于 Images 文件夹下即可生效 (108*108 大小)
148 |
149 | [policy]
150 | static=🍎 苹果服务, direct, proxy, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Apple.png
151 | static=💻 国外影视, proxy, direct, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/ForeignMedia.png
152 | static=📽 国内视频, direct, proxy, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/DomesticMedia.png
153 | static=🎬 YouTube, proxy, direct, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/YouTube.png
154 | static=📺 Netflix, proxy, direct, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Netflix_Letter.png
155 | static=🌏 国外网站, proxy,direct,🇭🇰️ 香港(正则示范), img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Global.png
156 | static=🕹 终极清单,direct, proxy, img-url= https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Final.png
157 | static= 🇭🇰️ 香港(正则示范), server-tag-regex= 香港|🇭🇰️|HK|Hong, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/HK.png
158 |
159 | #server-tag-regex 以及 resource-tag-regex 参数用于正则筛选来建立策略组
160 | #具体可参见教程部分: https://shrtm.nu/DAFP
161 |
162 | #以下是quantumultX的3普通种策略组类型写法,也可以用正则参数 server-tag-regex 或者 resource-tag-regex 来筛选
163 | ;static=policy-name-1, Sample-A, Sample-B, Sample-C
164 | ;available=policy-name-2, Sample-A, Sample-B, Sample-C
165 | ;round-robin=policy-name-3, Sample-A, Sample-B, Sample-C
166 | ;url-latency-benchmark=policy-name-4, Sample-A, Sample-B, Sample-C
167 | ;dest-hash=policy-name-5, Sample-A, Sample-B, Sample-C
168 | #下面是ssid策略组示范
169 | ;ssid=policy-name-4, Sample-A, Sample-B, LINK_22E171:Sample-B, LINK_22E172:Sample-C
170 |
171 |
172 | # "tag" 跟 "enabled" 为可选参数,分别表示 “标签”及“开启状态”, true 为开启,false 关闭.
173 | # update-interval 为更新时间参数,单位 秒, 默认更新时间为 24*60*60=86400 秒,也就是24小时.
174 | # opt-parser=true/false 用于控制是否对本订阅 开启资源解析器,不写或者 false 表示不启用解析器;
175 |
176 | #服务器远程订阅
177 | [server_remote]
178 | #远程服务器订阅模块,可直接订阅SSR,SS链接,以及Quantumult X格式的vmess/trojan/https订阅
179 | #其它格式可用 opt-parser 参数开启解析器导入使用
180 | #img-url参数用于指定图标,格式要求同样为 108*108 的 png 图片,可远程,可本地
181 | https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server.snippet#rename=[香港], tag=URI格式示范(请导入自己订阅), update-interval=86400, opt-parser=true, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Quantumult_X.png, enabled=true
182 | https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.snippet, tag=QuanX格式示范(导入后删除这两个示范), img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Quantumult_X.png, enabled=true
183 |
184 | #支持本地/iCloud的节点文件/片段,位于Quantumult X/Profiles路径下
185 | ;servers.snippet, tag=本地服务器, img-url=https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png, enabled=false
186 |
187 | #规则分流远程订阅
188 | [filter_remote]
189 | #远程分流模块,可使用force-policy来强制使用策略偏好, 替换远程规则内所指定的策略组
190 | ;同样的
191 | # update-interval 为更新时间参数,单位 秒, 默认更新时间为 24*60*60=86400 秒,也就是24小时.
192 | # opt-parser=true/false 用于控制是否对本订阅 开启资源解析器,不写或者 false 表示不启用解析器;
193 |
194 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Guard/Advertising.list, tag=🚦去广告, update-interval=86400, opt-parser=true, enabled=true
195 |
196 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Guard/Hijacking.list, tag=🚫 运营商劫持, enabled=true
197 |
198 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/StreamingMedia/StreamingCN.list, force-policy=📽 国内视频, tag=📽 国内视频, enabled=true
199 |
200 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/StreamingMedia/Video/Netflix.list, tag=📺 Netflix, force-policy=📺 Netflix, enabled=true
201 |
202 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/StreamingMedia/Video/YouTube.list, tag=🎬 YouTube, force-policy=🎬 YouTube, enabled=true
203 |
204 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/StreamingMedia/Streaming.list, tag=💻 国外影视,force-policy= 💻 国外影视, enabled=true
205 |
206 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Global.list, tag=🌍 国外网站, force-policy= 🌏 国外网站, enabled=true
207 |
208 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Extra/Apple/Apple.list, tag= Apple服务, force-policy=🍎 苹果服务,enabled=true
209 |
210 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Extra/Apple/BlockiOSUpdate.list, tag= 屏蔽更新,enabled=true
211 |
212 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/China.list, tag=🐼 国内网站, enabled=true
213 |
214 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Filter/Extra/ChinaIP.list, tag=🇨🇳️ 国内IP池, enabled=true
215 |
216 | #支持本地/iCloud规则文件,位于Quantumult X/Profiles路径下
217 | ;filter.txt, tag=本地分流, enabled=false
218 |
219 | #rewrite 复写远程订阅
220 | [rewrite_remote]
221 | #远程复写模块,内包含主机名hostname以及复写rewrite规则
222 | # update-interval 为更新时间参数,单位 秒, 默认更新时间为 24*60*60=86400 秒,也就是24小时.
223 | # opt-parser=true/false 用于控制是否对本订阅 开启资源解析器,不写或者 false 表示不启用解析器;
224 |
225 |
226 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Rewrite/Block/Advertising.conf, tag=神机复写(⛔️去广告), update-interval=86400, opt-parser=false, enabled=true
227 |
228 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Rewrite/General.conf, tag=神机复写(😄️通用), update-interval=86400, opt-parser=false, enabled=true
229 |
230 | ;Youtube premium 会员请勿开启此条
231 | https://raw.githubusercontent.com/DivineEngine/Profiles/master/Quantumult/Rewrite/Block/YouTubeAds.conf, tag=神机复写(🈲YouTube-AD) , update-interval=86400, opt-parser=false, enabled=false
232 |
233 | #支持本地/iCloud的复写规则文件,位于Quantumult X/Profiles路径下
234 | ;rewrite.txt, tag=本地复写, opt-parser=false, enabled=false
235 |
236 | # 本地服务器部分
237 | [server_local]
238 | # 以下示范都是 ip(域名):端口,
239 | # 比如 vmess-a.203.167.55.4:777 ,实际是 203.167.55.4:777
240 | # 前面的 ss-a,ws-tls这些,只是为了让你快速找到自己节点的类型
241 | # 实际使用时,请不要真的 傻乎乎的 写 vmess-a.203.167.55.4:777 这种。
242 | # 目前支持 shadowsocks/shadowsocksR/Vmess/Trojan/http(s)/Socks5 等类型
243 | # 支持 tls-cert-sha256 以及 tls-pubkey-sha256 参数等自定义TLS验证
244 |
245 | #shadowsocks以及shadowsocksR类型, 支持 V2-Plugin
246 | #支持UDP,支持UDP-OVER-TCP(版本1.0.29 665+)
247 | ;shadowsocks=ss-a.example.com:80, method=chacha20, password=pwd, obfs=http, obfs-host=bing.com, obfs-uri=/resource/file, fast-open=false, udp-relay=false, server_check_url=http://www.apple.com/generate_204, tag=Sample-A
248 | ;shadowsocks=ss-b.example.com:80, method=chacha20, password=pwd, obfs=http, obfs-host=bing.com, obfs-uri=/resource/file, fast-open=false, udp-relay=false, tag=Sample-B
249 | ;shadowsocks=ss-c.example.com:443, method=chacha20, password=pwd, obfs=tls, obfs-host=bing.com, fast-open=false, udp-relay=false, tag=Sample-C
250 | ;shadowsocks=ssr-a.example.com:443, method=chacha20, password=pwd, ssr-protocol=auth_chain_b, ssr-protocol-param=def, obfs=tls1.2_ticket_fastauth, obfs-host=bing.com, tag=Sample-D
251 | ;shadowsocks=ws-a.example.com:80, method=aes-128-gcm, password=pwd, obfs=ws, obfs-uri=/ws, fast-open=false, udp-relay=false, tag=Sample-E
252 | ;shadowsocks=ws-b.example.com:80, method=aes-128-gcm, password=pwd, obfs=ws, fast-open=false, udp-relay=false, tag=Sample-F
253 | ;shadowsocks=ws-tls-a.example.com:443, method=aes-128-gcm, password=pwd, obfs=wss, obfs-uri=/ws, fast-open=false, udp-relay=false, tag=Sample-G
254 | ;shadowsocks=ws-tls-a.example.com:443, method=aes-128-gcm, password=pwd, udp-over-tcp=true fast-open=false, udp-relay=false, tag=Sample-H
255 |
256 | # vmess 类型,ws,wss(ws+tls),over-tls,tcp,支持 UDP
257 | # vmess 类型节点默认开启 aead,关闭请用 aead=false
258 | ; ws 类型
259 | ;vmess=ws-c.example.com:80, method=chacha20-ietf-poly1305, password= 23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs-host=ws-c.example.com, obfs=ws, obfs-uri=/ws, fast-open=false, udp-relay=false, aead=false, tag=Sample-H
260 | ; wss(ws+tls) 类型
261 | ;vmess=ws-tls-b.example.com:443, method=chacha20-ietf-poly1305, password= 23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs-host=ws-tls-b.example.com, obfs=wss, obfs-uri=/ws, tls-verification=true,fast-open=false, udp-relay=false, tag=Sample-I
262 | ; http 类型
263 | ;vmess=example.com:80, method=chacha20-poly1305, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs=http, obfs-host=bing.com, obfs-uri=/resource/file, fast-open=false, udp-relay=false, server_check_url=http://www.apple.com/generate_204, tag=vmess-http
264 | ; tcp 类型
265 | ;vmess=vmess-a.example.com:80, method=aes-128-gcm, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, fast-open=false, udp-relay=false, tag=Sample-J
266 | ;vmess=vmess-b.example.com:80, method=none, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, fast-open=false, udp-relay=false, tag=Sample-K
267 | ; over-tls 类型
268 | ;vmess=vmess-over-tls.example.com:443, method=none, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs-host=vmess-over-tls.example.com, obfs=over-tls, tls-verification=true, fast-open=false, udp-relay=false, tag=Sample-L
269 |
270 | ; http(s) 类型
271 | ;http=http.example.com:80, username=name, password=pwd, fast-open=false, udp-relay=false, tag=http
272 | ;http=https.example.com:443, username=name, password=pwd, over-tls=true, tls-verification=true, tls-host=example.com, tls-verification=true, fast-open=false, udp-relay=false, tag=http-tls
273 |
274 | # socks5 类型节点
275 | ;socks5=example.com:80,fast-open=false, udp-relay=false, tag=socks5-01
276 | ;socks5=example.com:80, username=name, password=pwd, fast-open=false, udp-relay=false, tag=socks5-02
277 | ;socks5=example.com:443, username=name, password=pwd, over-tls=true, tls-host=example.com, tls-verification=true, fast-open=false, udp-relay=false, tag=socks5-tls-01
278 | ;socks5=example.com:443, username=name, password=pwd, over-tls=true, tls-host=example.com, tls-verification=true, tls-pubkey-sha256=eb5ec6684564fd0d04975903ed75342d1b9fdc2096ea54b4cf8caf4740f4ae25, fast-open=false, udp-relay=false, tag=socks5-tls-02
279 |
280 | ; trojan 类型, 支持 over-tls 以及 websockets,支持 UDP
281 | ;trojan=example.com:443, password=pwd, over-tls=true, tls-verification=true, fast-open=false, udp-relay=true, tag=trojan-tls-01
282 | ;trojan=example1.com:443, password=pwd, over-tls=true, tls-host=example.com, tls-verification=true, fast-open=false, udp-relay=false, tag=trojan-tls-02
283 | ;trojan=192.168.1.1:443, password=pwd, obfs=wss, obfs-host=example.com, obfs-uri=/path, udp-relay=true, tag=trojan-wss-05
284 |
285 |
286 | #本地分流规则(对于完全相同的某条规则,本地的将优先生效)
287 | [filter_local]
288 | // 如开启其他设置中的 “分流匹配优化” 选项,则匹配优先级为👇
289 |
290 | // host > host-suffix > host-keyword(wildcard) > geoip = ip-cidr > user-agennt
291 |
292 | // 完整域名匹配
293 | ;host, www.google.com, proxy
294 | // 域名关键词匹配
295 | ;host-keyword, adsite, reject
296 | // 域名后缀匹配
297 | ;host-suffix, googleapis.com, proxy
298 | // 域名通配符匹配
299 | ;host-wildcard, *abc.com, proxy
300 |
301 | // User-Agent 匹配
302 | ;user-agent, ?abc*, proxy
303 |
304 |
305 | //强制分流走蜂窝网络
306 | ;host-suffix, googleapis.com, proxy, force-cellular
307 | //让分流走蜂窝网络跟 Wi-Fi 中的优选结果
308 | ;host-suffix, googleapis.com, proxy, multi-interface
309 | //让分流走蜂窝网络跟 Wi-Fi 中的负载均衡,提供更大带宽出入接口
310 | ;host-suffix, googleapis.com, proxy, multi-interface-balance
311 | //指定分流走特定网络接口
312 | ;host-suffix, googleapis.com, proxy, via-interface=pdp_ip0
313 |
314 | // %TUN% 参数,回传给 Quantumult X 接口,可用于曲线实现代理链功能
315 | ;host-suffix, example.com, ServerA, via-interface=%TUN%
316 | ;ip-cidr, ServerA's IP Range, ServerB
317 |
318 | // ip 规则
319 | ip-cidr, 10.0.0.0/8, direct
320 | ip-cidr, 127.0.0.0/8, direct
321 | ip-cidr, 172.16.0.0/12, direct
322 | ip-cidr, 192.168.0.0/16, direct
323 | ip-cidr, 224.0.0.0/24, direct
324 | //ipv6 规则
325 | ;ip6-cidr, 2001:4860:4860::8888/32, direct
326 | # 已采用 ip 池数据,因此注释掉 geoip cn
327 | ;geoip, cn, direct
328 |
329 | # 1.0.28 build628 后支持如下的geoip库写法(需 GEO-IP 库支持)
330 | ;geoip, netflix, proxy
331 |
332 | #不在上述规则中(远程以及本地)的剩余请求,将走final 指定的节点/策略,这里即是 → 🕹 终极清单, 请根据自己的需求来选择直连或节点、策略
333 | #此为必需规则,仅可修改对应策略组,请勿删除 final
334 | final, 🕹 终极清单
335 |
336 |
337 | #本地复写规则
338 | [rewrite_local]
339 |
340 | #以下为证书&主机名部分
341 | [mitm]
342 | ;以下模块去掉;才生效
343 | ;请自行在 APP 的UI中 生成证书 并安装&信任(💡请按确保照文字提示操作💡)
344 | ;skip_validating_cert = false
345 | ;force_sni_domain_name = false
346 |
347 | //当使用 Quantumult X 在 M 芯片的 Mac 设备上作为局域网网关时,使用下面的参数来 跳过某些特定设备的 mitm 需求
348 | ;skip_src_ip = 192.168.4.50, 92.168.4.51
349 |
350 | // 当多个不同的 TCP 连接(非域名类请求)的目标 IP 不同,但这些连接的 TSL 握手 SNI 字段相同时,如需跳过其中某些连接的 MitM hostname 匹配过程,可使用👇参数。
351 | ;skip_dst_ip = 123.44.55.4
352 |
353 | ;hostname 为主机名,用,分隔多个
354 | ;hostname = *.example.com, *.sample.com
355 |
356 | //以下为证书参数,可去UI界面自行生成并安装证书,会在此生成对应信息
357 | ;passphrase =
358 | ;p12 =
359 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # QuantumultX
2 | > 纯自用,无规则,无维护,无更新
3 |
4 | 仅以下项目可能会更新维护:
5 |
6 | 1⃣️ Quantumult X 资源解析器:
7 |
8 |
9 | https://github.com/KOP-XIAO/QuantumultX/blob/master/Scripts/resource-parser.js
10 |
11 |
12 |
13 | 有bug请反馈 [@Shawn_Parser_Bot](https://t.me/Shawn_Parser_Bot)
14 |
15 | 更新请关注 tg 频道 https://t.me/QuanX_API
16 |
17 |
18 |
19 | 觉得有帮助可以请喝咖啡:
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Scripts/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/Scripts/.DS_Store
--------------------------------------------------------------------------------
/Scripts/Cron-Switch.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"流媒体定时切换合集 @Shawn",
3 | "description":"Crontab Script Gallery by Shawn",
4 | "task":[
5 | "0 8 * * * https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-ytb.js, tag=YouTube 定时切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/YouTube_Letter.png, enabled=true",
6 | "1 8 * * * https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-nf.js, tag=Netflix 定时切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Netflix_Letter.png, enabled=true",
7 | "2 8 * * * https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-disneyplus.js, tag=Disneyᐩ 定时切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true",
8 | "3 8 * * * https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-google.js, tag=Google 送中定时切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Google.png, enabled=true",
9 | ]
10 | }
--------------------------------------------------------------------------------
/Scripts/IPCheck.js:
--------------------------------------------------------------------------------
1 |
2 | // if ($response.statusCode != 200) {
3 | // $done(Null);
4 | // }
5 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
6 |
7 | function getRandomInt(max) {
8 | return Math.floor(Math.random() * Math.floor(max));
9 | }
10 |
11 | function ValidCheck(para) {
12 | if(para) {
13 | return para
14 | } else
15 | {
16 | return emojis[getRandomInt(emojis.length)]
17 | }
18 | }
19 |
20 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]])
21 | var body = $response.body;
22 | var obj = JSON.parse(body);
23 | var title = flags.get(obj['countryCode']) + ' '+ obj['country'];
24 | var subtitle =''+ValidCheck(obj['city'])+'-'+'('+obj['org']+')'+'';
25 | var ip = obj['query'];
26 | var description = obj['country'] + '-' +ValidCheck(obj['city']) + '\n' + obj['org'] + '\n'+obj['ipName']+ '\n' + obj['query'];
27 |
28 | $done({title, subtitle, ip, description});
29 |
--------------------------------------------------------------------------------
/Scripts/IPConfig.js:
--------------------------------------------------------------------------------
1 | // if ($response.statusCode != 200) {
2 | // $done(Null);
3 | // }
4 |
5 | // var body = $response.body;
6 | // var obj = JSON.parse(body);
7 |
8 | if ($response.statusCode != 200) {
9 | $done(Null);
10 | }
11 |
12 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
13 |
14 | function getRandomInt(max) {
15 | return Math.floor(Math.random() * Math.floor(max));
16 | }
17 |
18 | function ValidCheck(para) {
19 | if(para) {
20 | return para
21 | } else
22 | {
23 | return emojis[getRandomInt(emojis.length)]
24 | }
25 | }
26 |
27 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]])
28 | var body = $response.body;
29 | var obj = JSON.parse(body);
30 | var title = flags.get(obj['country_iso']) + ' '+ obj['country'];
31 | var subtitle =''+ValidCheck(obj['city'])+'-'+'('+obj['asn_org']+')'+'';
32 | var ip = obj['ip'];
33 | var description = obj['country'] + '-' +ValidCheck(obj['city']) + '\n' + obj['asn'] + '\n' + obj['asn_org']+ '\n' + obj['ip'];
34 |
35 | $done({title, subtitle, ip, description});
36 |
--------------------------------------------------------------------------------
/Scripts/IPCustom.js:
--------------------------------------------------------------------------------
1 | // if ($response.statusCode != 200) {
2 | // $done(Null);
3 | // }
4 |
5 | // var body = $response.body;
6 | // var obj = JSON.parse(body);
7 |
8 | if ($response.statusCode != 200) {
9 | $done(Null);
10 | }
11 |
12 | function getRandomInt(max) {
13 | return Math.floor(Math.random() * Math.floor(max));
14 | }
15 |
16 | const foods = ['🍺','🍩','🍭','🦴','🥮','🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🍓', '🍈', '🍒', '🍑', '🥭', '🍅', '🥑']
17 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
18 |
19 | var body = $response.body;
20 | var obj = JSON.parse(body);
21 | var title = emojis[getRandomInt(emojis.length)] +obj['country']+ '-' +obj['city']+ foods[getRandomInt(foods.length)];
22 | var subtitle =''+ obj['isp']+ '('+obj['ipType']+')';
23 | var ip = obj['query'];
24 | var description = obj['country'] + '-' + obj['city'] + '\n' + obj['isp'] + '\n' + obj['ipType']+ '\n' + ip;
25 |
26 | $done({title, subtitle, ip, description});
27 |
--------------------------------------------------------------------------------
/Scripts/IPInfo.js:
--------------------------------------------------------------------------------
1 | // if ($response.statusCode != 200) {
2 | // $done(Null);
3 | // }
4 |
5 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
6 |
7 | function getRandomInt(max) {
8 | return Math.floor(Math.random() * Math.floor(max));
9 | }
10 |
11 | function ValidCheck(para) {
12 | if(para) {
13 | return para
14 | } else
15 | {
16 | return emojis[getRandomInt(emojis.length)]
17 | }
18 | }
19 |
20 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]])
21 | var body = $response.body;
22 | //$notify("TEST","test",body);
23 | //var bd=body.split('\n')[1];
24 | var obj = JSON.parse(body);
25 | var title =flags.get(obj['country_code']) + ' '+ obj['country_name'];
26 | var subtitle =''+ValidCheck(obj['city'])+'-'+'('+ValidCheck(obj['continent_name'])+')'+'';
27 | var ip = obj['ip'];
28 | var description = obj['country_name'] + '-' +ValidCheck(obj['city']) + '\n' + obj['type'] + '\n' + obj['ip'];
29 | $done({title, subtitle, ip, description});
30 |
--------------------------------------------------------------------------------
/Scripts/IP_API.js:
--------------------------------------------------------------------------------
1 | if ($response.statusCode != 200) {
2 | $done(null);
3 | }
4 |
5 | const emojis = [
6 | "🆘",
7 | "🈲",
8 | "⚠️",
9 | "🔞",
10 | "📵",
11 | "🚦",
12 | "🏖",
13 | "🖥",
14 | "📺",
15 | "🐧",
16 | "🐬",
17 | "🦉",
18 | "🍄",
19 | "⛳️",
20 | "🚴",
21 | "🤑",
22 | "👽",
23 | "🤖",
24 | "🎃",
25 | "👺",
26 | "👁",
27 | "🐶",
28 | "🐼",
29 | "🐌",
30 | "👥",
31 | ];
32 | var city0 = "高谭市";
33 | var isp0 = "Cross-GFW.org";
34 | function getRandomInt(max) {
35 | return Math.floor(Math.random() * Math.floor(max));
36 | }
37 |
38 | function City_ValidCheck(para) {
39 | if (para) {
40 | return para;
41 | } else {
42 | return city0;
43 | //emojis[getRandomInt(emojis.length)]
44 | }
45 | }
46 |
47 | function ISP_ValidCheck(para) {
48 | if (para) {
49 | return para;
50 | } else {
51 | return isp0;
52 | //emojis[getRandomInt(emojis.length)]
53 | }
54 | }
55 |
56 | function Area_check(para) {
57 | if (para == "中华民国") {
58 | return "台湾";
59 | } else {
60 | return para;
61 | }
62 | }
63 |
64 | var flags = new Map([
65 | ["AC", "🇦🇨"],
66 | ["AE", "🇦🇪"],
67 | ["AF", "🇦🇫"],
68 | ["AI", "🇦🇮"],
69 | ["AL", "🇦🇱"],
70 | ["AQ", "🇦🇶"],
71 | ["AR", "🇦🇷"],
72 | ["AS", "🇦🇸"],
73 | ["AT", "🇦🇹"],
74 | ["AU", "🇦🇺"],
75 | ["AW", "🇦🇼"],
76 | ["AX", "🇦🇽"],
77 | ["AZ", "🇦🇿"],
78 | ["BA", "🇧🇦"],
79 | ["BB", "🇧🇧"],
80 | ["BD", "🇧🇩"],
81 | ["BE", "🇧🇪"],
82 | ["BF", "🇧🇫"],
83 | ["BG", "🇧🇬"],
84 | ["BH", "🇧🇭"],
85 | ["BI", "🇧🇮"],
86 | ["BJ", "🇧🇯"],
87 | ["BM", "🇧🇲"],
88 | ["BN", "🇧🇳"],
89 | ["BO", "🇧🇴"],
90 | ["BR", "🇧🇷"],
91 | ["BS", "🇧🇸"],
92 | ["BT", "🇧🇹"],
93 | ["BV", "🇧🇻"],
94 | ["BW", "🇧🇼"],
95 | ["BY", "🇧🇾"],
96 | ["BZ", "🇧🇿"],
97 | ["CA", "🇨🇦"],
98 | ["CF", "🇨🇫"],
99 | ["CH", "🇨🇭"],
100 | ["CK", "🇨🇰"],
101 | ["CL", "🇨🇱"],
102 | ["CM", "🇨🇲"],
103 | ["CN", "🇨🇳"],
104 | ["CO", "🇨🇴"],
105 | ["CP", "🇨🇵"],
106 | ["CR", "🇨🇷"],
107 | ["CU", "🇨🇺"],
108 | ["CV", "🇨🇻"],
109 | ["CW", "🇨🇼"],
110 | ["CX", "🇨🇽"],
111 | ["CY", "🇨🇾"],
112 | ["CZ", "🇨🇿"],
113 | ["DE", "🇩🇪"],
114 | ["DG", "🇩🇬"],
115 | ["DJ", "🇩🇯"],
116 | ["DK", "🇩🇰"],
117 | ["DM", "🇩🇲"],
118 | ["DO", "🇩🇴"],
119 | ["DZ", "🇩🇿"],
120 | ["EA", "🇪🇦"],
121 | ["EC", "🇪🇨"],
122 | ["EE", "🇪🇪"],
123 | ["EG", "🇪🇬"],
124 | ["EH", "🇪🇭"],
125 | ["ER", "🇪🇷"],
126 | ["ES", "🇪🇸"],
127 | ["ET", "🇪🇹"],
128 | ["EU", "🇪🇺"],
129 | ["FI", "🇫🇮"],
130 | ["FJ", "🇫🇯"],
131 | ["FK", "🇫🇰"],
132 | ["FM", "🇫🇲"],
133 | ["FO", "🇫🇴"],
134 | ["FR", "🇫🇷"],
135 | ["GA", "🇬🇦"],
136 | ["GB", "🇬🇧"],
137 | ["HK", "🇭🇰"],
138 | ["HU", "🇭🇺"],
139 | ["ID", "🇮🇩"],
140 | ["IE", "🇮🇪"],
141 | ["IL", "🇮🇱"],
142 | ["IM", "🇮🇲"],
143 | ["IN", "🇮🇳"],
144 | ["IS", "🇮🇸"],
145 | ["IT", "🇮🇹"],
146 | ["JP", "🇯🇵"],
147 | ["KR", "🇰🇷"],
148 | ["LU", "🇱🇺"],
149 | ["MO", "🇲🇴"],
150 | ["MX", "🇲🇽"],
151 | ["MY", "🇲🇾"],
152 | ["NL", "🇳🇱"],
153 | ["PH", "🇵🇭"],
154 | ["RO", "🇷🇴"],
155 | ["RS", "🇷🇸"],
156 | ["RU", "🇷🇺"],
157 | ["RW", "🇷🇼"],
158 | ["SA", "🇸🇦"],
159 | ["SB", "🇸🇧"],
160 | ["SC", "🇸🇨"],
161 | ["SD", "🇸🇩"],
162 | ["SE", "🇸🇪"],
163 | ["SG", "🇸🇬"],
164 | ["TH", "🇹🇭"],
165 | ["TN", "🇹🇳"],
166 | ["TO", "🇹🇴"],
167 | ["TR", "🇹🇷"],
168 | ["TV", "🇹🇻"],
169 | ["TW", "🇨🇳"],
170 | ["UK", "🇬🇧"],
171 | ["UM", "🇺🇲"],
172 | ["US", "🇺🇸"],
173 | ["UY", "🇺🇾"],
174 | ["UZ", "🇺🇿"],
175 | ["VA", "🇻🇦"],
176 | ["VE", "🇻🇪"],
177 | ["VG", "🇻🇬"],
178 | ["VI", "🇻🇮"],
179 | ["VN", "🇻🇳"],
180 | ["ZA", "🇿🇦"],
181 | ["UA", "🇺🇦"],
182 | ["MD", "🇲🇩"],
183 | ["AD", "🇦🇩"],
184 | ["AM", "🇦🇲"],
185 | ["AO", "🇦🇴"],
186 | ["KP", "🇰🇵"],
187 | ["KY", "🇰🇾"],
188 | ["KZ", "🇰🇿"],
189 | ["🇱🇦", "LA"],
190 | ["NZ", "🇳🇿"],
191 | ["PK", "🇵🇰"],
192 | ["NO", "🇳🇴"],
193 | ["PT", "🇵🇹"],
194 | ["PL", "🇵🇱"],
195 | ["GR", "🇬🇷"],
196 | ["NG", "🇳🇬"],
197 | ["MV", "🇲🇻"],
198 | ["KH", "🇰🇭"],
199 | ["LA", "🇱🇦"],
200 | ["GU", "🇬🇺"],
201 | ["MN", "🇲🇳"],
202 | ["JO", "🇯🇴"],
203 | ["IR", "🇮🇷"],
204 | ["OM", "🇴🇲"],
205 | ["PS", "🇵🇸"],
206 | ["NP", "🇳🇵"],
207 | ["LB", "🇱🇧"],
208 | ["IQ", "🇮🇶"],
209 | ["SY", "🇸🇾"],
210 | ["QA", "🇶🇦"],
211 | ["GE", "🇬🇪"],
212 | ["LK", "🇱🇰"],
213 | ["KG", "🇰🇬"],
214 | ["ME", "🇲🇪"],
215 | ["LT", "🇱🇹"],
216 | ["MT", "🇲🇹"],
217 | ["MC", "🇲🇨"],
218 | ["HR", "🇭🇷"],
219 | ["MK", "🇲🇰"],
220 | ["LV", "🇱🇻"],
221 | ["SK", "🇸🇰"],
222 | ["GI", "🇬🇮"],
223 | ["SM", "🇸🇲"],
224 | ["LI", "🇱🇮"],
225 | ["RE", "🇷🇪"],
226 | ["PA", "🇵🇦"],
227 | ["GL", "🇬🇱"],
228 | ["PE", "🇵🇪"],
229 | ["PY", "🇵🇾"],
230 | ["JM", "🇯🇲"],
231 | ["SR", "🇸🇷"],
232 | ["GT", "🇬🇹"],
233 | ["PR", "🇵🇷"],
234 | ["HN", "🇭🇳"],
235 | ["NI", "🇳🇮"],
236 | ["GH", "🇬🇭"],
237 | ["MA", "🇲🇦"],
238 | ["LY", "🇱🇾"],
239 | ["KE", "🇰🇪"],
240 | ["MU", "🇲🇺"],
241 | ["TL", "🇹🇱"],
242 | ["SI", "🇸🇮"],
243 | ["GF", "🇬🇫"],
244 | ["TG", "🇹🇬"],
245 | ]);
246 |
247 | var body = $response.body;
248 | var obj = JSON.parse(body);
249 | var title = flags.get(obj["countryCode"]) + " " + City_ValidCheck(obj["city"]); //+Area_check(obj['country']);
250 | var subtitle = ISP_ValidCheck(obj["org"] || obj.as);
251 | var ip = obj["query"];
252 | var description =
253 | "服务商:" +
254 | obj["isp"] +
255 | "\n" +
256 | "地区:" +
257 | City_ValidCheck(obj["regionName"]) +
258 | "\n" +
259 | "IP:" +
260 | obj["query"] +
261 | "\n" +
262 | "时区:" +
263 | obj["timezone"];
264 | $done({ title, subtitle, ip, description });
265 |
--------------------------------------------------------------------------------
/Scripts/IP_bili.js:
--------------------------------------------------------------------------------
1 | if ($response.statusCode != 200) {
2 | $done(null);
3 | }
4 |
5 | console.log("haha")
6 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
7 | var city0 = "高谭市";
8 | var isp0 = "Cross-GFW.org";
9 | function getRandomInt(max) {
10 | return Math.floor(Math.random() * Math.floor(max));
11 | }
12 |
13 | function City_ValidCheck(para) {
14 | if(para) {
15 | if (para.length<7) {
16 | return para
17 | } else {
18 | return para.slice(0,6)
19 | }
20 |
21 | } else
22 | {
23 | return city0
24 | //emojis[getRandomInt(emojis.length)]
25 | }
26 | }
27 |
28 | function ISP_ValidCheck(para) {
29 | if(para) {
30 | return para
31 | } else
32 | {
33 | return isp0
34 | //emojis[getRandomInt(emojis.length)]
35 | }
36 | }
37 |
38 | function Area_check(para) {
39 | if(para=="中华民国"){
40 | return "台湾"
41 | } else
42 | {
43 | return para
44 | }
45 | }
46 |
47 | var flags = new Map([ [ "巴基斯坦" , "🇵🇰" ] ,[ "乌克兰" , "🇺🇦" ] ,[ "新西兰" , "🇳🇿" ] ,[ "南非" , "🇦🇫" ] , [ "安吉拉" , "🇦🇮" ] , [ "阿尔巴尼亚" , "🇦🇱" ] , [ "亚美尼亚" , "🇦🇲" ] , [ "南极洲" , "🇦🇶" ] , [ "阿根廷" , "🇦🇷" ] , [ "美属萨尼亚" , "🇦🇸" ] , [ "奥地利" , "🇦🇹" ] , [ "澳大利亚" , "🇦🇺" ] , [ "阿鲁巴" , "🇦🇼" ] , [ "奥兰" , "🇦🇽" ] , [ "阿塞拜疆" , "🇦🇿" ] , [ "巴巴多斯" , "🇧🇧" ] , [ "孟加拉" , "🇧🇩" ] , [ "比利时" , "🇧🇪" ] , [ "布基纳法索" , "🇧🇫" ] , [ "保加利亚" , "🇧🇬" ] , [ "巴林" , "🇧🇭" ] , [ "布隆迪" , "🇧🇮" ] , [ "贝宁" , "🇧🇯" ] , [ "百慕大" , "🇧🇲" ] , [ "文莱" , "🇧🇳" ] , [ "玻利维亚" , "🇧🇴" ] , [ "巴西" , "🇧🇷" ] , [ "巴哈马" , "🇧🇸" ] , [ "不丹" , "🇧🇹" ] , [ "挪威" , "🇧🇻" ] , [ "博茨瓦纳" , "🇧🇼" ] , [ "白俄罗斯" , "🇧🇾" ] , [ "伯利兹" , "🇧🇿" ] , [ "加拿大" , "🇨🇦" ] , [ "中非共和国" , "🇨🇫" ] , [ "瑞士" , "🇨🇭" ] , [ "库克群岛" , "🇨🇰" ] , [ "智利" , "🇨🇱" ] , [ "喀麦隆" , "🇨🇲" ] , [ "中国" , "🇨🇳" ] , [ "哥伦比亚" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "哥斯达黎加" , "🇨🇷" ] , [ "古巴" , "🇨🇺" ] , [ "佛得角" , "🇨🇻" ] , [ "库拉索" , "🇨🇼" ] , [ "圣诞岛" , "🇨🇽" ] , [ "塞浦路斯" , "🇨🇾" ] , [ "捷克" , "🇨🇿" ] , [ "德国" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "吉布提" , "🇩🇯" ] , [ "丹麦" , "🇩🇰" ] , [ "多米尼克" , "🇩🇲" ] , [ "多米尼加" , "🇩🇴" ] , [ "阿尔及利亚" , "🇩🇿" ] , [ "西班牙" , "🇪🇦" ] , [ "厄瓜多尔" , "🇪🇨" ] , [ "爱沙尼亚" , "🇪🇪" ] , [ "埃及" , "🇪🇬" ] , [ "西撒哈拉" , "🇪🇭" ] , [ "厄立特里亚" , "🇪🇷" ] , [ "西班牙" , "🇪🇸" ] , [ "埃塞俄比亚" , "🇪🇹" ] , [ "欧盟" , "🇪🇺" ] , [ "芬兰" , "🇫🇮" ] , [ "斐济" , "🇫🇯" ] , [ "福克兰群岛" , "🇫🇰" ] , [ "密克罗尼西亚联邦" , "🇫🇲" ] , [ "法罗群岛" , "🇫🇴" ] , [ "法国" , "🇫🇷" ] , [ "加蓬" , "🇬🇦" ] , [ "英国" , "🇬🇧" ] , [ "香港" , "🇭🇰" ] ,["匈牙利","🇭🇺"], [ "印度尼西亚" , "🇮🇩" ] , [ "爱尔兰" , "🇮🇪" ] , [ "以色列" , "🇮🇱" ] , [ "曼岛" , "🇮🇲" ] , [ "印度" , "🇮🇳" ] , [ "冰岛" , "🇮🇸" ] , [ "意大利" , "🇮🇹" ] , [ "日本" , "🇯🇵" ] , [ "韩国" , "🇰🇷" ] , [ "卢森堡" , "🇱🇺" ] , [ "澳门" , "🇲🇴" ] , [ "墨西哥" , "🇲🇽" ] , [ "马来西亚" , "🇲🇾" ] , [ "荷兰" , "🇳🇱" ] , [ "菲律宾" , "🇵🇭" ] , [ "罗马尼亚" , "🇷🇴" ] , [ "塞尔维亚" , "🇷🇸" ] , [ "俄罗斯" , "🇷🇺" ] , [ "卢旺达" , "🇷🇼" ] , [ "沙特阿拉伯" , "🇸🇦" ] , [ "所罗门群岛" , "🇸🇧" ] , [ "塞舌尔" , "🇸🇨" ] , [ "苏丹" , "🇸🇩" ] , [ "瑞典" , "🇸🇪" ] , [ "新加坡" , "🇸🇬" ] , [ "泰国" , "🇹🇭" ] , [ "突尼西亚" , "🇹🇳" ] , [ "汤加" , "🇹🇴" ] , [ "土耳其" , "🇹🇷" ] , [ "图瓦卢" , "🇹🇻" ] , [ "台湾" , "🇨🇳" ] , [ "英国" , "🇬🇧" ] , [ "美属离岛" , "🇺🇲" ] , [ "美国" , "🇺🇸" ] , [ "乌拉圭" , "🇺🇾" ] , [ "乌兹别克" , "🇺🇿" ] , [ "梵蒂冈" , "🇻🇦" ] , [ "委内瑞拉" , "🇻🇪" ] , [ "英属维京群岛" , "🇻🇬" ] , [ "美属维京群岛" , "🇻🇮" ] , [ "越南" , "🇻🇳" ] , [ "南非" , "🇿🇦"], ["马恩岛", "🇮🇲"],["波斯尼亚和黑塞哥维那","🇧🇦"],["阿联酋","🇦🇪"]])
48 | var body = $response.body;
49 | var obj = JSON.parse(body)["data"];
50 | var emoji = flags.get(obj['country'])? flags.get(obj['country']):"🏴☠️"
51 | emoji=City_ValidCheck(obj['province']) == "香港"? "🇭🇰️":emoji
52 | emoji=City_ValidCheck(obj['province']) == "澳门"? "️🇲🇴️":emoji
53 | emoji=City_ValidCheck(obj['province']) == "台湾"? "️️🇹🇼":emoji
54 | var title = emoji + "" + '「'+ City_ValidCheck(obj['province'])+"」";//+Area_check(obj['country']);
55 | var subtitle = ""+ ISP_ValidCheck(obj['isp']).toUpperCase() + " ™"+ " ➠ "+ obj['country'];
56 | var ip = obj['addr'];
57 | var description = '服务商:'+obj['isp'] + '\n'+'定位: [' +obj["latitude"]+","+obj["longitude"]+"]"+ '\n' + 'IP:'+ obj['addr'] + '\n' +'时区:'+ obj['timezone'];
58 | $done({title, subtitle, ip, description});
59 |
--------------------------------------------------------------------------------
/Scripts/IP_bili_cn.js:
--------------------------------------------------------------------------------
1 | if ($response.statusCode != 200) {
2 | $done(null);
3 | }
4 |
5 | const emojis= ['🆘','🈲','⚠️','🔞','📵','🚦','🏖','🖥','📺','🐧','🐬','🦉','🍄','⛳️','🚴','🤑','👽','🤖','🎃', '👺', '👁', '🐶', '🐼','🐌', '👥']
6 | var city0 = "高谭市";
7 | var isp0 = "Cross-GFW.org";
8 | function getRandomInt(max) {
9 | return Math.floor(Math.random() * Math.floor(max));
10 | }
11 |
12 | function City_ValidCheck(para) {
13 | if(para) {
14 | if (para.length<6) {
15 | return para
16 | } else {
17 | return para.slice(0,5)
18 | }
19 |
20 | } else
21 | {
22 | return city0
23 | //emojis[getRandomInt(emojis.length)]
24 | }
25 | }
26 |
27 | function ISP_ValidCheck(para) {
28 | if(para) {
29 | return para
30 | } else
31 | {
32 | return isp0
33 | //emojis[getRandomInt(emojis.length)]
34 | }
35 | }
36 |
37 | function Area_check(para) {
38 | if(para=="中华民国"){
39 | return "台湾"
40 | } else
41 | {
42 | return para
43 | }
44 | }
45 |
46 | var flags = new Map([ [ "巴基斯坦" , "🇵🇰" ] ,[ "乌克兰" , "🇺🇦" ] ,[ "新西兰" , "🇳🇿" ] ,[ "南非" , "🇦🇫" ] , [ "安吉拉" , "🇦🇮" ] , [ "阿尔巴尼亚" , "🇦🇱" ] , [ "亚美尼亚" , "🇦🇲" ] , [ "南极洲" , "🇦🇶" ] , [ "阿根廷" , "🇦🇷" ] , [ "美属萨尼亚" , "🇦🇸" ] , [ "奥地利" , "🇦🇹" ] , [ "澳大利亚" , "🇦🇺" ] , [ "阿鲁巴" , "🇦🇼" ] , [ "奥兰" , "🇦🇽" ] , [ "阿塞拜疆" , "🇦🇿" ] , [ "巴巴多斯" , "🇧🇧" ] , [ "孟加拉" , "🇧🇩" ] , [ "比利时" , "🇧🇪" ] , [ "布基纳法索" , "🇧🇫" ] , [ "保加利亚" , "🇧🇬" ] , [ "巴林" , "🇧🇭" ] , [ "布隆迪" , "🇧🇮" ] , [ "贝宁" , "🇧🇯" ] , [ "百慕大" , "🇧🇲" ] , [ "文莱" , "🇧🇳" ] , [ "玻利维亚" , "🇧🇴" ] , [ "巴西" , "🇧🇷" ] , [ "巴哈马" , "🇧🇸" ] , [ "不丹" , "🇧🇹" ] , [ "挪威" , "🇧🇻" ] , [ "博茨瓦纳" , "🇧🇼" ] , [ "白俄罗斯" , "🇧🇾" ] , [ "伯利兹" , "🇧🇿" ] , [ "加拿大" , "🇨🇦" ] , [ "中非共和国" , "🇨🇫" ] , [ "瑞士" , "🇨🇭" ] , [ "库克群岛" , "🇨🇰" ] , [ "智利" , "🇨🇱" ] , [ "喀麦隆" , "🇨🇲" ] , [ "中国" , "🇨🇳" ] , [ "哥伦比亚" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "哥斯达黎加" , "🇨🇷" ] , [ "古巴" , "🇨🇺" ] , [ "佛得角" , "🇨🇻" ] , [ "库拉索" , "🇨🇼" ] , [ "圣诞岛" , "🇨🇽" ] , [ "塞浦路斯" , "🇨🇾" ] , [ "捷克" , "🇨🇿" ] , [ "德国" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "吉布提" , "🇩🇯" ] , [ "丹麦" , "🇩🇰" ] , [ "多米尼克" , "🇩🇲" ] , [ "多米尼加" , "🇩🇴" ] , [ "阿尔及利亚" , "🇩🇿" ] , [ "西班牙" , "🇪🇦" ] , [ "厄瓜多尔" , "🇪🇨" ] , [ "爱沙尼亚" , "🇪🇪" ] , [ "埃及" , "🇪🇬" ] , [ "西撒哈拉" , "🇪🇭" ] , [ "厄立特里亚" , "🇪🇷" ] , [ "西班牙" , "🇪🇸" ] , [ "埃塞俄比亚" , "🇪🇹" ] , [ "欧盟" , "🇪🇺" ] , [ "芬兰" , "🇫🇮" ] , [ "斐济" , "🇫🇯" ] , [ "福克兰群岛" , "🇫🇰" ] , [ "密克罗尼西亚联邦" , "🇫🇲" ] , [ "法罗群岛" , "🇫🇴" ] , [ "法国" , "🇫🇷" ] , [ "加蓬" , "🇬🇦" ] , [ "英国" , "🇬🇧" ] , [ "香港" , "🇭🇰" ] ,["匈牙利","🇭🇺"], [ "印度尼西亚" , "🇮🇩" ] , [ "爱尔兰" , "🇮🇪" ] , [ "以色列" , "🇮🇱" ] , [ "曼岛" , "🇮🇲" ] , [ "印度" , "🇮🇳" ] , [ "冰岛" , "🇮🇸" ] , [ "意大利" , "🇮🇹" ] , [ "日本" , "🇯🇵" ] , [ "韩国" , "🇰🇷" ] , [ "卢森堡" , "🇱🇺" ] , [ "澳门" , "🇲🇴" ] , [ "墨西哥" , "🇲🇽" ] , [ "马来西亚" , "🇲🇾" ] , [ "荷兰" , "🇳🇱" ] , [ "菲律宾" , "🇵🇭" ] , [ "罗马尼亚" , "🇷🇴" ] , [ "塞尔维亚" , "🇷🇸" ] , [ "俄罗斯" , "🇷🇺" ] , [ "卢旺达" , "🇷🇼" ] , [ "沙特阿拉伯" , "🇸🇦" ] , [ "所罗门群岛" , "🇸🇧" ] , [ "塞舌尔" , "🇸🇨" ] , [ "苏丹" , "🇸🇩" ] , [ "瑞典" , "🇸🇪" ] , [ "新加坡" , "🇸🇬" ] , [ "泰国" , "🇹🇭" ] , [ "突尼西亚" , "🇹🇳" ] , [ "汤加" , "🇹🇴" ] , [ "土耳其" , "🇹🇷" ] , [ "图瓦卢" , "🇹🇻" ] , [ "台湾" , "🇨🇳" ] , [ "英国" , "🇬🇧" ] , [ "美属离岛" , "🇺🇲" ] , [ "美国" , "🇺🇸" ] , [ "乌拉圭" , "🇺🇾" ] , [ "乌兹别克" , "🇺🇿" ] , [ "梵蒂冈" , "🇻🇦" ] , [ "委内瑞拉" , "🇻🇪" ] , [ "英属维京群岛" , "🇻🇬" ] , [ "美属维京群岛" , "🇻🇮" ] , [ "越南" , "🇻🇳" ] , [ "南非" , "🇿🇦"], ["马恩岛", "🇮🇲"],["波斯尼亚和黑塞哥维那","🇧🇦"],["阿联酋","🇦🇪"]])
47 |
48 |
49 | var body = $response.body;
50 | var obj = JSON.parse(body)["data"];
51 | var emoji = flags.get(obj['country'])? flags.get(obj['country']):"🏴☠️"
52 | emoji=City_ValidCheck(obj['province']) == "香港"? "🇭🇰️":emoji
53 | emoji=City_ValidCheck(obj['province']) == "澳门"? "️🇲🇴️":emoji
54 | // emoji=City_ValidCheck(obj['province']) == "台湾"? "️️🇹🇼":emoji
55 | var title = emoji +'『'+ City_ValidCheck(obj['province'])+'』';//+Area_check(obj['country']);
56 | var subtitle = "💋 "+ ISP_ValidCheck(obj['isp']) + " ➠ "+ obj['country'];
57 | var ip = obj['addr'];
58 | var description = '服务商:'+obj['isp'] + '\n'+'定位: [' +obj["latitude"]+","+obj["longitude"]+"]"+ '\n' + 'IP:'+ obj['addr'] + '\n' +'时区:'+ obj['timezone'];
59 | $done({title, subtitle, ip, description});
60 |
--------------------------------------------------------------------------------
/Scripts/TaskGallery.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"HotKids",
3 | "description":"Crontab Task Gallery",
4 | "task":[
5 | {"config":"0 12 * * 1 https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/epic.js, tag=cookie重写, img-url=https://raw.githubusercontent.com/crossutility/Quantumult-X/master/quantumult-x.png","addons":"https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/GetCookie.conf"},
6 | "0 12 * * 1 https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/epic.js, tag=每周 Epic 游戏限免, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/epic.png",
7 | "0 9 * * * https://raw.githubusercontent.com/evilbutcher/Quantumult_X/master/check_in/idaily/idaily.js, tag=iDaily·每日环球视野, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/iDaily.png",
8 | "0 9 * * * https://raw.githubusercontent.com/zZPiglet/Task/master/MovieCalendar/MovieCalendar.js, tag=豆瓣·电影日历, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/douban.png",
9 | "0 10 * * * https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/exchange.js, tag=每日汇率, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/exchange.png",
10 | "30 23 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/10010/unicom_checkin.js, tag=中国联通, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/10010.png",
11 | "50 23 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/didichuxing/didi_checkin.js, tag=滴滴出行, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/didi.png",
12 | "0 9 * * * https://raw.githubusercontent.com/HotKids/Rules/master/Script/xiami.js, tag=虾米音乐, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/xiami.png",
13 | "0 6 * * * https://raw.githubusercontent.com/lowking/Scripts/master/sony/sonyClub.js, tag=My SONY Club, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/sony.png",
14 | "0 6 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/wps/wps.js, tag=WPS, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/wps.png",
15 | "0 7 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/famijia/famijia_checkin.js, tag=全家, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/famijia.png",
16 | "0 1,6 * * * https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js, tag=京东, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jd.png",
17 | "10 6 * * 1 https://gitee.com/lxk0301/scripts/raw/master/jd_unsubscribe.js, tag=取关京东店铺及商品, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jd.png",
18 | "30 9 * * * https://raw.githubusercontent.com/toulanboy/scripts/master/jd_price_detect/jd_price_detect.js, tag=京东价格提醒, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jd.png",
19 | "30 9 * * * https://raw.githubusercontent.com/id77/QuantumultX/master/task/jdWuLiu.js, tag=京东派件提醒, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jd.png",
20 | "30 9 * * * https://gitee.com/lxk0301/scripts/raw/master/jd_bean_change.js, tag=京豆变动通知, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jd.png",
21 | "0 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/suning/suning.js, tag=苏宁易购, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/suning.png",
22 | "1 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/meituan/meituan.js, tag=美团, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/meituan.png",
23 | "2 5 * * * https://raw.githubusercontent.com/zZPiglet/Task/master/elem/elemCheckIn.js, tag=饿了么, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/ele.png",
24 | "3 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/jddj/jddj.js, tag=京东到家, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/jddj.png",
25 | "4 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/mcdd/mcdd.js, tag=叮咚买菜, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/ddmc.png",
26 | "4 5 * * * https://raw.githubusercontent.com/iepngs/Script/master/dingdong/index.js, tag=叮咚农场, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/ddmc.png",
27 | "5 5 * * * https://raw.githubusercontent.com/NobyDa/Script/master/iQIYI-DailyBonus/iQIYI.js, tag=爱奇艺, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/iqiyi.png",
28 | "6 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/videoqq/videoqq.js, tag=腾讯视频, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/tencentvideo.png",
29 | "7 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/mgtv/mgtv.js, tag=芒果 TV, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/mgtv.png",
30 | "8 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/bilibili/bilibili.js, tag=哔哩哔哩, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/bilibili.png",
31 | "8 5 * * 1 https://raw.githubusercontent.com/chavyleung/scripts/master/bilibili/bilibili.silver2coin.js, tag=B站银瓜子转硬币, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/bilibiliblue.png",
32 | "9 5 * * * https://raw.githubusercontent.com/NobyDa/Script/master/Bilibili-DailyBonus/Manga.js, tag=哔哩哔哩漫画, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/bilibilimanga.png",
33 | "10 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/neteasemusic/quanx/neteasemusic.js, tag=网易云音乐, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/neteasemusic.png",
34 | "11 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/ximalaya/ximalaya.js, tag=喜马拉雅, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/himalaya.png",
35 | "12 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/zimuzu/zimuzu.js, tag=人人字幕组, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/zimuzu.png",
36 | "13 5 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/smzdm/smzdm_checkin.js, tag=什么值得买, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/smzdm.png",
37 | "13 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/smzdm/quanx/smzdm.js, tag=什么值得买, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/smzdm.png",
38 | "14 5 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/manmanbuy/manmanbuy_checkin.js, tag=慢慢买, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/manmanbuy.png",
39 | "15 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.js, tag=顺丰速运, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/sfexpress.png",
40 | "16 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/duokan/duokan.js, tag=多看阅读, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/duokan.png",
41 | "17 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/dbsj/dbsj.js, tag=豆瓣时间, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/douban.png",
42 | "18 5 * * * https://raw.githubusercontent.com/zZPiglet/Task/master/Haidilao/Haidilao.js, tag=海底捞, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/hdl.png",
43 | "19 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/pagoda/pagoda.js, tag=百果园, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/pagoda.png",
44 | "20 5 * * * https://raw.githubusercontent.com/zZPiglet/Task/master/Blibee/Blibee.js, tag=便利蜂, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/Blibee.png",
45 | "21 5 * * * https://raw.githubusercontent.com/zZPiglet/Task/master/umetrip/umetrip.js,tag=航旅纵横, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/UmeTrip.png",
46 | "22 5 * * * https://raw.githubusercontent.com/barrym-chen/Script/master/ctrip/ctrip.js, tag=携程 App, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/ctrip.png",
47 | "22 5 * * * https://raw.githubusercontent.com/barrym-chen/Script/master/ctrip_wx/ct_sign.js, tag=携程 小程序, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/ctrip.png",
48 | "23 5 * * * https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/hellobike/hellobike.js, tag=哈啰出行, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/hellobike.png",
49 | "24 5 * * * https://ooxx.be/js/jegotrip.js, tag=无忧行, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/JegoTrip.png",
50 | "25 5 * * * https://raw.githubusercontent.com/chavyleung/scripts/master/flyertea/flyertea.js, tag=飞客茶馆, img-url=https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/Images/Task/flyertea.png"
51 | ]
52 | }
53 |
--------------------------------------------------------------------------------
/Scripts/UI-Action.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"UI 脚本合集",
3 | "description":"UI-Interaction Script Gallery by Shawn",
4 | "task":[
5 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/streaming-ui-check.js, tag=流媒体-解锁查询, img-url=checkmark.seal.system, enabled=true",
6 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/geo_location.js, tag=GeoIP 查询, img-url=location.fill.viewfinder.system",
7 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/ytb-ui-check.js, tag=YouTube 查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/YouTube_Letter.png, enabled=true",
8 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/nf-ui-check.js, tag=Netflix 查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Netflix_Letter.png, enabled=true",
9 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/disney-ui-check.js, tag=Disneyᐩ 查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true",
10 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-ytb.js, tag=YouTube 切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/YouTube_Letter.png, enabled=true",
11 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-nf.js, tag=Netflix 切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Netflix_Letter.png, enabled=true",
12 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-disneyplus.js, tag=Disneyᐩ 切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true",
13 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-google.js, tag=Google 切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Google.png, enabled=true",
14 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/traffic-check.js, tag=策略流量查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Download.png, enabled=true",
15 | "event-network network-direct.js, tag=Direct 策略切换, img-url=switch.2.system",
16 | "event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/server-info-plus.js, tag=节点信息Plus, img-url=info.bubble.system.system"
17 | ]
18 | }
--------------------------------------------------------------------------------
/Scripts/disney-ui-check.js:
--------------------------------------------------------------------------------
1 | /***
2 |
3 | Thanks to & modified from
4 | 1. https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js
5 | 2. https://github.com/AtlantisGawrGura/Quantumult-X-Scripts/blob/main/media.js
6 | 3. https://github.com/CoiaPrant/MediaUnlock_Test/blob/main/check.sh
7 |
8 |
9 | For Quantumult-X 598+ ONLY!!
10 |
11 | 2022-07-23
12 |
13 | [task_local]
14 |
15 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/disney-ui-check.js, tag=Disney⁺ 查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true"
16 |
17 | @XIAO_KOP
18 |
19 | **/
20 |
21 | const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
22 |
23 | // 即将登陆
24 | const STATUS_COMING = 2
25 | // 支持解锁
26 | const STATUS_AVAILABLE = 1
27 | // 不支持解锁
28 | const STATUS_NOT_AVAILABLE = 0
29 | // 检测超时
30 | const STATUS_TIMEOUT = -1
31 | // 检测异常
32 | const STATUS_ERROR = -2
33 |
34 | var opts = {
35 | policy: $environment.params
36 | };
37 |
38 |
39 | let result = {
40 | "title": ' 🎬 Disney⁺ 解锁查询',
41 | "status": '⚠️ 检测失败,请重试',
42 | //"Google": "Google 定位: 检测失败,请重试"
43 |
44 | }
45 |
46 | ;(async () => {
47 | let { region, status } = await testDisneyPlus()
48 | console.log(`testDisneyPlus: region=${region}, status=${status}`)
49 | if (status==STATUS_COMING) {
50 | //console.log(1)
51 | result["status"] = "🚦 即将登陆 ➟ "+'⟦'+flags.get(region.toUpperCase())+"⟧"
52 | } else if (status==STATUS_AVAILABLE){
53 | //console.log(2)
54 | result["status"] = "✅ 已支持 ➟ "+'⟦'+flags.get(region.toUpperCase())+"⟧"
55 | console.log(result["status"])
56 | } else if (status==STATUS_NOT_AVAILABLE) {
57 | //console.log(3)
58 | result["status"] = "🛑 不支持 "
59 | }
60 | cnt = `
` +'----------------------'+result["status"]+'----------------------'+$environment.params + `
` 61 | $done({"title":result["title"],"htmlMessage":cnt}) 62 | })() 63 | .finally(() => $done({"title":result["title"],"htmlMessage":``+'----------------------'+result["status"]+'----------------------'+$environment.params + `
`})); 64 | 65 | 66 | async function testDisneyPlus() { 67 | try { 68 | let { region, cnbl } = await Promise.race([testHomePage(), timeout(7000)]) 69 | console.log(`homepage: region=${region}, cnbl=${cnbl}`) 70 | // 即将登陆 71 | // if (cnbl == 2) { 72 | // return { region, status: STATUS_COMING } 73 | // } 74 | let { countryCode, inSupportedLocation, accessToken } = await Promise.race([getLocationInfo(), timeout(7000)]) 75 | console.log(`getLocationInfo: countryCode=${countryCode}, inSupportedLocation=${inSupportedLocation}`) 76 | 77 | region = countryCode ?? region 78 | console.log( "region:"+region) 79 | // 即将登陆 80 | if (inSupportedLocation === false || inSupportedLocation === 'false') { 81 | return { region, status: STATUS_COMING } 82 | } else { 83 | // 支持解锁 84 | return { region, status: STATUS_AVAILABLE } 85 | } 86 | 87 | let support = await Promise.race([testPublicGraphqlAPI(accessToken), timeout(7000)]) 88 | if (!support) { 89 | return { status: STATUS_NOT_AVAILABLE } 90 | } 91 | // 支持解锁 92 | return { region, status: STATUS_AVAILABLE } 93 | 94 | } catch (error) { 95 | console.log("error:"+error) 96 | 97 | // 不支持解锁 98 | if (error === 'Not Available') { 99 | console.log("不支持") 100 | return { status: STATUS_NOT_AVAILABLE } 101 | } 102 | 103 | // 检测超时 104 | if (error === 'Timeout') { 105 | return { status: STATUS_TIMEOUT } 106 | } 107 | 108 | return { status: STATUS_ERROR } 109 | } 110 | 111 | } 112 | 113 | function getLocationInfo() { 114 | return new Promise((resolve, reject) => { 115 | let opts0 = { 116 | url: 'https://disney.api.edge.bamgrid.com/graph/v1/device/graphql', 117 | method: "POST", 118 | opts: opts, 119 | headers: { 120 | 'Accept-Language': 'en', 121 | "Authorization": 'ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84', 122 | 'Content-Type': 'application/json', 123 | 'User-Agent': UA, 124 | }, 125 | body: JSON.stringify({ 126 | query: 'mutation registerDevice($input: RegisterDeviceInput!) { registerDevice(registerDevice: $input) { grant { grantType assertion } } }', 127 | variables: { 128 | input: { 129 | applicationRuntime: 'chrome', 130 | attributes: { 131 | browserName: 'chrome', 132 | browserVersion: '94.0.4606', 133 | manufacturer: 'apple', 134 | model: null, 135 | operatingSystem: 'macintosh', 136 | operatingSystemVersion: '10.15.7', 137 | osDeviceIds: [], 138 | }, 139 | deviceFamily: 'browser', 140 | deviceLanguage: 'en', 141 | deviceProfile: 'macosx', 142 | }, 143 | }, 144 | }), 145 | } 146 | 147 | $task.fetch(opts0).then(response => { 148 | let data = response.body 149 | console.log("locationinfo:"+response.statusCode) 150 | if (response.statusCode !== 200) { 151 | console.log('getLocationInfo: ' + data) 152 | reject('Not Available') 153 | return 154 | } else { 155 | let { 156 | token: { accessToken }, 157 | session: { 158 | inSupportedLocation, 159 | location: { countryCode }, 160 | }, 161 | } = JSON.parse(data)?.extensions?.sdk 162 | resolve({ inSupportedLocation, countryCode, accessToken }) 163 | } 164 | }, reason => { 165 | reject('Error') 166 | return 167 | }) 168 | }) 169 | } 170 | 171 | function testPublicGraphqlAPI(accessToken) { 172 | return new Promise((resolve, reject) => { 173 | let opts = { 174 | url: 'https://disney.api.edge.bamgrid.com/v1/public/graphql', 175 | headers: { 176 | 'Accept-Language': 'en', 177 | Authorization: accessToken, 178 | 'Content-Type': 'application/json', 179 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', 180 | }, 181 | body: JSON.stringify({ 182 | query: 183 | 'query($preferredLanguages: [String!]!, $version: String) {globalization(version: $version) { uiLanguage(preferredLanguages: $preferredLanguages) }}', 184 | variables: { version: '1.5.0', preferredLanguages: ['en'] }, 185 | }), 186 | } 187 | 188 | $task.fetch(opts).then( response => { 189 | 190 | resolve(response.status === 200) 191 | }, reason => { 192 | reject('Error') 193 | return 194 | }) 195 | }) 196 | } 197 | 198 | function testHomePage() { 199 | return new Promise((resolve, reject) => { 200 | let opts0 = { 201 | url: 'https://www.disneyplus.com/', 202 | opts: opts, 203 | headers: { 204 | 'Accept-Language': 'en', 205 | 'User-Agent': UA, 206 | }, 207 | } 208 | $task.fetch(opts0).then(response => { 209 | let data = response.body 210 | //console.log("homepage"+response.statusCode) 211 | if (response.statusCode !== 200 || data.indexOf('not available in your') !== -1) { 212 | reject('Not Available') 213 | return 214 | } else { 215 | let match = data.match(/Region: ([A-Za-z]{2})[\s\S]*?CNBL: ([12])/) 216 | if (!match) { 217 | resolve({ region: '', cnbl: '' }) 218 | return 219 | } else { 220 | let region = match[1] 221 | let cnbl = match[2] 222 | //console.log("homepage"+region+cnbl) 223 | resolve({ region, cnbl }) 224 | } 225 | } 226 | }, reason => { 227 | reject('Error') 228 | return 229 | }) 230 | }) 231 | } 232 | 233 | function timeout(delay = 5000) { 234 | return new Promise((resolve, reject) => { 235 | setTimeout(() => { 236 | reject('Timeout') 237 | }, delay) 238 | }) 239 | } 240 | 241 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 242 | -------------------------------------------------------------------------------- /Scripts/emoji.json: -------------------------------------------------------------------------------- 1 | { 2 | "🏳️🌈": ["流量", "套餐", "剩余", "重置", "到期" , "时间", "应急", "过期", "Bandwidth", "expire", "Traffic", "Reset", "Until", "traffic"], 3 | "🇦🇩": ["安道尔", "AD", "AND", "Andorra"], 4 | "🇦🇿": ["阿塞拜疆", "AZ", "AZE", "Azerbaijan"], 5 | "🇦🇹": ["奥地利", "AT", "AUT", "Austria", "维也纳"], 6 | "🇦🇺": ["澳大利亚", "AU", "AUS", "Australia", "Sydney", "澳洲", "墨尔本", "悉尼" ,"土澳", "京澳", "廣澳", "滬澳", "沪澳", "广澳"], 7 | "🇧🇪": ["比利时", "BE", "BEL", "比利時", "Belgium"], 8 | "🇧🇬": ["保加利亚", "BGL", "保加利亞", "Bulgaria"], 9 | "🇵🇰": ["巴基斯坦", "PAK", "PK", "Pakistan", "PAKISTAN"], 10 | "🇧🇭": ["巴林", "BHR", "BH", "Bahrain"], 11 | "🇵🇾": ["巴拉圭", "PRY", "PY", "Paraguay"], 12 | "🇰🇭": ["柬埔寨", "KHM", "KH", "Cambodia"], 13 | "🇺🇦": ["烏克蘭","乌克兰", "UKR", "UA", "Ukraine"], 14 | "🇺🇿": ["乌兹别克斯坦", "烏茲別克斯坦", "UZB", "UZ", "Uzbekistan"], 15 | "🇭🇷": ["克罗地亚", "HR", "HRV", "克羅地亞", "Croatia"], 16 | "🇨🇦": ["加拿大", "CA", "Canada", "CANADA", "CAN", "Waterloo", "蒙特利尔", "温哥华", "楓葉", "枫叶", "滑铁卢", "多伦多"], 17 | "🇨🇭": ["瑞士", "苏黎世", "CHE", "CH", "Switzerland"], 18 | "🇳🇬": ["尼日利亚", "NG", "NGA", "尼日利亞","拉各斯", "Nigeria"], 19 | "🇨🇿": ["捷克", "CZE", "CZ", "Czechia"], 20 | "🇸🇰": ["斯洛伐克", "SK", "SVK", "Slovakia"], 21 | "🇸🇮": ["斯洛文尼亚", "斯洛文尼亞", "SVN", "SI", "Slovenia"], 22 | "🇦🇲": ["亚美尼亚", "亞美尼亞", "ARM", "AM", "Armenia"], 23 | "🇷🇸": ["塞尔维亚", "RS", "SRB", "RS_", "塞爾維亞", "Seville", "Sevilla"], 24 | "🇲🇩": ["摩尔多瓦", "MDA", "MD", "摩爾多瓦", "Moldova"], 25 | "🇩🇪": ["德国", "DEU", "DE", "DE-", "DE_", "German", "GERMAN", "德國", "法兰克福","京德","滬德","廣德","沪德","广德"], 26 | "🇩🇰": ["丹麦", "DNK", "DK", "丹麥", "Denmark"], 27 | "🇪🇸": ["西班牙", "ESP", "ES", "Spain"], 28 | "🇪🇺": ["欧洲", "EU", "欧盟", "欧罗巴", "European"], 29 | "🇫🇮": ["芬兰", "FIN", "FI", "Finland", "芬蘭", "赫尔辛基"], 30 | "🇫🇷": ["法国", "FRA", "FR", "France", "法國", "巴黎"], 31 | "🇷🇪": ["留尼汪", "REU", "RE", "留尼旺", "Réunion", "Reunion"], 32 | "🇨🇼": ["库拉索", "庫拉索", "Curaçao"], 33 | "🇬🇧": ["英国", "GBR", "UK", "England", "United Kingdom", "伦敦", "英"], 34 | "🇲🇴": ["澳门", "MAC", "MO", "Macao","Macau", "澳門", "CTM"], 35 | "🇰🇿": ["哈萨克斯坦", "KAZ", "KZ", "哈薩克斯坦", "Kazakhstan"], 36 | "🇱🇦": ["老挝", "LAO", "LA", "Laos"], 37 | "🇭🇺": ["匈牙利", "HUN", "HU", "Hungary"], 38 | "🇱🇹": ["立陶宛", "LTU", "LT", "Lithuania"], 39 | "🇱🇰": ["斯里兰卡", "LKA", "LK", "斯里蘭卡", "Sri Lanka"], 40 | "🇧🇾": ["白俄罗斯", "BLR", "BY", "白俄羅斯", "White Russia", "Republic of Belarus", "Belarus"], 41 | "🇷🇺": ["俄罗斯", "RUS", "RU", "RU-", "RU_", "RUS", "Russia", "毛子", "俄国", "俄羅斯", "伯力", "莫斯科", "圣彼得堡", "西伯利亚", "新西伯利亚", "京俄", "杭俄","廣俄","滬俄","广俄","沪俄"], 42 | "🇸🇬": ["新加坡", "SGP", "SG", "Singapore","SINGAPORE", "狮城", "沪新", "京新", "泉新", "穗新", "深新", "杭新", "广新","廣新","滬新"], 43 | "🇺🇸": ["美国", "USA", "US", "America", "United States", "美", "京美", "波特兰", "达拉斯", "俄勒冈", "凤凰城", "费利蒙", "硅谷", "矽谷", "拉斯维加斯", "洛杉矶", "圣何塞", "圣荷西", "圣克拉拉", "西雅图", "芝加哥", "沪美", "哥伦布", "纽约"], 44 | "🇹🇼": ["台湾", "TWN", "TW", "Taiwan","TAIWAN", "台北", "台中", "新北", "彰化", "CHT", "台", "HINET"], 45 | "🇮🇩": ["印度尼西亚", "IDN", "ID", "Indonesia", "印尼", "雅加达"], 46 | "🇮🇪": ["爱尔兰", "IRL", "IE", "Ireland", "IRELAND", "愛爾蘭", "都柏林"], 47 | "🇮🇱": ["以色列", "ISR", "IL", "Israel"], 48 | "🇮🇳": ["印度", "IND", "IN", "India", "INDIA", "孟买", "Mumbai"], 49 | "🇮🇸": ["冰岛", "ISL", "IS", "冰島", "Iceland"], 50 | "🇰🇵": ["朝鲜", "PRK", "KP", "North Korea"], 51 | "🇰🇷": ["韩国", "KOR", "KR", "Korea", "首尔", "韩", "韓","春川"], 52 | "🇬🇭": ["加纳", "GHA", "GH", "Ghana"], 53 | "🇱🇺": ["卢森堡", "LUX", "LU", "Luxembourg"], 54 | "🇱🇻": ["拉脱维亚", "LVA", "LA", "Latvia", "Latvija"], 55 | "🇧🇩": ["孟加拉", "BGD", "BD", "Bengal"], 56 | "🇲🇽️": ["墨西哥", "MEX", "MX", "Mexico", "MEXICO"], 57 | "🇲🇾": ["马来西亚", "MYS", "MY", "Malaysia","MALAYSIA", "马来", "馬來", "大马", "大馬", "馬來西亞", "吉隆坡"], 58 | "🇳🇱": ["荷兰", "NLD", "NL", "Netherlands", "荷蘭", "尼德蘭", "阿姆斯特丹"], 59 | "🇵🇭": ["菲律宾", "PHL", "PH", "Philippines", "菲律賓"], 60 | "🇷🇴": ["罗马尼亚", "ROU", "RO", "Rumania"], 61 | "🇸🇦": ["沙特", "SAU", "SA", "利雅得", "Saudi Arabia", "Saudi"], 62 | "🇸🇪": ["瑞典", "SWE", "SE", "Sweden"], 63 | "🇹🇭": ["泰国", "THA", "TH", "Thailand", "泰國", "曼谷"], 64 | "🇹🇷": ["土耳其", "TUR", "TR", "TR-", "TR_", "Turkey", "伊斯坦布尔"], 65 | "🇻🇳": ["越南", "VNM", "VN", "胡志明市", "Vietnam"], 66 | "🇮🇹": ["意大利", "ITA", "IT", "Italy", "Nachash", "米兰", "義大利"], 67 | "🇿🇦": ["南非", "ZAF", "ZA", "South Africa", "Johannesburg"], 68 | "🇦🇪": ["阿联酋", "ARE", "AE", "United Arab Emirates", "迪拜", "Dubai"], 69 | "🇧🇷": ["巴西", "BRA", "BR", "Brazil", "圣保罗"], 70 | "🇯🇵": ["日本", "JPN", "JP", "Japan","JAPAN", "东京", "大阪", "埼玉", "京日", "苏日", "沪日", "穗日", "川日", "中日", "泉日", "杭日", "深日", "辽日", "广日", "Tokyo"], 71 | "🇦🇷": ["阿根廷", "ARG", "AR", "Argentina"], 72 | "🇳🇴": ["挪威", "NOR", "Norway", "NO"], 73 | "🇵🇱": ["波兰", "PL", "POL", "波蘭", "Poland"], 74 | "🇨🇱": ["智利", "CHL", "CL", "Chile", "CHILE"], 75 | "🇳🇿": ["新西兰", "新西蘭", "NZL", "NZ", "New Zealand"], 76 | "🇬🇷": ["希腊", "GRC", "GR", "希臘", "Greece"], 77 | "🇪🇬": ["埃及", "EGY", "EG", "Egypt"], 78 | "🇮🇲": ["马恩岛", "IMN", "IM", "馬恩島", "Isle of Man", "Mannin"], 79 | "🇵🇹": ["葡萄牙", "PRT", "PT", "Portugal"], 80 | "🇲🇳": ["蒙古", "MNG", "MN", "Mongolia"], 81 | "🇵🇪": ["秘鲁", "PER", "PE", "祕魯", "Peru"], 82 | "🇨🇴": ["哥伦比亚", "COL", "CO", "Colombia"], 83 | "🇪🇪": ["爱沙尼亚", "EST", "EE", "Estonia"], 84 | "🇱🇾": ["利比亚", "LBY", "LY", "Libya"], 85 | "🇲🇰": ["马其顿", "MKD", "MK", "馬其頓", "Macedonia"], 86 | "🇲🇹": ["马耳他", "MLT", "MT", "Malta"], 87 | "🇻🇪": ["委内瑞拉", "VEN", "VE", "Venezuela"], 88 | "🇧🇦": ["波黑共和国", "BIH", "BA", "波黑", "Bosnia and Herzegovina"], 89 | "🇬🇪": ["格魯吉亞", "GEO", "GE", "格鲁吉亚", "Georgia"], 90 | "🇦🇱": ["阿爾巴尼亞", "ALB", "AL", "阿尔巴尼亚", "Albania"], 91 | "🇨🇾": ["塞浦路斯", "CYP", "CY", "Cyprus"], 92 | "🇨🇷": ["哥斯达黎加", "CRI", "CR", "Costa Rica"], 93 | "🇹🇳": ["突尼斯", "TUN", "TN", "Tunisia"], 94 | "🇵🇦": ["巴拿马", "PAN", "PA", "巴拿馬", "Panama"], 95 | "🇮🇷": ["伊朗", "IRN", "IR", "Iran"], 96 | "🇯🇴": ["约旦", "JOR", "JO", "約旦", "Jordan"], 97 | "🇺🇾": ["乌拉圭", "URY", "UY", "烏拉圭", "Uruguay"], 98 | "🇰🇪": ["肯尼亚", "KEN", "KE", "肯尼亞", "Kenya"], 99 | "🇰🇬": ["吉尔吉斯坦", "KGZ", "KG", "吉尔吉斯斯坦", "Kyrghyzstan"], 100 | "🇳🇵": ["尼泊尔", "NPL", "NP", "Nepal"], 101 | "🇽🇰": ["科索沃", "XKS", "XK", "Kosovo"], 102 | "🇲🇦": ["摩洛哥", "MAR", "MA", "Morocco"], 103 | "🇪🇨": ["厄瓜多尔", "ECU", "EC", "Ecuador"], 104 | "🇲🇺": ["毛里求斯", "MUS", "MU", "Mauritius"], 105 | "🇵🇷": ["波多黎各", "PRI", "PR", "Puerto Rico"], 106 | "🇭🇰": ["香港", "HKG", "HK", "Hongkong", "Hong Kong", "HongKong", "HONG KONG", "深港", "沪港", "呼港", "HKT", "HKBN", "HGC", "WTT", "CMI", "穗港", "京港", "港"], 107 | "🇨🇳": ["CN", "China", "回国", "中国","中國", "江苏", "北京", "上海", "广州", "深圳", "杭州", "徐州", "青岛", "宁波", "镇江", "back"], 108 | "🇱🇧": ["黎巴嫩", "LBN", "LB", "Lebanon"], 109 | "🇧🇳": ["文莱", "BRN", "BN", "Negara Brunei Darussalam"], 110 | "🌏": ["亚洲","Asia"] 111 | } 112 | -------------------------------------------------------------------------------- /Scripts/geo_location.js: -------------------------------------------------------------------------------- 1 | /*** 2 | [task_local] 3 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/geo_location.js, tag=GeoIP 查询, img-url=location.fill.viewfinder.system 4 | 5 | @XIAO_KOP 6 | 7 | **/ 8 | 9 | // var content= `` + response.body + `
`; 10 | 11 | var url = "https://api.ip.sb/geoip" 12 | var opts = { 13 | policy: $environment.params 14 | }; 15 | var myRequest = { 16 | url: url, 17 | opts: opts, 18 | timeout: 4000 19 | }; 20 | 21 | var message = "" 22 | const paras = ["ip","isp","country_code","city"] 23 | const paran = ["IP","ISP","地区","城市"] 24 | $task.fetch(myRequest).then(response => { 25 | message = response? json2info(response.body,paras) : "" 26 | $done({"title": " 🔎 IP.SB 查询结果", "htmlMessage": message}); 27 | }, reason => { 28 | message = "🛑 查询超时" 29 | message = `` + message + `
` 30 | $done({"title": "🔎 IP.SB 查询结果", "htmlMessage": message}); 31 | }) 32 | 33 | 34 | function json2info(cnt,paras) { 35 | var res = "------------------------------" 36 | cnt =JSON.parse(cnt) 37 | for (i=0;i` + res + `
` 43 | return res 44 | } 45 | 46 | 47 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 48 | -------------------------------------------------------------------------------- /Scripts/network-direct.js: -------------------------------------------------------------------------------- 1 | /** 2 | 根据 Wi-Fi 或数据网络,将特定策略组(reject除外)切换成 direct 3 | 不影响 reject 去广告以及部分特殊需求 4 | js文件放置在Quantumultx/Scripts 目录下,并自行修改 Dlist/Dpolicy/Cpolicy 5 | 2023-03-24 by Shawn 6 | 7 | [task_local] 8 | event-network network-direct.js, tag = Direct 策略切换, img-url = switch.2.system 9 | 10 | //$notify("当前网络",$environment.ssid? $environment.ssid : String($environment.cellular.carrierName)) 11 | // The $prefs is for persistent store: $prefs.valueForKey(key), $prefs.setValueForKey(value, key), $prefs.removeValueForKey(key), $prefs.removeAllValues(). 12 | 13 | **/ 14 | 15 | 16 | console.log(JSON.stringify($environment)) 17 | var cname = $environment.ssid? $environment.ssid : String($environment.cellular.carrierName) 18 | var icon= $environment.ssid? "🛜": "📶" 19 | 20 | // 直连名单,Wi-Fi SSID 或 cellular.carrierName 移动运营商名 21 | let Dlist = ["CMHK", "3hk", "Alumni","GFW-wifi2"] 22 | // 直连 ssid 下需要切换 direct 的 策略组,请自行设定(仅限 static 类型,且需其子策略组内已包含 direct) 23 | let dt = "direct" 24 | let Dpolicy = {"Pr0xy": dt, "Final": dt, "Apple": dt, "YouTube" : dt} 25 | // 其它非直连 ssid 下默认的策略组,需自行设定 26 | let Cpolicy = {"Pr0xy": "香港", "Final": "Pr0xy", "Apple": "香港", "YouTube" : "香港"} 27 | 28 | // 需要重置时设置为1,并手动执行一次 29 | let Preset = 0 30 | 31 | var date = new Date(); // 创建一个Date对象 32 | var year = date.getFullYear(); // 获取年份 33 | var month = date.getMonth() + 1; // 获取月份(注意:月份从0开始,需要加1) 34 | var day = date.getDate(); // 获取日期 35 | var hours = date.getHours(); // 获取小时 36 | var minutes = date.getMinutes(); // 获取分钟 37 | var seconds = date.getSeconds(); // 获取秒钟 38 | 39 | // 格式化日期字符串,例如:2023-02-22 14:34:16 40 | var formattedDate = year + '-' + addZero(month) + '-' + addZero(day) + ' ' + addZero(hours) + ':' + addZero(minutes) + ':' + addZero(seconds); 41 | 42 | // 补零函数,用于将单个数字补零,例如:将2转换为02 43 | function addZero(num) { 44 | if (num < 10) { 45 | return '0' + num; 46 | } else { 47 | return num; 48 | } 49 | } 50 | 51 | // get policy state 52 | const message_Get = { 53 | action: "get_policy_state" 54 | }; 55 | 56 | //pssid="" 57 | let pname= $prefs.valueForKey("pssid") || "NULL-SSID" 58 | pname = Preset==1? "RESET-SSID":pname 59 | // read ssids 持久化 60 | if (pname=="NULL-SSID") { 61 | console.log("\n初次使用记录") 62 | $prefs.setValueForKey(cname, "pssid") 63 | } else if(pname == "RESET-SSID") { 64 | console.log("\n重置网络记录") 65 | $prefs.setValueForKey(cname, "pssid") 66 | } else { 67 | //console.log("上次记录ssid: ➟ " + $prefs.valueForKey("pssid")) 68 | $prefs.setValueForKey(cname, "pssid") //更新 ssid 69 | } 70 | 71 | function Display(JsonList) { 72 | let rt = JSON.stringify(JsonList).replace(/{|}|"/g,"").replace(/:/g," ➟ ").replace(/,/g,"\n") 73 | return rt 74 | } 75 | 76 | console.log("--------------------------------\n\n🚦 已设定在以下 ⟱ 网络中切换成直连 \n"+Dlist.join(" ⇔ ")+"\n--------------------------------\n") 77 | console.log("🤖 时间:"+formattedDate+"\n👥 本次网络变化: "+pname+ " ➟ "+cname+"\n--------------------------------\n") 78 | 79 | const message_Set = { 80 | action: "set_policy_state", 81 | content: Dpolicy 82 | }; 83 | 84 | // restore 策略组设置 85 | const message_Set1 = { 86 | action: "set_policy_state", 87 | content: Cpolicy 88 | }; 89 | 90 | if(Dlist.indexOf(cname)!=-1 && Dlist.indexOf(pname)==-1) { //需要切换成 direct的场景 91 | $configuration.sendMessage(message_Get).then(resolve => { 92 | if (resolve.error) { 93 | console.log(resolve.error); 94 | } 95 | if (resolve.ret) { 96 | let output=JSON.stringify(resolve.ret); 97 | //$notify("🎉 当前网络在直连名单中",cname, output) 98 | } 99 | $configuration.sendMessage(message_Set).then(resolve => { 100 | if (resolve.error) { 101 | console.log(resolve.error); 102 | } 103 | if (resolve.ret) { 104 | let output=JSON.stringify(resolve.ret); 105 | console.log("\n\n🎉 以下策略组已切换到直连\n\n"+Display(Dpolicy)) 106 | $notify(icon+" 当前网络 [ "+ pmame+" ➟ "+cname +" ]", "☑️ 以下策略组已切换到直连", Display(Dpolicy)) 107 | } 108 | $done(); 109 | } 110 | ) 111 | }, reject => { 112 | // Normally will never happen. 113 | $done(); 114 | }); 115 | } else if(Dlist.indexOf(cname)== -1 && Dlist.indexOf(pname)!=-1){ // 需要切换成 默认的场景 116 | $configuration.sendMessage(message_Set1).then(resolve => { 117 | if (resolve.error) { 118 | console.log(resolve.error); 119 | } 120 | if (resolve.ret) { 121 | let output=JSON.stringify(resolve.ret); 122 | console.log("\n\n🔙 已切换回默认策略\n\n"+Display(Cpolicy)) 123 | $notify(icon+" 当前网络 [ " +pname+" ➟ "+ cname+" ]", "🔙 已切换回默认策略",Display(Cpolicy)) 124 | } 125 | $done(); 126 | }, reject => { 127 | // Normally will never happen. 128 | $done(); 129 | }); 130 | } else if(Dlist.indexOf(cname)!= -1 && Dlist.indexOf(pname)!=-1) { 131 | console.log("🎉 无需进行切换,保持直连\n" + "\n🎯 两者均在直连列表中") 132 | console.log("🔘 当前策略:\n"+Display(Dpolicy)) 133 | $done() 134 | } else if(Dlist.indexOf(cname)== -1 && Dlist.indexOf(pname)==-1) { 135 | console.log("⚠️ 无需进行切换,保持默认策略\n" + "\n⚠️ 两者均不在直连列表中\n") 136 | console.log("🔘 当前策略:\n"+Display(Cpolicy)) 137 | $done() 138 | } 139 | 140 | 141 | -------------------------------------------------------------------------------- /Scripts/nf-ui-check.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 4 | 5 | For Quantumult-X 598+ 6 | 7 | [task-local] 8 | 9 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/nf-ui-check.js, tag=Netflix 查询, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Netflix.png, enabled=true 10 | 11 | @XIAO_KOP 12 | 13 | code: 14 | 0 成功 15 | 100 error 未知错误 16 | 101 timeout 测试超时 17 | 102 Not Found 该节点仅支持解锁 Netflix 自制剧 18 | 103 Not Available 该节点未解锁 Netflix 19 | **/ 20 | 21 | const BASE_URL = 'https://www.netflix.com/title/' 22 | 23 | const FILM_ID = 81280792 24 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 25 | const policy_name = "Netflix" //填入你的 netflix 策略组名 26 | 27 | const arrow = "➟" 28 | var output = "" 29 | var opts = { 30 | policy: $environment.params 31 | }; 32 | 33 | 34 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 35 | 36 | 37 | !(async () => { 38 | let result = { 39 | title: ' Netflix 解锁检测', 40 | subtitle: output, 41 | content: '检测失败,请重试', 42 | } 43 | await Promise.race([test(FILM_ID),timeOut(5000)]) 44 | .then((resp) => { 45 | console.log(JSON.stringify(resp, null, 2)); 46 | let code = resp.code; 47 | let region = resp.region; 48 | if(resp.code == 0) { 49 | result['content'] = '该节点完整解锁 Netflix ➟ ⟦'+flags.get(region.toUpperCase())+" 地区⟧"; 50 | } else if (code == 102) { //该节点仅支持解锁 Netflix 自制剧 51 | result['content'] = '该节点仅支持解锁 Netflix 自制剧 ➟ ⟦'+flags.get(region.toUpperCase())+" 地区⟧"; 52 | } else if (code == 103) { //该节点未解锁 Netflix 53 | result['content'] = '该节点未解锁 Netflix'; 54 | } else if (code == 101) { 55 | result['content'] = "测试超时"; 56 | } else { 57 | result['content'] = "未知问题:" +resp.content; 58 | } 59 | 60 | //$notify(result["title"], output, result["content"], link) 61 | 62 | let content = "------------------------------"+""+result["content"] 63 | content = content + "------------------------------"+""+"节点 ➟ " + $environment.params+ "" 64 | content =`` + content + `
` 65 | $done({"title":"Netflix 解锁检测","htmlMessage":content}) 66 | }) 67 | })() 68 | .finally(() => $done()); 69 | 70 | function timeOut(delay) { 71 | return new Promise((resolve, reject) => { 72 | setTimeout(() => { 73 | //reject(new Error('timeout')) 74 | resolve({code: 101, content: "timeout"}) 75 | }, delay) 76 | }) 77 | } 78 | 79 | 80 | function test(filmId) { 81 | return new Promise((resolve, reject) => { 82 | let option = { 83 | url: BASE_URL + filmId, 84 | opts: opts, 85 | headers: { 86 | 'User-Agent': 87 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 88 | }, 89 | } 90 | $task.fetch(option).then (response => { 91 | const region = response.body.match(/"requestCountry":{"id":"(\w\w)/)[1]; 92 | console.log('region -> ' + region) 93 | if (response.statusCode === 404) { 94 | resolve({code: 102, content: "Not Found", region: region}) 95 | return 96 | } 97 | 98 | if (response.statusCode === 403) { 99 | resolve({code: 103, content: "Not Available"}) 100 | return 101 | } 102 | 103 | if (response.statusCode === 200) { 104 | const isPlayable = response.body.match(/"isPlayable":(true|false)/)[1]; 105 | if(isPlayable === 'false') { 106 | resolve({code: 102, content: "Playable is false", region: region}) 107 | } else if (!isPlayable) { 108 | // 为空 109 | resolve({code: 103, content: "Playable is null"}) 110 | } else if (isPlayable === 'true') { 111 | resolve({code: 0, content: "Netflix is Ok", region: region}) 112 | } else { 113 | resolve({code: 100, content: "unkown error", region: region}) 114 | } 115 | return 116 | } 117 | reject({code: 100, content: "Error, http code " + response.statusCode}) 118 | }) 119 | }) 120 | } 121 | -------------------------------------------------------------------------------- /Scripts/nf_ytb_ui-check.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 4 | 5 | For Quantumult-X 598 6 | 7 | 2022-12-16 8 | 9 | [task_local] 10 | 11 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/nf_ytb_ui-check.js, tag=YouTube/Netflix 解锁查询, img-url=checkmark.seal.system, enabled=true 12 | 13 | 14 | 15 | @XIAO_KOP 16 | 17 | **/ 18 | 19 | 20 | const BASE_URL = 'https://www.netflix.com/title/' 21 | const BASE_URL_YTB = "https://www.youtube.com/premium" 22 | 23 | const FILM_ID = 80062035 24 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 25 | const policy_name = "Netflix" //填入你的 netflix 策略组名 26 | 27 | const arrow = "➟" 28 | var output = "" 29 | var opts = { 30 | policy: $environment.params 31 | }; 32 | 33 | 34 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 35 | 36 | 37 | !(async () => { 38 | let result = { 39 | title: '📺 Netflix/YouTube 解锁查询', 40 | content: '----------------------\n\n检测失败,请重试', 41 | content1: '检测失败,请重试' 42 | } 43 | 44 | await Promise.race([test(FILM_ID),timeOut(5000)]) 45 | .then((code) => { 46 | console.log(code) 47 | 48 | if (code === 'Not Available') { 49 | result['content'] = '----------------------\n\n🛑 未支持 Netflix' 50 | //return 51 | //console.log(result) 52 | } else if (code === 'Not Found') { 53 | result['content'] = '----------------------\n\n⚠️ 仅支持 Netflix 自制剧' 54 | //return 55 | } else if (code === "timeout") { 56 | result['content'] = "----------------------\n\n🛑 测试超时" 57 | } else { 58 | result['content'] = '----------------------\n\n✅ 完整支持 Netflix ➟ ⟦'+flags.get(code.toUpperCase())+code.toUpperCase()+"⟧" 59 | } 60 | 61 | return testYTB() 62 | // $notify(result["title"], output, result["content"]+"\n"+result["content1"], link) 63 | // $done({"title":result["title"],"message":result["content"]+"\n"+result["content1"]}) 64 | }) 65 | .then((code) => { 66 | 67 | console.log(code) 68 | if (code === 'Not Available') { 69 | result['content1'] = '⚠️ 未支持 YouTube Premium' 70 | //return 71 | } else if (code === "timeout") { 72 | result['content1'] = "🛑 测试超时" 73 | } else { 74 | result['content1'] = "✅ 支持 YouTube Premium ➟ ⟦"+flags.get(code.toUpperCase())+code.toUpperCase()+"⟧" 75 | } 76 | $done({"title":result["title"],"message":result["content"]+"\n\n"+result["content1"]+'\n\n----------------------\n'+$environment.params}) 77 | 78 | }) 79 | // ) 80 | })() 81 | .finally(() => $done()); 82 | 83 | function timeOut(delay) { 84 | return new Promise((resolve, reject) => { 85 | setTimeout(() => { 86 | //reject(new Error('timeout')) 87 | resolve("timeout") 88 | }, delay) 89 | }) 90 | } 91 | 92 | 93 | function test(filmId) { 94 | return new Promise((resolve, reject) => { 95 | let option = { 96 | url: BASE_URL + filmId, 97 | opts: opts, 98 | timeout: 4000, 99 | headers: { 100 | 'User-Agent': 101 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 102 | }, 103 | } 104 | $task.fetch(option).then (response => { 105 | console.log(response.statusCode) 106 | if (response.statusCode === 404) { 107 | resolve('Not Found') 108 | return 109 | } 110 | 111 | if (response.statusCode === 403) { 112 | resolve('Not Available') 113 | return 114 | } 115 | 116 | if (response.statusCode === 200) { 117 | let url = response.headers['X-Originating-URL'] 118 | let region = url.split('/')[3] 119 | region = region.split('-')[0] 120 | if (region == 'title') { 121 | region = 'us' 122 | } 123 | resolve(region) 124 | return 125 | } 126 | reject('Error') 127 | }, reason => { 128 | resolve("timeout") 129 | return 130 | } 131 | ) 132 | }) 133 | } 134 | 135 | function testYTB() { 136 | return new Promise((resolve, reject) => { 137 | let option = { 138 | url: BASE_URL_YTB, 139 | opts: opts, 140 | timeout: 4000, 141 | headers: { 142 | 'User-Agent': 143 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' 144 | }, 145 | } 146 | $task.fetch(option).then(response=> { 147 | let data = response.body 148 | console.log(response.statusCode) 149 | if (response.statusCode !== 200) { 150 | reject('Error') 151 | return 152 | } 153 | 154 | if (data.indexOf('Premium is not available in your country') !== -1) { 155 | resolve('Not Available') 156 | return 157 | } 158 | //console.log(data.split("countryCode")[1]) 159 | let region = '' 160 | let re = new RegExp('"GL":"(.*?)"', 'gm') 161 | let result = re.exec(data) 162 | if (result != null && result.length === 2) { 163 | region = result[1] 164 | } else if (data.indexOf('www.google.cn') !== -1) { 165 | region = 'CN' 166 | } else { 167 | region = 'US' 168 | } 169 | resolve(region) 170 | }, reason => { 171 | resolve("timeout") 172 | }) 173 | }) 174 | } 175 | -------------------------------------------------------------------------------- /Scripts/nfcheck.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 4 | 5 | For Quantumult-X / [task-local] 6 | 7 | @XIAO_KOP 8 | 9 | **/ 10 | 11 | 12 | const BASE_URL = 'https://www.netflix.com/title/' 13 | 14 | const FILM_ID = 81280792 15 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 16 | const policy_name = "Netflix" //填入你的 netflix 策略组名 17 | 18 | const arrow = "➟" 19 | var output = "" 20 | 21 | var flags = new Map([[ "AC" , "🇦🇨" ] , [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 22 | 23 | 24 | function ReadPolicy(cnt) { 25 | var res = "" 26 | for (var key in cnt) { 27 | if (key == policy_name){ 28 | dd = cnt[key] 29 | res = res + dd.join(arrow) 30 | break 31 | } 32 | } 33 | return res.split(policy_name+arrow)[1] 34 | } 35 | 36 | const message = { 37 | action: "get_policy_state", 38 | //content: dict 39 | 40 | }; 41 | 42 | 43 | $configuration.sendMessage(message).then(resolve => { 44 | if (resolve.error) { 45 | console.log(resolve.error); 46 | } 47 | if (resolve.ret) { 48 | output = ReadPolicy(resolve.ret) 49 | } 50 | }) 51 | 52 | 53 | 54 | !(async () => { 55 | let result = { 56 | title: 'Netflix 解锁检测', 57 | subtitle: output, 58 | content: '检测失败,请重试', 59 | } 60 | await Promise.race([test(FILM_ID),timeOut(5000)]) 61 | .then((code) => { 62 | console.log(code) 63 | 64 | if (code === 'Not Available') { 65 | result['content'] = '该节点未解锁 Netflix' 66 | //return 67 | //console.log(result) 68 | } else if (code === 'Not Found') { 69 | result['content'] = '该节点仅支持解锁 Netflix 自制剧' 70 | //return 71 | } else if (code === "timeout") { 72 | result['content'] = "测试超时" 73 | } else { 74 | result['content'] = '该节点完整解锁 Netflix ➟ ⟦'+flags.get(code.toUpperCase())+" 地区⟧" 75 | } 76 | 77 | $notify(result["title"], output, result["content"], link) 78 | 79 | //console.log(result) 80 | $done() 81 | }) 82 | })() 83 | .finally(() => $.done()); 84 | 85 | function timeOut(delay) { 86 | return new Promise((resolve, reject) => { 87 | setTimeout(() => { 88 | //reject(new Error('timeout')) 89 | resolve("timeout") 90 | }, delay) 91 | }) 92 | } 93 | 94 | function test(filmId) { 95 | return new Promise((resolve, reject) => { 96 | let option = { 97 | url: BASE_URL + filmId, 98 | headers: { 99 | 'User-Agent': 100 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 101 | }, 102 | } 103 | $task.fetch(option).then (response => { 104 | console.log(response.statusCode) 105 | if (response.statusCode === 404) { 106 | resolve('Not Found') 107 | return 108 | } 109 | 110 | if (response.statusCode === 403) { 111 | resolve('Not Available') 112 | return 113 | } 114 | 115 | if (response.statusCode === 200) { 116 | let url = response.headers['X-Originating-URL'] 117 | let region = url.split('/')[3] 118 | region = region.split('-')[0] 119 | if (region == 'title') { 120 | region = 'us' 121 | } 122 | resolve(region) 123 | return 124 | } 125 | reject('Error') 126 | }) 127 | }) 128 | } 129 | -------------------------------------------------------------------------------- /Scripts/server-info-plus.js: -------------------------------------------------------------------------------- 1 | /*** 2 | [task_local] 3 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/server-info-plus.js, tag=节点信息Plus, img-url=info.bubble.system.system 4 | @XIAO_KOP 5 | 2023-04-14 6 | **/ 7 | 8 | // var content= `` + response.body + `
`; 9 | 10 | let base_url = "https://scamalytics.com/ip/" 11 | 12 | var url = "https://api.ip.sb/geoip" 13 | var opts = { 14 | policy: $environment.params 15 | }; 16 | var myRequest = { 17 | url: url, 18 | opts: opts, 19 | timeout: 4000 20 | }; 21 | 22 | var message = "" 23 | const paras = ["ip","isp","country_code","city"] 24 | const paran = ["IP","ISP","地区","城市"] 25 | $task.fetch(myRequest).then(response => { 26 | message = response? json2info(response.body,paras) : "" 27 | let ip = JSON.parse(response.body)["ip"] 28 | var myRequest1 = { 29 | url: base_url+ip, 30 | opts: opts, 31 | timeout: 4000 32 | }; 33 | $task.fetch(myRequest1).then(response => { 34 | message = message + Display(response.body) 35 | console.log("url: "+ base_url+ip+"\n\n"+message) 36 | message = message+ "------------------------------"+""+""+"节点 ➟ " + $environment.params+ "" 37 | message = `` + message + `
` 38 | $done({"title": " 🔎 IP.SB 查询结果", "htmlMessage": message}); 39 | }, reason => { 40 | message = "🛑 查询超时" 41 | message = `` + message + `
` 42 | $done({"title": "🔎 IP.SB 查询结果", "htmlMessage": message}); 43 | }) 44 | }, reason => { 45 | message = "🛑 查询超时" 46 | message = `` + message + `
` 47 | $done({"title": "🔎 IP.SB 查询结果", "htmlMessage": message}); 48 | }) 49 | 50 | function json2info(cnt,paras) { 51 | var res = "------------------------------" 52 | cnt =JSON.parse(cnt) 53 | for (i=0;i` + res + `
` 59 | return res 60 | } 61 | 62 | function Display(cnt) { 63 | let score = cnt.indexOf(`"score":`)!=-1 ? cnt.split(`"score":`)[1].split("\n")[0]: "NA" 64 | score = ""+ "" +"欺诈指数 " + " : " + ""+ ""+ score.replace(/"|,/g,"") +"" 65 | let risk = cnt.indexOf(`"risk":`)!=-1 ? cnt.split(`"risk":`)[1].split("\n")[0] : "NA" 66 | risk = ""+ "" +"风险等级 " + " : " + ""+ ""+ E2C(risk.replace(/"|,/g,"")) +"" 67 | return (score+risk) 68 | } 69 | 70 | //极高风险‼️、高风险⚠️ 和 中风险🟡 低风险✅ 71 | function E2C(cnt){ 72 | res = "NA" 73 | if (cnt.indexOf("very high")!=-1) { 74 | res = "极高风险 ‼️" 75 | } else if(cnt.indexOf("high")!=-1) { 76 | res = "高风险 ⚠️" 77 | } else if(cnt.indexOf("medium")!=-1) { 78 | res = "中风险 🟡" 79 | } else if(nt.indexOf("low")!=-1) { 80 | res = "低风险 ✅" 81 | } 82 | return res 83 | } 84 | 85 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 86 | -------------------------------------------------------------------------------- /Scripts/streaming-ui-check.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from 4 | 1. https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 5 | 2. https://github.com/AtlantisGawrGura/Quantumult-X-Scripts/blob/main/media.js 6 | 3. https://github.com/CoiaPrant/MediaUnlock_Test/blob/main/check.sh 7 | 3. https://github.com/Netflixxp/chatGPT/blob/main/chat.sh 8 | 9 | For Quantumult-X 598+ ONLY!! 10 | 11 | 2023-02-14 12 | 13 | - 支持 ChatGPT 检测 14 | 15 | [task_local] 16 | 17 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/streaming-ui-check.js, tag=流媒体-解锁查询, img-url=checkmark.seal.system, enabled=true 18 | 19 | @XIAO_KOP 20 | 21 | **/ 22 | 23 | const BASE_URL = 'https://www.netflix.com/title/'; 24 | const BASE_URL_YTB = "https://www.youtube.com/premium"; 25 | const BASE_URL_DISNEY = 'https://www.disneyplus.com'; 26 | const BASE_URL_Dazn = "https://startup.core.indazn.com/misl/v5/Startup"; 27 | const BASE_URL_Param = "https://www.paramountplus.com/" 28 | const FILM_ID = 81280792 29 | const BASE_URL_Discovery_token = "https://us1-prod-direct.discoveryplus.com/token?deviceId=d1a4a5d25212400d1e6985984604d740&realm=go&shortlived=true" 30 | const BASE_URL_Discovery = "https://us1-prod-direct.discoveryplus.com/users/me" 31 | const BASE_URL_GPT = 'https://chat.openai.com/' 32 | const Region_URL_GPT = 'https://chat.openai.com/cdn-cgi/trace' 33 | 34 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 35 | const policy_name = "Netflix" //填入你的 netflix 策略组名 36 | 37 | const arrow = " ➟ " 38 | 39 | const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' 40 | 41 | // 即将登陆 42 | const STATUS_COMING = 2 43 | // 支持解锁 44 | const STATUS_AVAILABLE = 1 45 | // 不支持解锁 46 | const STATUS_NOT_AVAILABLE = 0 47 | // 检测超时 48 | const STATUS_TIMEOUT = -1 49 | // 检测异常 50 | const STATUS_ERROR = -2 51 | 52 | var opts = { 53 | policy: $environment.params 54 | }; 55 | 56 | var opts1 = { 57 | policy: $environment.params, 58 | redirection: false 59 | }; 60 | 61 | 62 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 63 | 64 | let result = { 65 | "title": ' 📺 流媒体服务查询', 66 | "YouTube": 'YouTube: 检测失败,请重试 ❗️', 67 | "Netflix": 'Netflix: 检测失败,请重试 ❗️', 68 | "Dazn": "Dazn: 检测失败,请重试 ❗️", 69 | "Disney": "Disneyᐩ: 检测失败,请重试 ❗️", 70 | "Paramount" : "Paramountᐩ: 检测失败,请重试 ❗️", 71 | "Discovery" : "Discoveryᐩ: 检测失败,请重试 ❗️", 72 | "ChatGPT" : "ChatGPT: 检测失败,请重试 ❗️" 73 | //"Google": "Google 定位: 检测失败,请重试" 74 | 75 | } 76 | const message = { 77 | action: "get_policy_state", 78 | content: $environment.params 79 | }; 80 | 81 | ;(async () => { 82 | testYTB() 83 | testDazn() 84 | testParam() 85 | let [{ region, status }] = await Promise.all([testDisneyPlus(),testNf(FILM_ID),testDiscovery(),testChatGPT()]) 86 | console.log("NetFlix Result:"+result["Netflix"]) 87 | console.log(`testDisneyPlus: region=${region}, status=${status}`) 88 | if (status==STATUS_COMING) { 89 | //console.log(1) 90 | result["Disney"] = "Disneyᐩ: 即将登陆 ➟ "+'⟦'+flags.get(region.toUpperCase())+"⟧ ⚠️" 91 | } else if (status==STATUS_AVAILABLE){ 92 | //console.log(2) 93 | result["Disney"] = "Disneyᐩ: 支持 ➟ "+'⟦'+flags.get(region.toUpperCase())+"⟧ 🎉" 94 | console.log(result["Disney"]) 95 | } else if (status==STATUS_NOT_AVAILABLE) { 96 | //console.log(3) 97 | result["Disney"] = "Disneyᐩ: 未支持 🚫 " 98 | } else if (status==STATUS_TIMEOUT) { 99 | result["Disney"] = "Disneyᐩ: 检测超时 🚦 " 100 | } 101 | 102 | let content = "------------------------------"+""+([result["YouTube"],result["Netflix"],result["Disney"],result["Dazn"],result["Paramount"],result["Discovery"],result["ChatGPT"]]).join("") 103 | content = content + "------------------------------"+""+"节点 ➟ " + $environment.params+ "" 104 | content =`` + content + `
` 105 | // cnt = `` +'----------------------'+result["Disney"]+'----------------------'+$environment.params + `
` 106 | $configuration.sendMessage(message).then(resolve => { 107 | if (resolve.error) { 108 | console.log(resolve.error); 109 | $done() 110 | } 111 | if (resolve.ret) { 112 | let output=JSON.stringify(resolve.ret[message.content])? JSON.stringify(resolve.ret[message.content]).replace(/\"|\[|\]/g,"").replace(/\,/g," ➟ ") : $environment.params 113 | let content = "--------------------------------------"+([result["Dazn"],result["Discovery"],result["Paramount"],result["Disney"],result["ChatGPT"],result["Netflix"],result["YouTube"]]).join("") 114 | content = content + "--------------------------------------"+""+"节点 ➟ " + output+ "" 115 | content =`` + content + `
` 116 | //$notify(typeof(output),output) 117 | console.log(output); 118 | $done({"title":result["title"],"htmlMessage":content}) 119 | 120 | } 121 | //$done();| 122 | }, reject => { 123 | // Normally will never happen. 124 | $done(); 125 | }); 126 | //$done({"title":result["title"],"htmlMessage":content}) 127 | })() 128 | .finally(() => { 129 | 130 | $configuration.sendMessage(message).then(resolve => { 131 | if (resolve.error) { 132 | console.log(resolve.error); 133 | $done() 134 | } 135 | if (resolve.ret) { 136 | let output=JSON.stringify(resolve.ret[message.content])? JSON.stringify(resolve.ret[message.content]).replace(/\"|\[|\]/g,"").replace(/\,/g," ➟ ") : $environment.params 137 | let content = "--------------------------------------"+([result["Dazn"],result["Discovery"],result["Paramount"],result["Disney"],result["ChatGPT"],result["Netflix"],result["YouTube"]]).join("") 138 | content = content + "--------------------------------------"+""+"节点 ➟ " + output+ "" 139 | content =`` + content + `
` 140 | //$notify(typeof(output),output) 141 | console.log(output); 142 | $done({"title":result["title"],"htmlMessage":content}) 143 | 144 | } 145 | //$done();| 146 | }, reject => { 147 | // Normally will never happen. 148 | $done(); 149 | }); 150 | 151 | $done({"title":result["title"],"htmlMessage":``+'----------------------'+"🚥 检测异常"+'----------------------'+ output + `
`}) 152 | } 153 | ); 154 | 155 | 156 | async function testDisneyPlus() { 157 | try { 158 | let { region, cnbl } = await Promise.race([testHomePage(), timeout(7000)]) 159 | console.log(`homepage: region=${region}, cnbl=${cnbl}`) 160 | // 即将登陆 161 | // if (cnbl == 2) { 162 | // return { region, status: STATUS_COMING } 163 | // } 164 | let { countryCode, inSupportedLocation, accessToken } = await Promise.race([getLocationInfo(), timeout(7000)]) 165 | console.log(`getLocationInfo: countryCode=${countryCode}, inSupportedLocation=${inSupportedLocation}`) 166 | 167 | region = countryCode ?? region 168 | console.log( "region:"+region) 169 | // 即将登陆 170 | if (inSupportedLocation === false || inSupportedLocation === 'false') { 171 | return { region, status: STATUS_COMING } 172 | } else { 173 | // 支持解锁 174 | return { region, status: STATUS_AVAILABLE } 175 | } 176 | 177 | let support = await Promise.race([testPublicGraphqlAPI(accessToken), timeout(7000)]) 178 | if (!support) { 179 | return { status: STATUS_NOT_AVAILABLE } 180 | } 181 | // 支持解锁 182 | return { region, status: STATUS_AVAILABLE } 183 | 184 | } catch (error) { 185 | console.log("error:"+error) 186 | 187 | // 不支持解锁 188 | if (error === 'Not Available') { 189 | console.log("不支持") 190 | return { status: STATUS_NOT_AVAILABLE } 191 | } 192 | 193 | // 检测超时 194 | if (error === 'Timeout') { 195 | return { status: STATUS_TIMEOUT } 196 | } 197 | 198 | return { status: STATUS_ERROR } 199 | } 200 | 201 | } 202 | 203 | function getLocationInfo() { 204 | return new Promise((resolve, reject) => { 205 | let opts0 = { 206 | url: 'https://disney.api.edge.bamgrid.com/graph/v1/device/graphql', 207 | method: "POST", 208 | opts: opts, 209 | headers: { 210 | 'Accept-Language': 'en', 211 | "Authorization": 'ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84', 212 | 'Content-Type': 'application/json', 213 | 'User-Agent': UA, 214 | }, 215 | body: JSON.stringify({ 216 | query: 'mutation registerDevice($input: RegisterDeviceInput!) { registerDevice(registerDevice: $input) { grant { grantType assertion } } }', 217 | variables: { 218 | input: { 219 | applicationRuntime: 'chrome', 220 | attributes: { 221 | browserName: 'chrome', 222 | browserVersion: '94.0.4606', 223 | manufacturer: 'apple', 224 | model: null, 225 | operatingSystem: 'macintosh', 226 | operatingSystemVersion: '10.15.7', 227 | osDeviceIds: [], 228 | }, 229 | deviceFamily: 'browser', 230 | deviceLanguage: 'en', 231 | deviceProfile: 'macosx', 232 | }, 233 | }, 234 | }), 235 | } 236 | 237 | $task.fetch(opts0).then(response => { 238 | let data = response.body 239 | console.log("locationinfo:"+response.statusCode) 240 | if (response.statusCode !== 200) { 241 | console.log('getLocationInfo: ' + data) 242 | reject('Not Available') 243 | return 244 | } else { 245 | let { 246 | token: { accessToken }, 247 | session: { 248 | inSupportedLocation, 249 | location: { countryCode }, 250 | }, 251 | } = JSON.parse(data)?.extensions?.sdk 252 | resolve({ inSupportedLocation, countryCode, accessToken }) 253 | } 254 | }, reason => { 255 | reject('Error') 256 | return 257 | }) 258 | }) 259 | } 260 | 261 | function testHomePage() { 262 | return new Promise((resolve, reject) => { 263 | let opts0 = { 264 | url: 'https://www.disneyplus.com/', 265 | opts: opts, 266 | headers: { 267 | 'Accept-Language': 'en', 268 | 'User-Agent': UA, 269 | }, 270 | } 271 | $task.fetch(opts0).then(response => { 272 | let data = response.body 273 | console.log("DisneyPlus: homepage"+response.statusCode) 274 | if (response.statusCode !== 200 || data.indexOf('not available in your region') !== -1) { 275 | reject('Not Available') 276 | return 277 | } else { 278 | let match = data.match(/Region: ([A-Za-z]{2})[\s\S]*?CNBL: ([12])/) 279 | if (!match) { 280 | resolve({ region: '', cnbl: '' }) 281 | return 282 | } else { 283 | let region = match[1] 284 | let cnbl = match[2] 285 | //console.log("homepage"+region+cnbl) 286 | resolve({ region, cnbl }) 287 | } 288 | } 289 | }, reason => { 290 | reject('Error') 291 | return 292 | }) 293 | }) 294 | } 295 | 296 | function testPublicGraphqlAPI(accessToken) { 297 | return new Promise((resolve, reject) => { 298 | let opts = { 299 | url: 'https://disney.api.edge.bamgrid.com/v1/public/graphql', 300 | headers: { 301 | 'Accept-Language': 'en', 302 | Authorization: accessToken, 303 | 'Content-Type': 'application/json', 304 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', 305 | }, 306 | body: JSON.stringify({ 307 | query: 308 | 'query($preferredLanguages: [String!]!, $version: String) {globalization(version: $version) { uiLanguage(preferredLanguages: $preferredLanguages) }}', 309 | variables: { version: '1.5.0', preferredLanguages: ['en'] }, 310 | }), 311 | } 312 | 313 | $task.fetch(opts).then( response => { 314 | 315 | resolve(response.status === 200) 316 | }, reason => { 317 | reject('Error') 318 | return 319 | }) 320 | }) 321 | } 322 | 323 | function timeout(delay = 5000) { 324 | return new Promise((resolve, reject) => { 325 | setTimeout(() => { 326 | reject('Timeout') 327 | }, delay) 328 | }) 329 | } 330 | 331 | 332 | function testNf(filmId) { 333 | return new Promise((resolve, reject) =>{ 334 | let option = { 335 | url: BASE_URL + filmId, 336 | opts: opts, 337 | timeout: 5200, 338 | headers: { 339 | 'User-Agent': 340 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 341 | }, 342 | } 343 | $task.fetch(option).then(response => { 344 | //$notify("nf:"+response.statusCode) 345 | console.log("nf:"+response.statusCode) 346 | if (response.statusCode === 404) { 347 | 348 | result["Netflix"] = "Netflix: 支持自制剧集 ⚠️" 349 | console.log("nf:"+result["Netflix"]) 350 | resolve('Not Found') 351 | return 352 | } else if (response.statusCode === 403) { 353 | 354 | //console.log("nfnf") 355 | result["Netflix"] = "Netflix: 未支持 🚫" 356 | console.log("nf:"+result["Netflix"]) 357 | //$notify("nf:"+result["Netflix"]) 358 | resolve('Not Available') 359 | return 360 | } else if (response.statusCode === 200) { 361 | let url = response.headers['X-Originating-URL'] 362 | let region = url.split('/')[3] 363 | region = region.split('-')[0] 364 | if (region == 'title') { 365 | region = 'us' 366 | } 367 | console.log("nf:"+region) 368 | result["Netflix"] = "Netflix: 完整支持"+arrow+ "⟦"+flags.get(region.toUpperCase())+"⟧ 🎉" 369 | //$notify("nf:"+result["Netflix"]) 370 | resolve("nf:"+result["Netflix"]) 371 | return 372 | } 373 | resolve("Netflix Test Error") 374 | }, reason => { 375 | result["Netflix"] = "Netflix: 检测超时 🚦" 376 | console.log(result["Netflix"]) 377 | resolve("timeout") 378 | } 379 | ) 380 | } 381 | ) 382 | } 383 | 384 | function testYTB() { 385 | let option = { 386 | url: BASE_URL_YTB, 387 | opts: opts, 388 | timeout: 2800, 389 | headers: { 390 | 'User-Agent': 391 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' 392 | }, 393 | } 394 | $task.fetch(option).then(response=> { 395 | let data = response.body 396 | console.log("ytb:"+response.statusCode) 397 | if (response.statusCode !== 200) { 398 | //reject('Error') 399 | result["YouTube"] = "YouTube Premium: 检测失败 ❗️" 400 | } else if (data.indexOf('Premium is not available in your country') !== -1) { 401 | //resolve('Not Available') 402 | result["YouTube"] = "YouTube Premium: 未支持 🚫" 403 | } else if (data.indexOf('Premium is not available in your country') == -1) {//console.log(data.split("countryCode")[1]) 404 | let region = '' 405 | let re = new RegExp('"GL":"(.*?)"', 'gm') 406 | let ret = re.exec(data) 407 | if (ret != null && ret.length === 2) { 408 | region = ret[1] 409 | } else if (data.indexOf('www.google.cn') !== -1) { 410 | region = 'CN' 411 | } else { 412 | region = 'US' 413 | } 414 | //resolve(region) 415 | result["YouTube"] = "YouTube Premium: 支持 "+arrow+ "⟦"+flags.get(region.toUpperCase())+"⟧ 🎉" 416 | console.log("ytb:"+region+ result["YouTube"]) 417 | } 418 | }, reason => { 419 | result["YouTube"] = "YouTube Premium: 检测超时 🚦" 420 | //resolve("timeout") 421 | }) 422 | } 423 | 424 | function testDazn() { 425 | 426 | const extra =`{ 427 | "LandingPageKey":"generic", 428 | "Platform":"web", 429 | "PlatformAttributes":{}, 430 | "Manufacturer":"", 431 | "PromoCode":"", 432 | "Version":"2" 433 | }` 434 | let option = { 435 | url: BASE_URL_Dazn, 436 | method: "POST", 437 | opts: opts, 438 | timeout: 2800, 439 | headers: { 440 | 'User-Agent': 441 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36', 442 | "Content-Type": "application/json" 443 | }, 444 | body: extra 445 | } 446 | 447 | $task.fetch(option).then(response=> { 448 | let data = response.body 449 | //data = extra 450 | let header = JSON.stringify(response.headers) 451 | console.log("Dazn:"+response.statusCode) 452 | //console.log("Dazn:"+data) 453 | //$done(data) 454 | if (response.statusCode !== 200) { 455 | //reject('Error') 456 | result["Dazn"] = "Dazn: 检测失败 ❗️" 457 | } else if (response.statusCode == 200) {//console.log(data.split("countryCode")[1]) 458 | //console.log(data) 459 | let region = '' 460 | let re = new RegExp('"GeolocatedCountry":"(.*?)"', 'gm') 461 | let ret = re.exec(data) 462 | if (ret != null && ret.length === 2) { 463 | region = ret[1] 464 | result["Dazn"] = "Dazn: 支持 "+arrow+ "⟦"+flags.get(region.toUpperCase())+"⟧ 🎉" 465 | } else { 466 | result["Dazn"] = "Dazn: 未支持 🚫" 467 | 468 | } 469 | //resolve(region) 470 | console.log("Dazn:"+region+ result["Dazn"]) 471 | } 472 | }, reason => { 473 | result["Dazn"] = "Dazn: 检测超时 🚦" 474 | //resolve("timeout") 475 | }) 476 | } 477 | 478 | function testParam() { 479 | let option = { 480 | url: BASE_URL_Param, 481 | opts: opts1, 482 | timeout: 2800, 483 | headers: { 484 | 'User-Agent': 485 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' 486 | }, 487 | } 488 | $task.fetch(option).then(response=> { 489 | //let data = response.body 490 | console.log("Paramountᐩ:"+response.statusCode) 491 | if (response.statusCode == 200) { 492 | //reject('Error') 493 | result["Paramount"] = "Paramountᐩ: 支持 🎉 " 494 | } else if (response.statusCode == 302) { 495 | //resolve('Not Available') 496 | result["Paramount"] = "Paramountᐩ: 未支持 🚫" 497 | } 498 | console.log("Paramountᐩ:"+ result["Paramount"]) 499 | }, reason => { 500 | result["Paramount"] = "Paramountᐩ: 检测超时 🚦" 501 | //resolve("timeout") 502 | }) 503 | } 504 | 505 | 506 | function testDiscovery() { 507 | return new Promise((resolve, reject) =>{ 508 | let option = { 509 | url: BASE_URL_Discovery_token, 510 | opts: opts1, 511 | timeout: 2800, 512 | headers: { 513 | 'User-Agent': 514 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36' 515 | }, 516 | verify: false 517 | } 518 | $task.fetch(option).then(response=> { 519 | console.log("GetToken:"+response.statusCode) 520 | if(response.statusCode == 200) { 521 | let data = JSON.parse(response.body) 522 | console.log(data) 523 | let token = data["data"]["attributes"]["token"] 524 | const cookievalid =`_gcl_au=1.1.858579665.1632206782; _rdt_uuid=1632206782474.6a9ad4f2-8ef7-4a49-9d60-e071bce45e88; _scid=d154b864-8b7e-4f46-90e0-8b56cff67d05; _pin_unauth=dWlkPU1qWTRNR1ZoTlRBdE1tSXdNaTAwTW1Nd0xUbGxORFV0WWpZMU0yVXdPV1l6WldFeQ; _sctr=1|1632153600000; aam_fw=aam%3D9354365%3Baam%3D9040990; aam_uuid=24382050115125439381416006538140778858; st=${token}; gi_ls=0; _uetvid=a25161a01aa711ec92d47775379d5e4d; AMCV_BC501253513148ED0A490D45%40AdobeOrg=-1124106680%7CMCIDTS%7C18894%7CMCMID%7C24223296309793747161435877577673078228%7CMCAAMLH-1633011393%7C9%7CMCAAMB-1633011393%7CRKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y%7CMCOPTOUT-1632413793s%7CNONE%7CvVersion%7C5.2.0; ass=19ef15da-95d6-4b1d-8fa2-e9e099c9cc38.1632408400.1632406594` 525 | let option1 = { 526 | url: BASE_URL_Discovery, 527 | opts: opts1, 528 | timeout: 2800, 529 | headers: { 530 | 'User-Agent': 531 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36', 532 | "Cookie": cookievalid, 533 | }, 534 | ciphers: "DEFAULT@SECLEVEL=1", 535 | verify: false 536 | } 537 | $task.fetch(option1).then(response=> { 538 | console.log("Discovery+ Check:"+response.statusCode) 539 | let data = JSON.parse(response.body) 540 | let locationd = data["data"]["attributes"]["currentLocationTerritory"] 541 | if (locationd == "us") { 542 | result["Discovery"] = "Discoveryᐩ: 支持 🎉 " 543 | console.log("支持Discoveryᐩ") 544 | resolve("支持Discoveryᐩ") 545 | return 546 | } else { 547 | result["Discovery"] = "Discoveryᐩ: 未支持 🚫" 548 | console.log("不支持Discoveryᐩ") 549 | resolve("不支持Discoveryᐩ") 550 | return 551 | } 552 | }, reason => { 553 | console.log("Check-Error"+reason) 554 | resolve("discovery failed") 555 | }) 556 | } else { 557 | console.log("GetToken-Error"+reason) 558 | resolve("discovery failed") 559 | } 560 | }, reason => { 561 | console.log("GetToken-Error"+reason) 562 | resolve("discovery failed") 563 | })})} 564 | 565 | 566 | // openai test 567 | 568 | support_countryCodes=["T1","XX","AL","DZ","AD","AO","AG","AR","AM","AU","AT","AZ","BS","BD","BB","BE","BZ","BJ","BT","BA","BW","BR","BG","BF","CV","CA","CL","CO","KM","CR","HR","CY","DK","DJ","DM","DO","EC","SV","EE","FJ","FI","FR","GA","GM","GE","DE","GH","GR","GD","GT","GN","GW","GY","HT","HN","HU","IS","IN","ID","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KW","KG","LV","LB","LS","LR","LI","LT","LU","MG","MW","MY","MV","ML","MT","MH","MR","MU","MX","MC","MN","ME","MA","MZ","MM","NA","NR","NP","NL","NZ","NI","NE","NG","MK","NO","OM","PK","PW","PA","PG","PE","PH","PL","PT","QA","RO","RW","KN","LC","VC","WS","SM","ST","SN","RS","SC","SL","SG","SK","SI","SB","ZA","ES","LK","SR","SE","CH","TH","TG","TO","TT","TN","TR","TV","UG","AE","US","UY","VU","ZM","BO","BN","CG","CZ","VA","FM","MD","PS","KR","TW","TZ","TL","GB"] 569 | 570 | function testChatGPT() { 571 | return new Promise((resolve, reject) =>{ 572 | let option = { 573 | url: BASE_URL_GPT, 574 | opts: opts1, 575 | timeout: 2800, 576 | } 577 | $task.fetch(option).then(response=> { 578 | let resp = JSON.stringify(response) 579 | console.log("ChatGPT Main Test") 580 | let jdg = resp.indexOf("text/plain") 581 | if(jdg == -1) { 582 | let option1 = { 583 | url: Region_URL_GPT, 584 | opts: opts1, 585 | timeout: 2800, 586 | } 587 | $task.fetch(option1).then(response=> { 588 | console.log("ChatGPT Region Test") 589 | let region = response.body.split("loc=")[1].split("\n")[0] 590 | console.log("ChatGPT Region: "+region) 591 | let res = support_countryCodes.indexOf(region) 592 | if (res != -1) { 593 | result["ChatGPT"] = "ChatGPT: 支持 "+arrow+ "⟦"+flags.get(region.toUpperCase())+"⟧ 🎉" 594 | console.log("支持 ChatGPT") 595 | resolve("支持 ChatGPT") 596 | return 597 | } else { 598 | result["ChatGPT"] = "ChatGPT: 未支持 🚫" 599 | console.log("不支持 ChatGPT") 600 | resolve("不支持 ChatGPT") 601 | return 602 | } 603 | }, reason => { 604 | console.log("Check-Error"+reason) 605 | resolve("ChatGPT failed") 606 | }) 607 | } else { 608 | result["ChatGPT"] = "ChatGPT: 未支持 🚫" 609 | console.log("不支持 ChatGPT") 610 | resolve("不支持 ChatGPT") 611 | } 612 | }, reason => { 613 | console.log("ChatGPT-Error"+reason) 614 | resolve("ChatGPT failed") 615 | })})} -------------------------------------------------------------------------------- /Scripts/switch-check-disneyplus.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from 4 | 1. https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 5 | 6 | For Quantumult-X 598+ ONLY!! 7 | 8 | 2022-07-23 9 | 10 | [task_local] 11 | 12 | // UI 查询版本 13 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-disneyplus.js, tag=Disneyᐩ 检测&切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true 14 | 15 | //cron 版本 16 | 0 8 * * * https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/switch-check-disneyplus.js#policy=你的策略组名, tag=Disneyᐩ 定时切换, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Color/Disney.png, enabled=true 17 | 18 | ps. 简单粗暴的 UI-Interaction 版本。无数据持久化、粗暴延迟等待。完美主义建议使用 Helge大佬的boxjs版本 https://t.me/QuanXNews/193 19 | 20 | @XIAO_KOP 21 | 22 | **/ 23 | 24 | const BASE_URL_DISNEY = 'https://www.disneyplus.com'; 25 | const arrow = " ➟ " 26 | 27 | const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' 28 | 29 | // 即将登陆 30 | const STATUS_COMING = 2 31 | // 支持解锁 32 | const STATUS_AVAILABLE = 1 33 | // 不支持解锁 34 | const STATUS_NOT_AVAILABLE = 0 35 | // 检测超时 36 | const STATUS_TIMEOUT = -1 37 | // 检测异常 38 | const STATUS_ERROR = -2 39 | 40 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 41 | 42 | var cronsign = $environment.executeType == 0 || $environment.executeType == "0" || $environment.executeType == "-1"? "Y" : "N" 43 | var policy = $environment.executeType == 0 || $environment.executeType == "0" || $environment.executeType == "-1"? GetPolicy($environment.sourcePath) : $environment.params 44 | console.log(JSON.stringify($environment)) 45 | console.log("策略组:"+policy) 46 | 47 | function GetPolicy(cnt) { 48 | if (cnt && cnt.indexOf("#policy=") !=-1) { 49 | return decodeURIComponent(cnt.split("#policy=")[1].trim()) 50 | }else { 51 | return "" 52 | } 53 | } 54 | 55 | 56 | const message = { 57 | action: "get_customized_policy", 58 | content: policy 59 | 60 | }; 61 | 62 | var output=[] 63 | var OKList=[] 64 | var ResList=["即将登陆节点 ➟ "] 65 | var NoList=["不支持节点 ➟ "] 66 | var timeoutList=["检测超时节点 ➟ "] 67 | var pflag=1 //是否是策略,或者简单节点 68 | var sign=0 //是否停止 69 | 70 | 71 | $configuration.sendMessage(message).then(resolve => { 72 | if (resolve.error) { 73 | console.log(resolve.error); 74 | $done() 75 | } 76 | if (resolve.ret) { 77 | output=JSON.stringify(resolve.ret[message.content])? JSON.parse(JSON.stringify(resolve.ret[message.content]["candidates"])) : [policy] 78 | pflag = JSON.stringify(resolve.ret[message.content])? pflag:0 79 | console.log("Disneyᐩ 检测&切换") 80 | console.log("节点or策略组:"+pflag) 81 | console.log(JSON.stringify(resolve.ret)) 82 | if (pflag==1) { 83 | console.log("节点数量:"+resolve.ret[policy]["candidates"].length) 84 | if(resolve.ret[policy]["candidates"].length==0) { 85 | $done({"title":"Disneyᐩ 检测&切换","htmlMessage":`
😭 无有效节点`});
86 | }
87 | }
88 |
89 | //$notify(typeof(output),output)
90 | Check()
91 | //$done({"title":"策略内容","message":output})
92 | }
93 | //$done();|
94 | }, reject => {
95 | // Normally will never happen.
96 | $done();
97 | });
98 |
99 | function Len(cnt) {
100 | return cnt.length-1
101 | }
102 |
103 | function Check() {
104 | var relay = 2000;
105 | for ( var i=0;i < output.length;i++) {
106 | testDisneyPlus(output[i])
107 | }
108 | if (output.length<=3) {
109 | relay = 3500
110 | } else if (output.length<=5) {
111 | relay = 4000
112 | } else if (output.length<10) {
113 | relay =4500
114 | } else if (output.length<15) {
115 | relay =6500
116 | } else if (output.length<20) {
117 | relay =8500
118 | } else if (output.length<50){
119 | relay =11000
120 | } else {
121 | relay =13000
122 | }
123 | console.log(output.length+":"+relay)
124 | setTimeout(() => {
125 | console.log("⛳️ 共计 "+OKList.length+" 个:支持节点 ➟ "+ OKList)
126 | console.log("🏠 共计 "+Len(NoList)+" 个:"+NoList)
127 | console.log("🕹 共计 "+Len(timeoutList)+" 个:"+timeoutList)
128 | sign = 1
129 | if (OKList[0] && pflag==1) { //有支持节点、且为策略组才操作
130 | console.log("开始排序")
131 | ReOrder(OKList)
132 | } else if (!OKList[0]){ //不支持
133 | content = pflag==0 ? `
😭 该节点不支持Disneyᐩ
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`: `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到支持 Disneyᐩ 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
🎉 该节点支持 Disneyᐩ ➟` + OKList[0].split(": 支持 ")[1]+`
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
137 | $done({"title":"Disneyᐩ 检测&切换", "htmlMessage": content})
138 | }
139 | }, relay)
140 |
141 | }
142 |
143 |
144 |
145 | //选择最优延迟节点
146 | function ReOrder(cnt) {
147 | const array = cnt//;
148 | const messageURL = {
149 | action: "url_latency_benchmark",
150 | content: array.map(item=>item.split(": 支持 ")[0])
151 | };
152 | $configuration.sendMessage(messageURL).then(resolve => {
153 | if (resolve.error) {
154 | console.log(resolve.error);
155 | }
156 | if (resolve.ret) {
157 | let output=JSON.stringify(resolve.ret);
158 | //console.log("节点延迟:"+output);
159 | //排序
160 | //console.log("排序前: "+ array)
161 | if(array){
162 | try {
163 | array.sort(function (a,b) {
164 | //console.log(a+" VS "+b)
165 | a=a.split(": 支持 ")[0]
166 | b=b.split(": 支持 ")[0]
167 | return (resolve.ret[a][1]!=-1 && resolve.ret[b][1] !=-1)? resolve.ret[a][1]-resolve.ret[b][1] : resolve.ret[b][1]
168 | })
169 | } catch (err) {
170 | console.log(err)
171 | }
172 | }
173 | console.log("排序后: "+array)
174 | let Ping =resolve.ret[array[0].split(": 支持 ")[0]]
175 | const dict = { [policy] : array[0].split(": 支持 ")[0]};
176 | if(array[0]) {
177 | console.log("选定支持 Disneyᐩ 节点:"+array[0].split(": 支持 ")[0]+"延迟数据为 👉"+Ping)
178 | Ping = " ⚡️ 节点延迟 ➟ 「 "+Ping + " 」 "
179 | }
180 | const mes1 = {
181 | action: "set_policy_state",
182 | content: dict
183 | };
184 | $configuration.sendMessage(mes1).then(resolve => {
185 | if (resolve.error) {
186 | console.log(resolve.error);
187 | content =pflag==0 && array[0]? `
` + "
⟦ "+policy+ " ⟧
🎉 该节点支持 Disneyᐩ ➟" + array[0].split(": 支持 ")[1]+ `
` + "
⟦ "+policy+ " ⟧
⚠️ 该节点不支持 Disneyᐩ " + `
` + "
⟦ "+policy+ " ⟧
🚦 即将登陆节点所在地区 ➟" + ResList[1].split("登陆 ")[1]+`
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到支持 Disneyᐩ 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
` + "
⟦ "+policy+ " ⟧ 已切换至支持 Disneyᐩ "+array[0].split(": 支持 ")[1]+"中延迟最优的路线
👇
⟦ "+array[0].split(": 支持 ")[0]+ " ⟧" + "
"+Ping+"
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
😭 无有效节点`});
64 | }
65 | }
66 |
67 | //$notify(typeof(output),output)
68 | Check()
69 | //$done({"title":"策略内容","message":output})
70 | }
71 | }, reject => {
72 | // Normally will never happen.
73 | $done();
74 | });
75 |
76 | function Len(cnt) {
77 | return cnt.length-1
78 | }
79 |
80 | function Check() {
81 | var relay = 2000;
82 | for ( var i=0;i < output.length;i++) {
83 | testGoogle(output[i])
84 | }
85 | if (output.length<=5) {
86 | relay = 2000
87 | } else if (output.length<10) {
88 | relay =4000
89 | } else if (output.length<15) {
90 | relay =6000
91 | } else if (output.length<20) {
92 | relay =8000
93 | } else {
94 | relay =10000
95 | }
96 | console.log(output.length+":"+relay)
97 | setTimeout(() => {
98 | console.log("⛳️ 共计 "+OKList.length+" 个:未送中节点 ➟ "+ OKList)
99 | console.log("🏠 共计 "+Len(NoList)+" 个:"+NoList)
100 | console.log("🕹 共计 "+Len(ErrorList)+" 个:"+ErrorList)
101 | sign=1
102 | if (OKList[0] && pflag==1) { //有支持节点、且为策略组才操作
103 | ReOrder(OKList)
104 | } else if (!OKList[0]){ //不支持
105 | content =pflag==0 ? `
😭 该节点已被 Google 送中
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`: `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到未被 Google 送中 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
⚠️ 该节点 Google 送中检测失败
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`: content
108 | $done({"title":"Google 送中检测&切换", "htmlMessage": content})
109 | } else if (OKList[0]){ //支持, 但为节点
110 | content = `
🎉 该节点未被 Google 送中
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
111 | $done({"title":"Google 送中检测&切换", "htmlMessage": content})
112 | }
113 | }, relay)
114 |
115 | }
116 |
117 | //选择最优延迟节点
118 | function ReOrder(cnt) {
119 | const array = cnt;
120 | const messageURL = {
121 | action: "url_latency_benchmark",
122 | content: array
123 | };
124 | $configuration.sendMessage(messageURL).then(resolve => {
125 | if (resolve.error) {
126 | console.log(resolve.error);
127 | }
128 | if (resolve.ret) {
129 | let output=JSON.stringify(resolve.ret);
130 | console.log("节点延迟:"+output);
131 | //排序
132 | console.log("排序前: "+ array)
133 | if(array){
134 | try {
135 | array.sort(function (a,b) {
136 | //console.log(a+" VS "+b)
137 | return (resolve.ret[a][1]!=-1 && resolve.ret[b][1] !=-1)? resolve.ret[a][1]-resolve.ret[b][1] : resolve.ret[b][1]
138 | })
139 | } catch (err) {
140 | console.log(err)
141 | }
142 | }
143 | console.log("排序后: "+array)
144 | let Ping =resolve.ret[array[0]]
145 | const dict = { [policy] : array[0]};
146 | if(array[0]) {
147 | console.log("选定未被送中节点:"+array[0]+"延迟数据为 👉"+Ping)
148 | Ping = " ⚡️ 节点延迟 ➟ 「 "+Ping + " 」 "
149 | }
150 | const mes1 = {
151 | action: "set_policy_state",
152 | content: dict
153 | };
154 | $configuration.sendMessage(mes1).then(resolve => {
155 | if (resolve.error) {
156 | console.log(resolve.error);
157 | content =pflag==0 && array[0]? `
🎉 该节点未被 Google 送中
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------` : `
😭 该节点已被 Google 送中
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
158 | content = pflag!=0 && !array[0]? `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到未被 Google 送中 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
` + "
⟦ "+policy+ " ⟧ 已切换至未被Google 送中延迟最优路线
👇
⟦ "+array[0]+ " ⟧" + "
"+Ping+"
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
😭 无有效节点`});
70 | }
71 | }
72 | //$notify(typeof(output),output)
73 | Check()
74 | //$done({"title":"策略内容","message":output})
75 | }
76 | //$done();|
77 | }, reject => {
78 | // Normally will never happen.
79 | $done();
80 | });
81 |
82 | function Len(cnt) {
83 | return cnt.length-1
84 | }
85 |
86 | function Check() {
87 | var relay = 2000;
88 | for ( var i=0;i < output.length;i++) {
89 | testNF(output[i])
90 | }
91 | if (output.length<=3) {
92 | relay = 3500
93 | } else if (output.length<=5) {
94 | relay = 4000
95 | } else if (output.length<10) {
96 | relay =4500
97 | } else if (output.length<15) {
98 | relay =6500
99 | } else if (output.length<20) {
100 | relay =8500
101 | } else if (output.length<50){
102 | relay =11000
103 | } else {
104 | relay =13000
105 | }
106 | console.log(output.length+":"+relay)
107 | setTimeout(() => {
108 | console.log("⛳️ 共计 "+OKList.length+" 个:完整支持节点 ➟"+ OKList)
109 | console.log("🏠 共计 "+Len(NoList)+" 个:"+NoList)
110 | console.log("🕹 共计 "+Len(timeoutList)+" 个:"+timeoutList)
111 | sign=1
112 | if (OKList[0] && pflag==1) {
113 | console.log("开始排序")
114 | ReOrder(OKList)
115 | } else if (!OKList[0]){ //不支持
116 | content =pflag==0 ? `
😭 该节点未完整支持 Netflix
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`: `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到完整支持 Netflix 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
🎉 该节点完整支持 Netflix
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
120 | //content = `
🎉 该节点支持 Disneyᐩ ➟` + OKList[0].split(": 支持 ")[1]+`
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
121 | $done({"title":"Netflix 检测&切换", "htmlMessage": content})
122 | }
123 | }, relay)
124 |
125 | }
126 |
127 | //选择最优延迟节点
128 | function ReOrder(cnt) {
129 | const array = cnt;
130 | const messageURL = {
131 | action: "url_latency_benchmark",
132 | content: array
133 | };
134 | $configuration.sendMessage(messageURL).then(resolve => {
135 | if (resolve.error) {
136 | console.log(resolve.error);
137 | }
138 | if (resolve.ret) {
139 | let output=JSON.stringify(resolve.ret);
140 | console.log("节点延迟:"+output);
141 | //排序
142 | console.log("排序前: "+ array)
143 | if(array){
144 | try {
145 | array.sort(function (a,b) {
146 | //console.log(a+" VS "+b)
147 | return (resolve.ret[a][1]!=-1 && resolve.ret[b][1] !=-1)? resolve.ret[a][1]-resolve.ret[b][1] : resolve.ret[b][1]
148 | })
149 | } catch (err) {
150 | console.log(err)
151 | }
152 | }
153 | console.log("排序后: "+array)
154 | let Ping =resolve.ret[array[0]]
155 | const dict = { [policy] : array[0]};
156 | if(array[0]) {
157 | console.log("选定完整支持节点:"+array[0]+"延迟数据为 👉"+Ping)
158 | Ping = " ⚡️ 节点延迟 ➟ 「 "+Ping + " 」 "
159 | }
160 | const mes1 = {
161 | action: "set_policy_state",
162 | content: dict
163 | };
164 | $configuration.sendMessage(mes1).then(resolve => {
165 | if (resolve.error) {
166 | console.log(resolve.error);
167 | content =pflag==0 && array[0]? `
` + "
⟦ "+policy+ " ⟧
🎉 该节点完整支持 Netflix" + `
` + "
⟦ "+policy+ " ⟧
⚠️ 该节点不支持 Netflix" + `
` + "
⟦ "+policy+ " ⟧
🚦 该节点仅支持 Netflix 自制剧集" + `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到完整支持 Netflix 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
` + "
⟦ "+policy+ " ⟧ 已切换至完整支持的路线中延迟最优节点
👇
⟦ "+array[0]+ " ⟧" + "
"+Ping+"
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
😭 无有效节点`});
65 | }
66 | }
67 |
68 | //$notify(typeof(output),output)
69 | Check()
70 | //$done({"title":"策略内容","message":output})
71 | }
72 | //$done();|
73 | }, reject => {
74 | // Normally will never happen.
75 | $done();
76 | });
77 |
78 | function Len(cnt) {
79 | return cnt.length-1
80 | }
81 |
82 | function Check() {
83 | var relay = 2000;
84 | for ( var i=0;i < output.length;i++) {
85 | testYTB(output[i])
86 | }
87 | if (output.length<=5) {
88 | relay = 2000
89 | } else if (output.length<10) {
90 | relay =4000
91 | } else if (output.length<15) {
92 | relay =6000
93 | } else if (output.length<20) {
94 | relay =8000
95 | } else {
96 | relay =10000
97 | }
98 | console.log(output.length+":"+relay)
99 | setTimeout(() => {
100 | console.log("⛳️ 共计 "+OKList.length+" 个:支持节点 ➟ "+ OKList)
101 | console.log("🏠 共计 "+Len(NoList)+" 个:"+NoList)
102 | console.log("🕹 共计 "+Len(ErrorList)+" 个:"+ErrorList)
103 | sign = 1
104 | if (OKList[0] && pflag==1) { //有支持节点、且为策略组才操作
105 | console.log("开始排序")
106 | ReOrder(OKList)
107 | } else if (!OKList[0]){ //不支持
108 | content =pflag==0 ? `
😭 该节点不支持 YouTube Premium
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`: `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到支持 YouTube Premium 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
🎉 该节点支持 YouTube Premium
👇
-------------------------
⟦ `+policy+` ⟧
-------------------------`
112 | $done({"title":"YouTube Premium 检测&切换", "htmlMessage": content})
113 | }
114 | }, relay)
115 |
116 | }
117 |
118 | //选择最优延迟节点
119 | function ReOrder(cnt) {
120 | const array = cnt;
121 | const messageURL = {
122 | action: "url_latency_benchmark",
123 | content: array
124 | };
125 | $configuration.sendMessage(messageURL).then(resolve => {
126 | if (resolve.error) {
127 | console.log(resolve.error);
128 | }
129 | if (resolve.ret) {
130 | let output=JSON.stringify(resolve.ret);
131 | console.log("节点延迟:"+output);
132 | //排序
133 | console.log("排序前: "+ array)
134 | if(array){
135 | try {
136 | array.sort(function (a,b) {
137 | //console.log(a+" VS "+b)
138 | return (resolve.ret[a][1]!=-1 && resolve.ret[b][1] !=-1)? resolve.ret[a][1]-resolve.ret[b][1] : resolve.ret[b][1]
139 | })
140 | } catch (err) {
141 | console.log(err)
142 | }
143 | }
144 | console.log("排序后: "+array)
145 | let Ping =resolve.ret[array[0]]
146 | const dict = { [policy] : array[0]};
147 | if(array[0]) {
148 | console.log("选定支持YouTube Premium:"+array[0]+"延迟数据为 👉"+Ping)
149 | Ping = " ⚡️ 节点延迟 ➟ 「 "+Ping + " 」 "
150 | }
151 | const mes1 = {
152 | action: "set_policy_state",
153 | content: dict
154 | };
155 | $configuration.sendMessage(mes1).then(resolve => {
156 | if (resolve.error) {
157 | console.log(resolve.error);
158 | content =pflag==0 && array[0]? `
` + "
⟦ "+policy+ " ⟧
🎉 该节点支持 YouTube Premium" + `
` + "
⟦ "+policy+ " ⟧
⚠️ 该节点不支持 YouTube Premium" + `
` + "
❌ ⟦ "+policy+ " ⟧ ⚠️ 切换失败
该策略组内未找到支持 YouTube Premium 的节点" + "
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
` + "
⟦ "+policy+ " ⟧ 已切换至支持Premium 的路线中延迟最优节点
👇
⟦ "+array[0]+ " ⟧" + "
"+Ping+"
-----------------------------
检测详情请查看JS脚本记录
-----------------------------"+`
` + msg + `
` 126 | msg = msg!=""? ""+msg+"" :" 无使用节点流量记录" 127 | return msg 128 | } 129 | 130 | //查询流量 131 | function DisplayNodeTraffic(nodes,pflag) { 132 | $configuration.sendMessage(messageTraffic).then(resolve => { 133 | if (resolve.error) { 134 | console.log(resolve.error); 135 | } 136 | if (resolve.ret) { 137 | let output=JSON.stringify(resolve.ret, null, 2); 138 | let len = getJsonLength(resolve.ret) 139 | for (var item in resolve.ret) { 140 | getServerTraffic(resolve.ret[item],nodes) 141 | } 142 | //console.log(output); 143 | content = NodeData(nodes,pflag); 144 | //console.log(content) 145 | $done({"title":result["title"],"htmlMessage":content}) 146 | } 147 | $done(); 148 | }, reject => { 149 | // Normally not gonna happen. 150 | $done(); 151 | }); 152 | } 153 | 154 | //单位展示 155 | function CUnit(cnt) { 156 | cnt = Number(cnt)>=1024? (cnt/1024).toFixed(2)+" GB " : cnt.toFixed(1)+" MB " 157 | return cnt 158 | } 159 | 160 | function NodeData(nodes,pflag){ 161 | datad = "TCP : "+" "+CUnit(Tdatad)+"⟱ | "+CUnit(Tdatau)+"⟰ " 162 | datau = "UDP : "+" "+CUnit(Udatad)+"⟱ | "+CUnit(Udatau)+"⟰ " 163 | total = CUnit(Tdatad+Tdatau+Udatad+Udatau) 164 | Ncontent = "--------------------------------------"+[datad,datau].join("")+ "--------------------------------------" 165 | Ncontent = pflag == 0? Ncontent+""+"节点 ➟ " + policy+ " ☞ "+total+" 流量 " : ""+" 策略 ➟ " + policy+ " 共 『"+checked.length+"/"+nodes.length+"』 个节点 ☞ "+total+" 流量 "+Ncontent+" 🏆 排行榜 " 166 | Ncontent = pflag == 0? Ncontent : Ncontent +Rank() 167 | Ncontent = `` + Ncontent + `
` 168 | //console.log(Ncontent) 169 | return Ncontent 170 | } 171 | 172 | -------------------------------------------------------------------------------- /Scripts/ytb-ui-check.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified from https://gist.githubusercontent.com/Hyseen/b06e911a41036ebc36acf04ddebe7b9a/raw/nf_check.js 4 | 5 | For Quantumult-X 598+ 6 | 7 | [task_local] 8 | 9 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/ytb-ui-check.js, tag=YouTube 查询, img-url=text.magnifyingglass.system, enabled=true 10 | 11 | @XIAO_KOP 12 | 13 | **/ 14 | 15 | 16 | const BASE_URL = 'https://www.youtube.com/premium' 17 | 18 | const FILM_ID = 81215567 19 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 20 | 21 | const arrow = "➟" 22 | var output = "" 23 | var opts = { 24 | policy: $environment.params 25 | }; 26 | 27 | 28 | var flags = new Map([[ "AC" , "🇦🇨" ] ,["AE","🇦🇪"], [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , ["BA", "🇧🇦"], [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 29 | 30 | 31 | !(async () => { 32 | let result = { 33 | title: '📺 YouTube Premium 检测', 34 | content: '----------------------\n\n检测失败,请重试', 35 | } 36 | await Promise.race([test(FILM_ID),timeOut(5000)]) 37 | .then((code) => { 38 | console.log(code) 39 | 40 | if (code === 'Not Available') { 41 | result['content'] = '----------------------\n\n🛑 未支持 YouTube Premium' 42 | //return 43 | } else if (code === "timeout") { 44 | result['content'] = "----------------------\n\n🚦 测试超时" 45 | } else { 46 | result['content'] = '----------------------\n\n✅ 支持 YouTube Premium ➟ ⟦'+flags.get(code.toUpperCase())+code.toUpperCase()+"⟧" 47 | } 48 | //$notify(result["title"], output, result["content"], link) 49 | 50 | //console.log(result) 51 | $done({"title":result["title"],"message":result["content"]+'\n\n----------------------\n'+$environment.params}) 52 | }) 53 | })() 54 | .finally(() => $done()); 55 | 56 | function timeOut(delay) { 57 | return new Promise((resolve, reject) => { 58 | setTimeout(() => { 59 | //reject(new Error('timeout')) 60 | resolve("timeout") 61 | }, delay) 62 | }) 63 | } 64 | 65 | 66 | function test() { 67 | return new Promise((resolve, reject) => { 68 | let option = { 69 | url: BASE_URL, 70 | opts: opts, 71 | headers: { 72 | 'User-Agent': 73 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 74 | 'Accept-Language': 'en', 75 | }, 76 | } 77 | $task.fetch(option).then(response=> { 78 | let data = response.body 79 | console.log(response.statusCode) 80 | if (response.statusCode !== 200) { 81 | reject('Error') 82 | return 83 | } 84 | 85 | if (data.indexOf('Premium is not available in your country') !== -1) { 86 | resolve('Not Available') 87 | return 88 | } 89 | console.log(data) 90 | let region = '' 91 | let re = new RegExp('"GL":"(.*?)"', 'gm') 92 | let result = re.exec(data) 93 | if (result != null && result.length === 2) { 94 | region = result[1] 95 | } else if (data.indexOf('www.google.cn') !== -1) { 96 | region = 'CN' 97 | } else { 98 | region = 'US' 99 | } 100 | resolve(region) 101 | }) 102 | }) 103 | } 104 | -------------------------------------------------------------------------------- /Scripts/ytbcheck.js: -------------------------------------------------------------------------------- 1 | /*** 2 | 3 | Thanks to & modified https://gist.githubusercontent.com/Hyseen/5ae36a6a5cb5690b1f2bff4aa19c766f/raw/youtube_premium_check.js?version=1632728073 4 | 5 | For Quantumult-X / [task-local] 6 | 7 | @XIAO_KOP 8 | 9 | **/ 10 | 11 | const BASE_URL = 'https://www.youtube.com/premium' 12 | 13 | const link = { "media-url": "https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/img/southpark/7.png" } 14 | const policy_name = "YouTube" //填入你的 youtube 策略组名 15 | 16 | const arrow = "➟" 17 | var output = "" 18 | var flags = new Map([[ "AC" , "🇦🇨" ] , [ "AF" , "🇦🇫" ] , [ "AI" , "🇦🇮" ] , [ "AL" , "🇦🇱" ] , [ "AM" , "🇦🇲" ] , [ "AQ" , "🇦🇶" ] , [ "AR" , "🇦🇷" ] , [ "AS" , "🇦🇸" ] , [ "AT" , "🇦🇹" ] , [ "AU" , "🇦🇺" ] , [ "AW" , "🇦🇼" ] , [ "AX" , "🇦🇽" ] , [ "AZ" , "🇦🇿" ] , [ "BB" , "🇧🇧" ] , [ "BD" , "🇧🇩" ] , [ "BE" , "🇧🇪" ] , [ "BF" , "🇧🇫" ] , [ "BG" , "🇧🇬" ] , [ "BH" , "🇧🇭" ] , [ "BI" , "🇧🇮" ] , [ "BJ" , "🇧🇯" ] , [ "BM" , "🇧🇲" ] , [ "BN" , "🇧🇳" ] , [ "BO" , "🇧🇴" ] , [ "BR" , "🇧🇷" ] , [ "BS" , "🇧🇸" ] , [ "BT" , "🇧🇹" ] , [ "BV" , "🇧🇻" ] , [ "BW" , "🇧🇼" ] , [ "BY" , "🇧🇾" ] , [ "BZ" , "🇧🇿" ] , [ "CA" , "🇨🇦" ] , [ "CF" , "🇨🇫" ] , [ "CH" , "🇨🇭" ] , [ "CK" , "🇨🇰" ] , [ "CL" , "🇨🇱" ] , [ "CM" , "🇨🇲" ] , [ "CN" , "🇨🇳" ] , [ "CO" , "🇨🇴" ] , [ "CP" , "🇨🇵" ] , [ "CR" , "🇨🇷" ] , [ "CU" , "🇨🇺" ] , [ "CV" , "🇨🇻" ] , [ "CW" , "🇨🇼" ] , [ "CX" , "🇨🇽" ] , [ "CY" , "🇨🇾" ] , [ "CZ" , "🇨🇿" ] , [ "DE" , "🇩🇪" ] , [ "DG" , "🇩🇬" ] , [ "DJ" , "🇩🇯" ] , [ "DK" , "🇩🇰" ] , [ "DM" , "🇩🇲" ] , [ "DO" , "🇩🇴" ] , [ "DZ" , "🇩🇿" ] , [ "EA" , "🇪🇦" ] , [ "EC" , "🇪🇨" ] , [ "EE" , "🇪🇪" ] , [ "EG" , "🇪🇬" ] , [ "EH" , "🇪🇭" ] , [ "ER" , "🇪🇷" ] , [ "ES" , "🇪🇸" ] , [ "ET" , "🇪🇹" ] , [ "EU" , "🇪🇺" ] , [ "FI" , "🇫🇮" ] , [ "FJ" , "🇫🇯" ] , [ "FK" , "🇫🇰" ] , [ "FM" , "🇫🇲" ] , [ "FO" , "🇫🇴" ] , [ "FR" , "🇫🇷" ] , [ "GA" , "🇬🇦" ] , [ "GB" , "🇬🇧" ] , [ "HK" , "🇭🇰" ] ,["HU","🇭🇺"], [ "ID" , "🇮🇩" ] , [ "IE" , "🇮🇪" ] , [ "IL" , "🇮🇱" ] , [ "IM" , "🇮🇲" ] , [ "IN" , "🇮🇳" ] , [ "IS" , "🇮🇸" ] , [ "IT" , "🇮🇹" ] , [ "JP" , "🇯🇵" ] , [ "KR" , "🇰🇷" ] , [ "LU" , "🇱🇺" ] , [ "MO" , "🇲🇴" ] , [ "MX" , "🇲🇽" ] , [ "MY" , "🇲🇾" ] , [ "NL" , "🇳🇱" ] , [ "PH" , "🇵🇭" ] , [ "RO" , "🇷🇴" ] , [ "RS" , "🇷🇸" ] , [ "RU" , "🇷🇺" ] , [ "RW" , "🇷🇼" ] , [ "SA" , "🇸🇦" ] , [ "SB" , "🇸🇧" ] , [ "SC" , "🇸🇨" ] , [ "SD" , "🇸🇩" ] , [ "SE" , "🇸🇪" ] , [ "SG" , "🇸🇬" ] , [ "TH" , "🇹🇭" ] , [ "TN" , "🇹🇳" ] , [ "TO" , "🇹🇴" ] , [ "TR" , "🇹🇷" ] , [ "TV" , "🇹🇻" ] , [ "TW" , "🇨🇳" ] , [ "UK" , "🇬🇧" ] , [ "UM" , "🇺🇲" ] , [ "US" , "🇺🇸" ] , [ "UY" , "🇺🇾" ] , [ "UZ" , "🇺🇿" ] , [ "VA" , "🇻🇦" ] , [ "VE" , "🇻🇪" ] , [ "VG" , "🇻🇬" ] , [ "VI" , "🇻🇮" ] , [ "VN" , "🇻🇳" ] , [ "ZA" , "🇿🇦"]]) 19 | 20 | 21 | function ReadPolicy(cnt) { 22 | var res = "" 23 | for (var key in cnt) { 24 | if (key == policy_name){ 25 | dd = cnt[key] 26 | res = res + dd.join(arrow) 27 | break 28 | } 29 | } 30 | return res.split(policy_name+arrow)[1] 31 | } 32 | 33 | const message = { 34 | action: "get_policy_state", 35 | //content: dict 36 | 37 | }; 38 | 39 | 40 | $configuration.sendMessage(message).then(resolve => { 41 | if (resolve.error) { 42 | console.log(resolve.error); 43 | } 44 | if (resolve.ret) { 45 | output = ReadPolicy(resolve.ret) 46 | } 47 | }) 48 | 49 | ;(async () => { 50 | let result = { 51 | title: 'YouTube Premium 检测', 52 | content: '检测失败,请重试', 53 | } 54 | 55 | await Promise.race([test(),timeOut(5000)]) 56 | .then((code) => { 57 | console.log(code) 58 | 59 | if (code === 'Not Available') { 60 | result['content'] = '该节点未解锁 YouTube Premium' 61 | //return 62 | } else if (code === "timeout") { 63 | result['content'] = "测试超时" 64 | } else { 65 | result['content'] = '该节点解锁 YouTube Premium ➟ ⟦'+flags.get(code.toUpperCase())+" 地区⟧" 66 | } 67 | $notify(result["title"], output, result["content"], link) 68 | $done() 69 | }) 70 | .finally(() => { 71 | $done(result) 72 | }) 73 | })() 74 | 75 | function timeOut(delay) { 76 | return new Promise((resolve, reject) => { 77 | setTimeout(() => { 78 | //reject(new Error('timeout')) 79 | resolve("timeout") 80 | }, delay) 81 | }) 82 | } 83 | 84 | 85 | 86 | function test() { 87 | return new Promise((resolve, reject) => { 88 | let option = { 89 | url: BASE_URL, 90 | headers: { 91 | 'User-Agent': 92 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 93 | 'Accept-Language': 'en', 94 | }, 95 | } 96 | $task.fetch(option).then(response=> { 97 | let data = response.body 98 | console.log(response.statusCode) 99 | if (response.statusCode !== 200) { 100 | reject('Error') 101 | return 102 | } 103 | 104 | if (data.indexOf('Premium is not available in your country') !== -1) { 105 | resolve('Not Available') 106 | return 107 | } 108 | 109 | let region = '' 110 | let re = new RegExp('"countryCode":"(.*?)"', 'gm') 111 | let result = re.exec(data) 112 | if (result != null && result.length === 2) { 113 | region = result[1] 114 | } else if (data.indexOf('www.google.cn') !== -1) { 115 | region = 'CN' 116 | } else { 117 | region = 'US' 118 | } 119 | resolve(region) 120 | }) 121 | }) 122 | } 123 | -------------------------------------------------------------------------------- /TikTok_Rewrite.list: -------------------------------------------------------------------------------- 1 | hostname = *.musical.ly, *.tiktokv.com,*.tiktokcdn.com, api*.amemv.com, aweme*.snssdk.com 2 | 3 | (.*video_id=\w{32})(.*watermark=)(.*) url 302 $1 4 | (?<=(carrier|account|sys)_region=)CN url 307 JP 5 | (?<=version_code=)\d{1,}.\d{1}\.\d{1} url 307 8.4.0 6 | ;(如果想解锁美区tiktok将此条注释) 7 | 8 | -------------------------------------------------------------------------------- /img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/.DS_Store -------------------------------------------------------------------------------- /img/dragonball/1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/1.PNG -------------------------------------------------------------------------------- /img/dragonball/10.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/10.PNG -------------------------------------------------------------------------------- /img/dragonball/11.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/11.PNG -------------------------------------------------------------------------------- /img/dragonball/12.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/12.PNG -------------------------------------------------------------------------------- /img/dragonball/13.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/13.PNG -------------------------------------------------------------------------------- /img/dragonball/14.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/14.PNG -------------------------------------------------------------------------------- /img/dragonball/15.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/15.PNG -------------------------------------------------------------------------------- /img/dragonball/16.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/16.PNG -------------------------------------------------------------------------------- /img/dragonball/17.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/17.PNG -------------------------------------------------------------------------------- /img/dragonball/18.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/18.PNG -------------------------------------------------------------------------------- /img/dragonball/19.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/19.PNG -------------------------------------------------------------------------------- /img/dragonball/2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/2.PNG -------------------------------------------------------------------------------- /img/dragonball/20.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/20.PNG -------------------------------------------------------------------------------- /img/dragonball/21.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/21.PNG -------------------------------------------------------------------------------- /img/dragonball/22.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/22.PNG -------------------------------------------------------------------------------- /img/dragonball/23.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/23.PNG -------------------------------------------------------------------------------- /img/dragonball/24.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/24.PNG -------------------------------------------------------------------------------- /img/dragonball/25.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/25.PNG -------------------------------------------------------------------------------- /img/dragonball/26.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/26.PNG -------------------------------------------------------------------------------- /img/dragonball/27.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/27.PNG -------------------------------------------------------------------------------- /img/dragonball/28.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/28.PNG -------------------------------------------------------------------------------- /img/dragonball/29.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/29.PNG -------------------------------------------------------------------------------- /img/dragonball/3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/3.PNG -------------------------------------------------------------------------------- /img/dragonball/30.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/30.PNG -------------------------------------------------------------------------------- /img/dragonball/31.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/31.PNG -------------------------------------------------------------------------------- /img/dragonball/32.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/32.PNG -------------------------------------------------------------------------------- /img/dragonball/33.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/33.PNG -------------------------------------------------------------------------------- /img/dragonball/34.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/34.PNG -------------------------------------------------------------------------------- /img/dragonball/4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/4.PNG -------------------------------------------------------------------------------- /img/dragonball/7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/7.PNG -------------------------------------------------------------------------------- /img/dragonball/8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/8.PNG -------------------------------------------------------------------------------- /img/dragonball/9.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/dragonball/9.PNG -------------------------------------------------------------------------------- /img/others/lee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/others/lee.png -------------------------------------------------------------------------------- /img/policy/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/apple.png -------------------------------------------------------------------------------- /img/policy/as.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/as.PNG -------------------------------------------------------------------------------- /img/policy/cn.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/cn.PNG -------------------------------------------------------------------------------- /img/policy/cn0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/cn0.PNG -------------------------------------------------------------------------------- /img/policy/downloads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/downloads.png -------------------------------------------------------------------------------- /img/policy/eu.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/eu.PNG -------------------------------------------------------------------------------- /img/policy/final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/final.png -------------------------------------------------------------------------------- /img/policy/hk.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/hk.PNG -------------------------------------------------------------------------------- /img/policy/jp.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/jp.PNG -------------------------------------------------------------------------------- /img/policy/mine.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/mine.PNG -------------------------------------------------------------------------------- /img/policy/mo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/mo.PNG -------------------------------------------------------------------------------- /img/policy/netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/netflix.png -------------------------------------------------------------------------------- /img/policy/proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/proxy.png -------------------------------------------------------------------------------- /img/policy/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/telegram.png -------------------------------------------------------------------------------- /img/policy/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/us.png -------------------------------------------------------------------------------- /img/policy/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/youtube.png -------------------------------------------------------------------------------- /img/policy/ytb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/policy/ytb.png -------------------------------------------------------------------------------- /img/southpark/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/.DS_Store -------------------------------------------------------------------------------- /img/southpark/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/1.png -------------------------------------------------------------------------------- /img/southpark/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/10.png -------------------------------------------------------------------------------- /img/southpark/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/2.png -------------------------------------------------------------------------------- /img/southpark/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/3.png -------------------------------------------------------------------------------- /img/southpark/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/4.png -------------------------------------------------------------------------------- /img/southpark/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/5.png -------------------------------------------------------------------------------- /img/southpark/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/6.png -------------------------------------------------------------------------------- /img/southpark/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/7.png -------------------------------------------------------------------------------- /img/southpark/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/8.png -------------------------------------------------------------------------------- /img/southpark/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/southpark/9.png -------------------------------------------------------------------------------- /img/sub/Dler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/2c2a1732a58c37ecb940b8ae02d1178e68bec518/img/sub/Dler.png -------------------------------------------------------------------------------- /remote-resource.json: -------------------------------------------------------------------------------- 1 | { 2 | "server_remote": [ 3 | "https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server.txt, tag=Sample-01", 4 | "https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt, tag=Sample-02" 5 | ], 6 | "filter_remote": [ 7 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/Advertising.list, tag=去广告, enabled=true", 8 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/Apple.list, tag=Apple服务, enabled=true", 9 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/China.list, tag=国内网站, enabled=true", 10 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/DomesticMedia.list, tag=国内视频, enabled=true", 11 | "http://cloudcompute.lbyczf.com/x-rule-set?url=https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Netflix.list, tag=📺Netflix, force-policy=📺 Netflix, enabled=true", 12 | "http://cloudcompute.lbyczf.com/x-rule-set?url=https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Youtube.list, tag=🎬Youtube, force-policy=🎬 Youtube, enabled=true", 13 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/ForeignMedia.list, tag=国外视频, enabled=true", 14 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/Global.list, tag=国外网站, enabled=true", 15 | "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Quantumult/X/Filter/Hijacking.list, tag=运营商劫持, enabled=true" 16 | ], 17 | "rewrite_remote": [ 18 | " http://cloudcompute.lbyczf.com/quanx-rewrite, tag=Lhie1复写" 19 | ] 20 | } 21 | --------------------------------------------------------------------------------