├── Script ├── BiliBili │ ├── README.md │ ├── protobuf │ │ ├── @protobuf-ts │ │ │ └── runtime-rpc │ │ │ │ ├── service-type.js │ │ │ │ └── reflection-info.js │ │ └── bilibili │ │ │ ├── app │ │ │ ├── archive │ │ │ │ └── middleware │ │ │ │ │ └── preload.js │ │ │ └── playerunite │ │ │ │ └── playerunite.js │ │ │ └── pagination │ │ │ └── pagination.js │ ├── Skin │ │ └── BiliBili.Modified.sgmodule │ ├── biliSkin.sgmodule │ ├── AD │ │ └── bilibili.sgmodule │ ├── biliCrack.js │ └── BiliBili.Series.sgmodule ├── VideoQQ │ └── VideoQQ.ADBlock.sgmodule ├── KWYY │ ├── kwyy.sgmodule │ └── kwyy_crack.js ├── XMLY │ ├── xmly_ck.js │ └── xmly.sgmodule ├── TikTok │ ├── TiKTok-KR.sgmodule │ ├── TiKTok-TW.sgmodule │ ├── TiKTok-JP.sgmodule │ ├── TiKTok-US.sgmodule │ └── Tiktok.js ├── WPS │ ├── wps.sgmodule │ ├── docer-time.js │ ├── docer.js │ └── wps.js ├── dyls │ ├── dyls.sgmodule │ └── dyls.js ├── BDWP │ ├── BaiduCloud.sgmodule │ └── BaiduCloud.js ├── AMAP │ └── amap.sgmodule ├── boxjs │ ├── boxjs.json │ ├── biliad.json │ └── biliskin.json ├── md5.min.js ├── Env.min.js └── Task │ ├── ADrive.js │ ├── nga.js │ ├── CCBLife.js │ └── TieBa.js ├── Task ├── NGA-AutoSign.sgmodule ├── amap-AutoSign.sgmodule ├── CCBLife-AutoSign.sgmodule ├── ximalaya-AutoSign.sgmodule ├── TieBa-AutoSign.sgmodule ├── Bilibili-AutoSign.sgmodule ├── videoqq-AutoSign.sgmodule ├── All-AutoSign.sgmodule └── GetCookie.sgmodule └── LICENSE /Script/BiliBili/README.md: -------------------------------------------------------------------------------- 1 | # BiliBili 2 | 本项目已单独转移至[BILIBILI](https://github.com/ClydeTime/BiliBili),故本页面内容弃用不再更新。 -------------------------------------------------------------------------------- /Task/NGA-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=NGA签到 2 | #!desc=NGA刮墙 3 | #!category= MK 4 | # 脚本作者:MartinsKing(@ClydeTime) 5 | # 更新时间:2023-04-16 6 | 7 | [Script] 8 | NGA刮墙 = type=cron,cronexp=40 8 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/nga.js 9 | -------------------------------------------------------------------------------- /Task/amap-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=高德打车签到 2 | #!desc=高德打车签到 3 | #!category= MK 4 | # 脚本作者:灰佬(苍井灰灰) 5 | # 更新时间:2023-09-23 6 | 7 | [Script] 8 | 高德打车签到 = type=cron, cronexp=1 0 * * *, script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/amap.js, wake-system=1 9 | -------------------------------------------------------------------------------- /Task/CCBLife-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=建行生活签到 2 | #!desc=建行生活自动签到 3 | #!category= MK 4 | # 任务奖励:骑行卡/外卖券 5 | # 脚本作者:FoKit 6 | # 更新时间:2023-09-21 7 | 8 | [Script] 9 | 建行生活签到 = type=cron,cronexp=17 7 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/CCBLife.js 10 | -------------------------------------------------------------------------------- /Task/ximalaya-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=喜马拉雅积分任务 2 | #!desc=每天自动获取喜马拉雅积分 3 | #!category= MK 4 | # 脚本作者:MartinsKing(@ClydeTime) 5 | # 更新时间:2023-04-14 6 | 7 | [Script] 8 | 喜马拉雅签到任务 = type=cron,cronexp=35 8 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/xmly.js,timeout=15,wake-system=1 9 | -------------------------------------------------------------------------------- /Task/TieBa-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=贴吧签到 2 | #!desc=贴吧自动签到 3 | #!category= MK 4 | # 脚本作者:MartinsKing(@ClydeTime) 5 | # 更新时间:2023-04-16 6 | 7 | [Script] 8 | 贴吧签到 = type=cron,cronexp=0 9 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/TieBa.js,wake-system=1,timeout=15,script-update-interval=0 9 | -------------------------------------------------------------------------------- /Script/BiliBili/protobuf/@protobuf-ts/runtime-rpc/service-type.js: -------------------------------------------------------------------------------- 1 | import { normalizeMethodInfo } from "./reflection-info"; 2 | export class ServiceType { 3 | constructor(typeName, methods, options) { 4 | this.typeName = typeName; 5 | this.methods = methods.map(i => normalizeMethodInfo(i, this)); 6 | this.options = options !== null && options !== void 0 ? options : {}; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Script/VideoQQ/VideoQQ.ADBlock.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=📺 VideoQQ: 🛡️ ADBlock 2 | #!desc=腾讯视频:去广告 3 | #!author = @小白脸 4 | #!update = 2023-09-17 5 | #!category= MK 6 | 7 | [Rule] 8 | # > 腾讯视频 去开屏 9 | OR,((DOMAIN,pgdt.gtimg.cn), (AND,((USER-AGENT,live4iphoneRel*), (IP-CIDR,0.0.0.0/0,no-resolve)))),REJECT-DROP 10 | //视频 11 | AND,((PROTOCOL,HTTPS), (DOMAIN,iacc.qq.com)),REJECT-NO-DROP 12 | DOMAIN,config.ab.qq.com,REJECT 13 | -------------------------------------------------------------------------------- /Task/Bilibili-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=Bilibili签到 2 | #!desc=B站自动签到 3 | #!category= MK 4 | # 任务奖励:经验值/硬币/大会员积分等 5 | # 脚本作者:MartinsKing(@ClydeTime) 6 | # ================ Boxjs订阅 ================ 7 | # 订阅地址:https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/boxjs/boxjs.json 8 | # 更新时间:2023-04-14 9 | 10 | [Script] 11 | B站每日任务 = type=cron,cronexp=30 7 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/BiliBili.js 12 | -------------------------------------------------------------------------------- /Task/videoqq-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=腾讯视频会员签到 2 | #!desc=每天腾讯视频自动签到 3 | #!category= MK 4 | # 任务奖励:经验值 5 | # 脚本作者:MartinsKing(@ClydeTime) 6 | # ================ Boxjs订阅 ================ 7 | # 订阅地址:https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/boxjs/boxjs.json 8 | # 更新时间:2023-04-14 9 | 10 | [Script] 11 | 腾讯视频签到任务 = type=cron,cronexp=0 5 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/videoqq.js,timeout=15,wake-system=1 12 | -------------------------------------------------------------------------------- /Script/KWYY/kwyy.sgmodule: -------------------------------------------------------------------------------- 1 | #!name= 酷我音乐破解 2 | #!desc= 解锁VIP【广告➕VIP➕数字➕下载】 3 | #!author= MartinsKing 4 | #!category= MK 5 | 6 | [Script] 7 | 酷我破解 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/.*\.(kuwo|lrts)\.(cn|me)\/(a\.p|music\.pay|viptab|(vip\/(v2|enc)\/(theme|user\/vip|userbase\/vip\?op\=getMCInfo))|(EcomResource|(Mobile)?Ad)Serv(er|ice)).*,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/KWYY/kwyy_crack.js 8 | 9 | [MITM] 10 | hostname = %APPEND% *.kuwo.cn, *.lrts.me 11 | -------------------------------------------------------------------------------- /Script/XMLY/xmly_ck.js: -------------------------------------------------------------------------------- 1 | let headers = $request["headers"]; 2 | headers["cookie"] = 3 | "channel=ios-b1; 1&_device=iPhone&B65F9F9D-AB62-4E15-8815-D8A5D0E36B10&9.1.42 ; impl=com.gemd.iting; c-oper=%E8%81%94%E9%80%9A; net-mode=WIFI; res=1170%2C2532; 1&_token=438475451&C127EB70240CEEDF02ED21A53443C9A1394C357F7A711DC3ECDEDB0BCF6313FA7FAD9FCA1E5187M5D28851CF30B8FE_; idfa=B65F9F9D-AB62-4E15-8815-D8A5D0E36B10; device_model=iPhone%2012%20Pro; XD=MLWBt9QyvUucifxUg0TSATBTe4NbpfPKlagjhAJSLndXM3FhGGq6yxOB20Xm81uDZ78WVaEs4pAtlfBX7ZIN/Q==; fp=0092v7647x2022b2236490501b0000a120212200100000001101411004030"; 4 | $done({ 'headers': headers }); -------------------------------------------------------------------------------- /Script/BiliBili/Skin/BiliBili.Modified.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=📺 BiliBili: 👘 Modified 2 | #!desc=哔哩哔哩:切换皮肤 3 | #!author=MK 4 | 5 | [Script] 6 | BiliBili.Modified.x.resource.show.skin = type=http-response, pattern=^https?:\/\/app\.bilibili\.com\/x\/resource\/show\/skin\?.*, requires-body=1, script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/Modified.js, argument= 7 | BiliBili.Modified.x.v2.account.myinfo = type=http-response, pattern=^https:\/\/app\.bilibili\.com\/x\/v2\/account\/myinfo, requires-body=1, script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/Modified.js, argument= 8 | 9 | [MITM] 10 | hostname = %APPEND% app.bilibili.com 11 | -------------------------------------------------------------------------------- /Script/BiliBili/biliSkin.sgmodule: -------------------------------------------------------------------------------- 1 | #!name= B站皮肤|共享 2 | #!desc= 修改等级,会员状态,皮肤,硬币(无实际效果)等 3 | #!author= MartinsKing 4 | 5 | [URL Rewrite] 6 | ^https?:\/\/grpc\.biliapi\.net\/bilibili\.pgc\.gateway\.player\.v2\.PlayURL\/PlayView _ reject 7 | 8 | [Script] 9 | B站共享 = type=http-request,requires-body=0,pattern=^https?:\/\/ap(i|p)\.bilibili\.com\/bilibili(.*)\/(View|Play(URL|View|Conf|erOnline)|MainList|ViewProgress)$,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/biliCrack.js 10 | B站皮肤 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/ap(i|p)\.bilibili\.com\/x\/(vip|v2|resource)\/(space|account|web|price|top_panel_info|show)(\/|\?)(mine|myinfo|access|vip_center|panel|_bridge|skin\?).*,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/biliSkin.js 11 | 12 | [MITM] 13 | hostname = %APPEND% api.bilibili.com, app.bilibili.com, grpc.biliapi.net 14 | -------------------------------------------------------------------------------- /Script/TikTok/TiKTok-KR.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=TikTok-KR 2 | #!desc=解锁 TikTok 韩国 3 | #!category= MK 4 | 5 | [URL Rewrite] 6 | 7 | (?<=_region=)CN(?=&) KR 307 8 | (?<=_region=)cn(?=&) kr 307 9 | (?<=&mcc_mnc=)460[0-1][0-9](?=&) 45005 307 10 | ^(https?:\/\/(tnc|dm)[\w-]+\.\w+\.com\/.+)(\?)(.+) $1$3 302 11 | (?<=&carrier=)[%A-Z0-9]+(?=&) SKT 307 12 | (?<=tz_name=)Asia/Shanghai(?=&) Asia/Seoul 307 13 | (?<=timezone=)8(?=&) 9 307 14 | (?<=eme\/v)2(?=\/f\w{2}d\/\?.*) 1 302 15 | 16 | [Script] 17 | http-response https?:\/\/.*\.tiktokv\.com\/aweme\/v\d\/(feed|mix\/aweme|aweme\/post|(multi\/)?aweme\/detail|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list|aweme\/(favorite|listcollection)) script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/TikTok/Tiktok.js, requires-body=true, timeout=10, tag=去水印 18 | 19 | [MITM] 20 | hostname = %APPEND% *.tiktokv.com, *.byteoversea.com, *.tik-tokapi.com 21 | -------------------------------------------------------------------------------- /Script/TikTok/TiKTok-TW.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=TikTok-TW 2 | #!desc=解锁 TikTok 台湾 3 | #!category= MK 4 | 5 | [URL Rewrite] 6 | 7 | (?<=_region=)CN(?=&) TW 307 8 | (?<=_region=)cn(?=&) tw 307 9 | (?<=&mcc_mnc=)460[0-1][0-9](?=&) 46692 307 10 | ^(https?:\/\/(tnc|dm)[\w-]+\.\w+\.com\/.+)(\?)(.+) $1$3 302 11 | (?<=&carrier=)[%A-Z0-9]+(?=&) %E4%B8%AD%E8%8F%AF%E9%9B%BB%E4%BF%A1 307 12 | (?<=tz_name=)Asia/Shanghai(?=&) Asia/Taipei 307 13 | (?<=eme\/v)2(?=\/f\w{2}d\/\?.*) 1 302 14 | 15 | [Script] 16 | http-response https?:\/\/.*\.tiktokv\.com\/aweme\/v\d\/(feed|mix\/aweme|aweme\/post|(multi\/)?aweme\/detail|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list|aweme\/(favorite|listcollection)) script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/TikTok/Tiktok.js, requires-body=true, timeout=10, tag=去水印 17 | 18 | [MITM] 19 | hostname = %APPEND% *.tiktokv.com, *.byteoversea.com, *.tik-tokapi.com 20 | -------------------------------------------------------------------------------- /Script/TikTok/TiKTok-JP.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=TikTok-JP 2 | #!desc=解锁 TikTok 日本 3 | #!category= MK 4 | 5 | [URL Rewrite] 6 | 7 | (?<=_region=)CN(?=&) JP 307 8 | (?<=_region=)cn(?=&) jp 307 9 | (?<=&mcc_mnc=)460[0-1][0-9](?=&) 44001 307 10 | ^(https?:\/\/(tnc|dm)[\w-]+\.\w+\.com\/.+)(\?)(.+) $1$3 302 11 | (?<=&carrier=)[%A-Z0-9]+(?=&) docomo 307 12 | (?<=tz_name=)Asia/Shanghai(?=&) Asia/Tokyo 307 13 | (?<=timezone=)8(?=&) 9 307 14 | (?<=eme\/v)2(?=\/f\w{2}d\/\?.*) 1 302 15 | 16 | [Script] 17 | http-response https?:\/\/.*\.tiktokv\.com\/aweme\/v\d\/(feed|mix\/aweme|aweme\/post|(multi\/)?aweme\/detail|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list|aweme\/(favorite|listcollection)) script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/TikTok/Tiktok.js, requires-body=true, timeout=10, tag=去水印 18 | 19 | [MITM] 20 | hostname = %APPEND% *.tiktokv.com, *.byteoversea.com, *.tik-tokapi.com 21 | -------------------------------------------------------------------------------- /Script/TikTok/TiKTok-US.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=TikTok-US 2 | #!desc=解锁 TikTok 美国 3 | #!category= MK 4 | 5 | [URL Rewrite] 6 | 7 | (?<=_region=)CN(?=&) US 307 8 | (?<=_region=)cn(?=&) us 307 9 | (?<=&mcc_mnc=)460[0-1][0-9](?=&) 310005 307 10 | ^(https?:\/\/(tnc|dm)[\w-]+\.\w+\.com\/.+)(\?)(.+) $1$3 302 11 | (?<=&carrier=)[%A-Z0-9]+(?=&) Verizon 307 12 | (?<=tz_name=)Asia/Shanghai(?=&) America/New_York 307 13 | (?<=timezone=)8(?=&) -4 307 14 | (?<=eme\/v)2(?=\/f\w{2}d\/\?.*) 1 302 15 | 16 | [Script] 17 | http-response https?:\/\/.*\.tiktokv\.com\/aweme\/v\d\/(feed|mix\/aweme|aweme\/post|(multi\/)?aweme\/detail|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list|aweme\/(favorite|listcollection)) script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/TikTok/Tiktok.js, requires-body=true, timeout=10, tag=去水印 18 | 19 | [MITM] 20 | hostname = %APPEND% *.tiktokv.com, *.byteoversea.com, *.tik-tokapi.com 21 | -------------------------------------------------------------------------------- /Script/WPS/wps.sgmodule: -------------------------------------------------------------------------------- 1 | #!name= WPS会员 2 | #!desc= 会员+稻壳 3 | #!author= MartinsKing 4 | #!category= MK 5 | 6 | [Script] 7 | 8 | WPS超级会员 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/(drive|account)\.wps\.cn\/api\/(users|v3\/(spaces|mine\/vips)),script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/WPS/wps.js 9 | 稻壳会员时间 = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/(client|userinfo)\.docer\.wps\.cn\/(android\/mb\/buy|user\/v1\/vip\_dl\_times),script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/WPS/docer-time.js 10 | WPS稻壳会员 = type=http-request,requires-body=0,pattern=^https?:\/\/.+\.(docer.)?wps.cn\/(download\/v1\/ios|user\/v1\/vip|android\/mb\/buy|partner\/invoke\/usable|(api|rank)\/v1(\/mobile\/mb)?\/detail),script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/WPS/docer.js 11 | 12 | [MITM] 13 | hostname = %APPEND% *.docer.wps.cn, vipapi.wps.cn, account.wps.cn, drive.wps.cn 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 MartinsKing 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Script/dyls/dyls.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=电影猎手去广告 2 | #!desc=无法完全去除 3 | #!update= 2024-05-21 4 | #!author= MartinsKing 5 | #!category= MK 6 | 7 | [Rule] 8 | DOMAIN,647bc185.szrtcpa.com,REJECT 9 | 10 | [URL Rewrite] 11 | ^https?:\/\/app-v1\.ecoliving168\.com\/api\/v\d\/advert\/config - reject 12 | ^https?:\/\/app-v1\.ecoliving168\.com\/api\/v\d\/app\/config - reject 13 | ^https?:\/\/vgdkop2rmf\.kitpg\.cn\/api\/v1\/advert\/config - reject 14 | ^https?:\/\/vgdkop2rmf\.kitpg\.cn\/api\/v1\/app\/config - reject 15 | # 去除升级提示 16 | ^https?:\/\/app-v1\.ecoliving168\.com\/api\/v\d\/app\/check_update - reject 17 | ^https?:\/\/vgdkop2rmf\.kitpg\.cn\/api\/v\d\/app\/check_update - reject 18 | ^https?:\/\/mdisk.oss-cn-hangzhou\.aliyuncs\.com\/domain_v5\.json - reject 19 | ^https?:\/\/bgg\.baidu\.com\/bgg\/produce - reject 20 | 21 | [Map Local] 22 | ^https?:\/\/df-common-files\.s\d\.ap-southeast-\d\.amazonaws\.com\/files\/domain_v5\.json data-type=text data="{}" 23 | 24 | [Script] 25 | 首页去Ad = type=http-response,requires-body=1,max-size=0,pattern=^https?:\/\/app-v1\.ecoliving168\.com\/api\/v\d\/movie\/index_recommend,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/dyls/dyls.js 26 | 27 | [MITM] 28 | hostname = %APPEND% app-v1.ecoliving168.com, vgdkop2rmf.kitpg.cn -------------------------------------------------------------------------------- /Script/BDWP/BaiduCloud.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=百度网盘优化 2 | #!desc=解锁在线视频倍率/清晰度/皮肤/头像框/会员等级 3 | #!original author: NobyDa 4 | #!modified by: MartinsKing 5 | #!category= MK 6 | 7 | [Script] 8 | BaiduCloud = type=http-response,pattern=^https:\/\/pan\.baidu\.com\/((rest\/\d\.\d\/membership\/(volume|product|user))|cms\/config\?method=query|act\/v2\/skin\/(userset|inuse)|api\/user\/getinfo|wap\/vip\/memberChannel).*,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BDWP/BaiduCloud.js,script-update-interval=0 9 | 10 | [Map Local] 11 | ^https?:\/\/pan\.baidu\.com\/act\/v\d\/bchannel\/list data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 12 | ^https?:\/\/pan\.baidu\.com\/act\/v\d\/welfare\/list data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 13 | ^https?:\/\/pan\.baidu\.com\/rest\/2\.0\/pcs\/ad data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 14 | ^https?:\/\/pan\.baidu\.com\/act\/api\/activityentry data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 15 | ^https?:\/\/update\.pan\.baidu\.com\/statistics\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 16 | ^https:\/\/pan\.baidu\.com\/api\/getsyscfg\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-200.txt" 17 | 18 | [MITM] 19 | hostname = %APPEND% pan.baidu.com, update.pan.baidu.com 20 | -------------------------------------------------------------------------------- /Task/All-AutoSign.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=签到合集(MartinsKing) 2 | #!desc=包括腾讯视频、喜马拉雅、B站、NGA、贴吧、建行生活、高德打车、阿里云盘, 详细使用规则请移步各个脚本阅读注释 3 | #!category= MK 4 | # 脚本作者:MartinsKing(@ClydeTime) 5 | # ================ Boxjs订阅 ================ 6 | # 订阅地址:https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/boxjs/boxjs.json 7 | # 更新时间:2023-11-07 8 | 9 | [Script] 10 | B站每日任务 = type=cron,cronexp=30 7 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/BiliBili.js,wake-system=1,timeout=15 11 | NGA刮墙 = type=cron,cronexp=40 8 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/nga.js,wake-system=1,timeout=15 12 | 贴吧签到 = type=cron,cronexp=0 9 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/TieBa.js,wake-system=1,timeout=15 13 | 腾讯视频签到 = type=cron,cronexp=0 5 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/videoqq.js,wake-system=1,timeout=15 14 | 喜马拉雅签到 = type=cron,cronexp=35 8 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/xmly.js,wake-system=1,timeout=15 15 | 建行生活签到 = type=cron,cronexp=17 7 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/CCBLife.js,wake-system=1,timeout=15 16 | 高德打车签到 = type=cron,cronexp=1 0 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/amap.js,wake-system=1,timeout=15 17 | 阿里云盘签到 = type=cron,cronexp=12 0 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/ADrive.js,wake-system=1,timeout=15 18 | -------------------------------------------------------------------------------- /Script/AMAP/amap.sgmodule: -------------------------------------------------------------------------------- 1 | #!name= 高德地图去广告 2 | #!desc= 搬运自RuCu6 3 | #!author= RuCu6 4 | #!category= MK 5 | 6 | [Rule] 7 | DOMAIN,amap-aos-info-nogw.amap.com,REJECT 8 | DOMAIN,amdc.m.taobao.com,REJECT 9 | DOMAIN,awaken.amap.com,REJECT 10 | DOMAIN,free-aos-cdn-image.amap.com,REJECT 11 | 12 | [URL Rewrite] 13 | ^https?:\/\/amdc\.m\.taobao\.com - reject 14 | ^https?:\/\/mps\.amap\.com\/ws\/mps\/scene\? - reject 15 | 16 | [Map Local] 17 | ^https:\/\/m5\.amap\.com\/ws\/faas\/amap-navigation\/(card-service-route-plan|main-page-(assets|location)) data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 18 | ^https:\/\/m5\.amap\.com\/ws\/shield\/(search\/new_hotword|scene\/recommend|search_poi\/(city_feed|tips_adv)) data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 19 | ^https:\/\/m5\.amap\.com\/ws\/(mapapi\/hint_text\/offline_data|message\/notice\/list|valueadded\/weather|asa\/ads_attribution)\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 20 | ^https:\/\/sns\.amap\.com\/ws\/(msgbox\/pull(_mp)?|userview\/footprint) data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 21 | ^https:\/\/m5-zb\.amap\.com\/ws\/boss\/order(_web\/friendly_information|\/car\/king_toolbox_car_bubble)\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 22 | 23 | [Script] 24 | 去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/m5\.amap\.com\/ws\/shield\/(search\/(poi\/detail|nearbyrec_smart)|dsp\/profile\/index\/nodefaas|frogserver\/aocs\/updatable|search_poi\/tips_operation_location),script-path=https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/amap.js 25 | 去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/(m5|m5-zb)\.amap\.com\/ws\/(mapapi\/poi\/infolite|valueadded\/alimama\/splash_screen|promotion-web\/resource),script-path=https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/amap.js 26 | 去广告 = type=http-response,requires-body=1,max-size=0,pattern=^https:\/\/m5\.amap\.com\/ws\/faas\/amap-navigation\/(main-page|usr-profile-fc\/(highlightV2|home)),script-path=https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/amap.js 27 | 28 | [MITM] 29 | hostname = %INSERT% m5*.amap.com, mps.amap.com, sns.amap.com 30 | -------------------------------------------------------------------------------- /Script/BiliBili/protobuf/@protobuf-ts/runtime-rpc/reflection-info.js: -------------------------------------------------------------------------------- 1 | import { lowerCamelCase } from "@protobuf-ts/runtime"; 2 | /** 3 | * Turns PartialMethodInfo into MethodInfo. 4 | */ 5 | export function normalizeMethodInfo(method, service) { 6 | var _a, _b, _c; 7 | let m = method; 8 | m.service = service; 9 | m.localName = (_a = m.localName) !== null && _a !== void 0 ? _a : lowerCamelCase(m.name); 10 | // noinspection PointlessBooleanExpressionJS 11 | m.serverStreaming = !!m.serverStreaming; 12 | // noinspection PointlessBooleanExpressionJS 13 | m.clientStreaming = !!m.clientStreaming; 14 | m.options = (_b = m.options) !== null && _b !== void 0 ? _b : {}; 15 | m.idempotency = (_c = m.idempotency) !== null && _c !== void 0 ? _c : undefined; 16 | return m; 17 | } 18 | /** 19 | * Read custom method options from a generated service client. 20 | * 21 | * @deprecated use readMethodOption() 22 | */ 23 | export function readMethodOptions(service, methodName, extensionName, extensionType) { 24 | var _a; 25 | const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options; 26 | return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : undefined; 27 | } 28 | export function readMethodOption(service, methodName, extensionName, extensionType) { 29 | var _a; 30 | const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options; 31 | if (!options) { 32 | return undefined; 33 | } 34 | const optionVal = options[extensionName]; 35 | if (optionVal === undefined) { 36 | return optionVal; 37 | } 38 | return extensionType ? extensionType.fromJson(optionVal) : optionVal; 39 | } 40 | export function readServiceOption(service, extensionName, extensionType) { 41 | const options = service.options; 42 | if (!options) { 43 | return undefined; 44 | } 45 | const optionVal = options[extensionName]; 46 | if (optionVal === undefined) { 47 | return optionVal; 48 | } 49 | return extensionType ? extensionType.fromJson(optionVal) : optionVal; 50 | } 51 | -------------------------------------------------------------------------------- /Script/dyls/dyls.js: -------------------------------------------------------------------------------- 1 | const url = new URL($request.url); 2 | const PATH = url?.pathname; 3 | let body = JSON.parse($response.body); 4 | switch (PATH) { 5 | case "/api/v1/movie/index_recommend": //首页导航栏 6 | body.data = body.data.map(data => { 7 | if (data.layout === "index_recommend_carousel") { 8 | data.list = data.list.filter(list => list.type === 1) 9 | return data; 10 | }else if (data.layout === "advert_self") { 11 | return undefined; 12 | } 13 | return data; 14 | }); 15 | body.data = body.data.filter(fix => fix !== undefined); 16 | } 17 | 18 | $done({ body: JSON.stringify(body) }); 19 | 20 | 21 | //https://github.com/NanoCat-Me/URL 22 | function URL(a){return new class{constructor(a,b=void 0){return a=this.parse(a,b),this}parse(a,b=void 0){const c=/(?:(?\w+:)\/\/(?:(?[^\s:"]+)(?::(?[^\s:"]+))?@)?(?[^\s@/]+))?(?\/?[^\s@?]+)?(?\?[^\s?]+)?/,d=/(?.+):(?\d+)$/;if(a=a.match(c)?.groups||{},b&&(b=b?.match(c)?.groups||{},!b.protocol||!b.hostname))throw new Error(`🚨 ${name}, ${b} is not a valid URL`);if((a.protocol||b?.protocol)&&(this.protocol=a.protocol||b.protocol),(a.username||b?.username)&&(this.username=a.username||b.username),(a.password||b?.password)&&(this.password=a.password||b.password),(a.host||b?.host)&&(this.host=a.host||b.host,Object.freeze(this.host),this.hostname=this.host.match(d)?.groups.hostname??this.host,this.port=this.host.match(d)?.groups.port??""),!(a.pathname||b?.pathname))this.pathname="";else if(this.pathname=a.pathname||b?.pathname,this.pathname.startsWith("/")||(this.pathname="/"+this.pathname),this.paths=this.pathname.split("/").filter(Boolean),Object.freeze(this.paths),this.paths){const a=this.paths[this.paths.length-1];if(a?.includes(".")){const b=a.split(".");this.format=b[b.length-1],Object.freeze(this.format)}}if((a.search||b?.search)&&(this.search=a.search||b.search,Object.freeze(this.search),this.search)){const a=this.search.slice(1).split("&").map(a=>a.split("="));this.searchParams=new Map(a)}return this.harf=this.toString(),Object.freeze(this.harf),this}toString(){let a="";return this.protocol&&(a+=this.protocol+"//"),this.username&&(a+=this.username+(this.password?":"+this.password:"")+"@"),this.hostname&&(a+=this.hostname),this.port&&(a+=":"+this.port),this.pathname&&(a+=this.pathname),this.searchParams&&(a+="?"+Array.from(this.searchParams).map(a=>a.join("=")).join("&")),a}toJSON(){return JSON.stringify({...this})}}(a)} -------------------------------------------------------------------------------- /Script/TikTok/Tiktok.js: -------------------------------------------------------------------------------- 1 | /* 2 | 搬运自Tartarus2014 3 | */ 4 | var watermark = (data) => { 5 | try { 6 | let body = JSON.parse(data); 7 | if (body.data) body.data = Follow(body.data); 8 | if (body.aweme_list) body.aweme_list = Feed(body.aweme_list); 9 | if (body.aweme_detail) body.aweme_detail = Share(body.aweme_detail); 10 | if (body.aweme_details) body.aweme_details = Feed(body.aweme_details); 11 | $done({ body: JSON.stringify(body) }); 12 | } catch (err) { 13 | console.log("替换异常\n" + err); 14 | $done({}); 15 | } 16 | } 17 | 18 | watermark($response.body); 19 | 20 | function Follow(data) { 21 | if (data && data.length > 0) { 22 | for (let i in data) { 23 | if (data[i].aweme.video) download_list(data[i].aweme); 24 | } 25 | } 26 | return data; 27 | } 28 | 29 | function Feed(aweme_list) { 30 | if (aweme_list && aweme_list.length > 0) { 31 | aweme_list = aweme_list.filter(i => !(i.is_ads === true)); 32 | for (let i in aweme_list) { 33 | if (aweme_list[i].video) { 34 | download_list(aweme_list[i]); 35 | } 36 | } 37 | } 38 | return aweme_list; 39 | } 40 | 41 | function Share(aweme_detail) { 42 | if (aweme_detail.video) download_list(aweme_detail); 43 | return aweme_detail; 44 | } 45 | 46 | function download_list(list) { 47 | list.prevent_download = false; 48 | list.status.reviewed = 1; 49 | list.video_control.allow_download = true; 50 | list.video_control.prevent_download_type = 0; 51 | delete list.video.misc_download_addrs; 52 | list.video.download_addr = list.video.play_addr; 53 | list.video.has_watermark = false; 54 | list.video.download_suffix_logo_addr = list.video.play_addr; 55 | list.aweme_acl.download_general.mute = false; 56 | if (list.aweme_acl.download_general.extra) { 57 | delete list.aweme_acl.download_general.extra; 58 | list.aweme_acl.download_general.code = 0; 59 | list.aweme_acl.download_general.show_type = 2; 60 | list.aweme_acl.download_general.transcode = 3; 61 | list.aweme_acl.download_mask_panel = list.aweme_acl.download_general; 62 | list.aweme_acl.share_general = list.aweme_acl.download_general; 63 | } 64 | if (list.image_post_info && list.image_post_info.images) { 65 | for (let i in list.image_post_info.images) { 66 | list.image_post_info.images[i].owner_watermark_image.url_list = list.image_post_info.images[i].display_image.url_list; 67 | list.image_post_info.images[i].user_watermark_image.url_list = list.image_post_info.images[i].thumbnail.url_list; 68 | } 69 | list.without_watermark = true; 70 | } 71 | return list; 72 | } 73 | -------------------------------------------------------------------------------- /Script/BiliBili/AD/bilibili.sgmodule: -------------------------------------------------------------------------------- 1 | #!name= Bilibili 去广告 2 | #!desc= Bilibili app removes ad. 3 | 4 | 5 | [URL Rewrite] 6 | ^https:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.interface\.v1\.Search\/DefaultWords$ - reject 7 | 8 | 9 | [Map Local] 10 | # 去除搜索中的大家都在搜 11 | ^https?:\/\/api\.vc\.bilibili\.com\/search_svr\/v\d\/Search\/recommend_words data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 12 | # 去除动态中的话题 13 | ^https?:\/\/api\.vc\.bilibili\.com\/topic_svr\/v1\/topic_svr data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 14 | # 去除动态中的最常访问 15 | ^https?:\/\/api\.vc\.bilibili\.com\/dynamic_svr\/v1\/dynamic_svr\/mix_uplist data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 16 | # 可能的一些推广(beta) 17 | ^https?:\/\/api\.bilibili\.com\/pgc\/season\/app\/related\/recommend\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 18 | # BiliBili漫画去广告 19 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/Flash data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 20 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/ListFlash data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 21 | ^https:\/\/api\.live\.bilibili\.com\/xlive\/e-commerce-interface\/v1\/ecommerce-user\/get_shopping_info\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 22 | 23 | 24 | [Script] 25 | BiliBili.ADBlock.json = type=http-response,pattern=^https?:\/\/api\.live\.bilibili\.com\/xlive\/app-room\/v1\/index\/getInfoByRoom,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/ADBlock.js,script-update-interval=0 26 | BiliBili.ADBlock.json = type=http-response,pattern=^https:\/\/api\.bilibili\.com\/pgc\/page\/(bangumi|cinema\/tab\?),requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/ADBlock.js,script-update-interval=0 27 | BiliBili.ADBlock.json = type=http-response,pattern=^https:\/\/app\.bilibili\.com\/x\/v2\/(splash\/(brand\/list|event\/list2|list|show)|feed\/index(\/story)?),requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/ADBlock.js,script-update-interval=0 28 | BiliBili.ADBlock.proto = type=http-response,pattern=^https:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.(view\.v1\.View\/View|dynamic\.v2\.Dynamic\/DynAll|playurl\.v1\.PlayURL\/PlayView)$,requires-body=1,binary-body-mode=1,max-size=0,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/ADBlock.js,script-update-interval=0 29 | 30 | 31 | [MITM] 32 | hostname = %APPEND% app.bilibili.com,api.bilibili.com,api.live.bilibili.com,api.vc.bilibili.com,grpc.biliapi.net,manga.bilibili.com 33 | -------------------------------------------------------------------------------- /Script/boxjs/boxjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "clydetime.app.sub", 3 | "name": "MartinsKing 脚本订阅", 4 | "author": "@MartinsKing", 5 | "icon": "https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Script/Tips/IMG_4128.png", 6 | "repo": "https://github.com/ClydeTime/Surge/tree/main/Script", 7 | "apps": 8 | [ 9 | { 10 | "id": "bilibili.com", 11 | "name": "bilibili", 12 | "author": "@MartinsKing", 13 | "script": "https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/BiliBili.js", 14 | "descs_html": 15 | [ 16 | "" 17 | ], 18 | "icons": 19 | [ 20 | "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/bilibili.png", 21 | "https://raw.githubusercontent.com/Orz-3/mini/master/Color/bilibili.png" 22 | ], 23 | "keys": 24 | [ 25 | "@bilibili_daily_bonus.Settings" 26 | ], 27 | "settings": 28 | [ 29 | { 30 | "id": "@bilibili_daily_bonus.Settings.exec", 31 | "name": "投币次数", 32 | "val": "5", 33 | "type": "text", 34 | "desc": "投币次数(用户自行设置,默认5次)" 35 | }, 36 | { 37 | "id": "@bilibili_daily_bonus.Settings.charge_mid", 38 | "name": "被充电用户id", 39 | "type": "text", 40 | "desc": "不填写即为自己, 填写后为指定用户id充电" 41 | }, 42 | { 43 | "id": "@bilibili_daily_bonus.Settings.bp_num", 44 | "name": "充电B币数", 45 | "val": "5", 46 | "type": "text", 47 | "desc": "充电B币数量(对应每月B币券, 默认5B币, 防勿充可更改为0)" 48 | } 49 | ] 50 | }, 51 | { 52 | "id": "ximalaya.com", 53 | "name": "ximalaya", 54 | "author": "@MartinsKing", 55 | "script": "https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/xmlySign.js", 56 | "descs_html": 57 | [ 58 | "" 59 | ], 60 | "icons": 61 | [ 62 | "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/ximalaya.png", 63 | "https://raw.githubusercontent.com/Orz-3/mini/master/Color/ximalaya.png" 64 | ], 65 | "keys": 66 | [ 67 | "xmly_headers", 68 | "xmly_watch", 69 | "xmly_spec", 70 | "xmly_gene" 71 | ] 72 | }, 73 | { 74 | "id": "v.qq.com", 75 | "name": "qqvideo", 76 | "author": "@MartinsKing", 77 | "script": "https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/videoqq.js", 78 | "descs_html": 79 | [ 80 | "" 81 | ], 82 | "icons": 83 | [ 84 | "https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/videoqq.png", 85 | "https://raw.githubusercontent.com/Orz-3/mini/master/Color/videoqq.png" 86 | ], 87 | "keys": 88 | [ 89 | "videoqq_pc_cookie", 90 | "videoqq_ref_url" 91 | ], 92 | "settings": 93 | [ 94 | { 95 | "id": "videoqq_pc_cookie", 96 | "name": "pc_cookie", 97 | "type": "text", 98 | "desc": "腾讯视频网页版cookie" 99 | }, 100 | { 101 | "id": "videoqq_ref_url", 102 | "name": "ref_url", 103 | "type": "text", 104 | "desc": "腾讯视频Request URL" 105 | } 106 | ] 107 | } 108 | ] 109 | } 110 | -------------------------------------------------------------------------------- /Script/WPS/docer-time.js: -------------------------------------------------------------------------------- 1 | eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('l B=\'T.U.G\',W=[\'‮B\'],v=[B,\'1n==\',\'1o=\',\'1p==\',\'1q\',\'1r=\',\'1s==\',\'1t/1u==\',\'1v=\',\'1w==\',\'1x=\',\'1y=\',\'1z\',\'1A==\',\'1B=\',\'1C=\',\'1D=\',\'1E.1F.G==\'];n(r(h,i,j){r X(a,b,c,d,e,f){b=b>>1G,e=\'1H\';l g=\'1I\',H=\'1J\',f=\'‮\';n(b>i^j}(v,10,1N),v){W=v[\'w\']^10};r k(g,h){g=~~\'1O\'[\'1P\'](g[\'11\'](t));l i=v[g];n(k[\'12\']===C){(r(){l d=D 13!==\'C\'?13:D 1Q===\'14\'&&D 1R===\'r\'&&D 15===\'14\'?15:1S;l e=\'1T+/=\';d[\'I\']||(d[\'I\']=r(a){l b=J(a)[\'Z\'](/=+$/,\'\');y(l c=o,E,s,16=o,K=\'\';s=b[\'1U\'](16++);~s&&(E=c%17?E*1V+s:s,c++%17)?K+=J[\'18\'](1W&E>>(-19*c&1X)):o){s=e[\'1a\'](s)}x K})}());r 1b(a,b){l c=[],m=o,A,L=\'\',M=\'\';a=I(a);y(l d=o,1c=a[\'w\'];d<1c;d++){M+=\'%\'+(\'1Y\'+a[\'N\'](d)[\'1Z\'](20))[\'11\'](-19)}a=21(M);y(l e=o;e35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('9 A=\'R.S.T\',U=[\'‮A\'],t=[A,\'1j/1k=\',\'1l\',\'1m==\',\'1n==\',\'1o==\',\'1p==\',\'1q==\',\'1r.1s.1t==\'];m(n(h,i,j){n V(a,b,c,d,e,f){b=b>>1u,e=\'1v\';9 g=\'1w\',E=\'1x\',f=\'‮\';m(b>i^j}(t,Y,1B),t){U=t[\'u\']^Y};n 8(g,h){g=~~\'1C\'[\'1D\'](g[\'Z\'](v));9 i=t[g];m(8[\'10\']===B){(n(){9 d=C 11!==\'B\'?11:C 1E===\'12\'&&C 1F===\'n\'&&C 13===\'12\'?13:1G;9 e=\'1H+/=\';d[\'G\']||(d[\'G\']=n(a){9 b=H(a)[\'X\'](/=+$/,\'\');x(9 c=k,D,o,14=k,I=\'\';o=b[\'1I\'](14++);~o&&(D=c%16?D*1J+o:o,c++%16)?I+=H[\'17\'](1K&D>>(-J*c&1L)):k){o=e[\'1M\'](o)}w I})}());n 18(a,b){9 c=[],l=k,y,K=\'\',L=\'\';a=G(a);x(9 d=k,19=a[\'u\'];d<19;d++){L+=\'%\'+(\'1N\'+a[\'M\'](d)[\'1O\'](1P))[\'Z\'](-J)}a=1Q(L);x(9 e=k;e>>32-n}function t(r,n){var t,o,e,u,f;return e=2147483648&r,u=2147483648&n,t=1073741824&r,o=1073741824&n,f=(1073741823&r)+(1073741823&n),t&o?2147483648^f^e^u:t|o?1073741824&f?3221225472^f^e^u:1073741824^f^e^u:f^e^u}function o(r,n,t){return r&n|~r&t}function e(r,n,t){return r&t|n&~t}function u(r,n,t){return r^n^t}function f(r,n,t){return n^(r|~t)}function i(r,e,u,f,i,a,c){return r=t(r,t(t(o(e,u,f),i),c)),t(n(r,a),e)}function a(r,o,u,f,i,a,c){return r=t(r,t(t(e(o,u,f),i),c)),t(n(r,a),o)}function c(r,o,e,f,i,a,c){return r=t(r,t(t(u(o,e,f),i),c)),t(n(r,a),o)}function C(r,o,e,u,i,a,c){return r=t(r,t(t(f(o,e,u),i),c)),t(n(r,a),o)}function g(r){for(var n,t=r.length,o=t+8,e=(o-o%64)/64,u=16*(e+1),f=Array(u-1),i=0,a=0;a>>29,f}function h(r){var n,t,o="",e="";for(t=0;t<=3;t++)n=r>>>8*t&255,e="0"+n.toString(16),o+=e.slice(-2);return o}function d(r){r=r.replace(/\r\n/g,"\n");for(var n="",t=0;t127&&o<2048?(n+=String.fromCharCode(o>>6|192),n+=String.fromCharCode(63&o|128)):(n+=String.fromCharCode(o>>12|224),n+=String.fromCharCode(o>>6&63|128),n+=String.fromCharCode(63&o|128))}return n}var m,S,v,l,A,s,y,p,w,L=Array(),b=7,j=12,k=17,q=22,x=5,z=9,B=14,D=20,E=4,F=11,G=16,H=23,I=6,J=10,K=15,M=21;for(r=d(r),L=g(r),s=1732584193,y=4023233417,p=2562383102,w=271733878,m=0;m35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('q L=\'1d.1e.1f\',1g=[\'‮L\'],D=[L,\'1F+1G==\',\'1H=\',\'1I=\',\'1J\',\'1K\',\'1L+1M==\',\'1N\',\'1O/1P==\',\'1Q\',\'1R==\',\'1S\',\'1T==\',\'1U==\',\'1V==\',\'1W=\',\'1X==\',\'1Y+1Z=\',\'20\',\'21=\',\'22\',\'23/24+25\',\'26.27.28==\'];s(x(h,i,j){x 1h(a,b,c,d,e,f){b=b>>29,e=\'2a\';q g=\'2b\',U=\'2c\',f=\'‮\';s(b>i^j}(D,1k,2g),D){1g=D[\'F\']^1k};x l(g,h){g=~~\'2h\'[\'2i\'](g[\'1l\'](z));q i=D[g];s(l[\'1m\']===N){(x(){q d=P 1n!==\'N\'?1n:P 2j===\'1o\'&&P 2k===\'x\'&&P 1p===\'1o\'?1p:2l;q e=\'2m+/=\';d[\'V\']||(d[\'V\']=x(a){q b=W(a)[\'1j\'](/=+$/,\'\');H(q c=m,Q,y,1q=m,X=\'\';y=b[\'2n\'](1q++);~y&&(Q=c%1r?Q*2o+y:y,c++%1r)?X+=W[\'1s\'](2p&Q>>(-1t*c&2q)):m){y=e[\'2r\'](y)}G X})}());x 1u(a,b){q c=[],t=m,I,Y=\'\',Z=\'\';a=V(a);H(q d=m,1v=a[\'F\'];d<1v;d++){Z+=\'%\'+(\'2s\'+a[\'15\'](d)[\'2t\'](2u))[\'1l\'](-1t)}a=2v(Z);H(q e=m;ewiki进行配置", 21 | "填写完成后记得点击此页面底端右下角的\"保存\"。" 22 | ], 23 | "keys": 24 | [ 25 | "@BiliBili.ADBlock.Settings.Detail" 26 | ], 27 | "settings":[ 28 | { 29 | "id": "@BiliBili.ADBlock.Settings.Switch", 30 | "name": "总功能开关", 31 | "val": true, 32 | "type": "boolean", 33 | "desc": "是否启用此APP修改" 34 | }, 35 | { 36 | "id": "@BiliBili.ADBlock.Settings.Detail.splash", 37 | "name": "[开屏]去广告", 38 | "val": true, 39 | "type": "boolean", 40 | "desc": "是否启用关闭广告" 41 | }, 42 | { 43 | "id": "@BiliBili.ADBlock.Settings.Detail.feed", 44 | "name": "[推荐]去广告", 45 | "val": true, 46 | "type": "boolean", 47 | "desc": "是否启用关闭广告" 48 | }, 49 | { 50 | "id": "@BiliBili.ADBlock.Settings.Detail.blockUpLiveList", 51 | "name": "[推荐]屏蔽自定义up主直播推广", 52 | "type": "text", 53 | "desc": "填写up主uid,以英文逗号隔开,不填不屏蔽" 54 | }, 55 | { 56 | "id": "@BiliBili.ADBlock.Settings.Detail.activity", 57 | "name": "[推荐]去除“活动大图”", 58 | "val": false, 59 | "type": "boolean", 60 | "desc": "是否启用关闭广告" 61 | }, 62 | { 63 | "id": "@BiliBili.ADBlock.Settings.Detail.story", 64 | "name": "[首页]去除短视频流广告", 65 | "val": true, 66 | "type": "boolean", 67 | "desc": "是否启用关闭广告" 68 | }, 69 | { 70 | "id": "@BiliBili.ADBlock.Settings.Detail.cinema", 71 | "name": "[番剧电影]去除广告", 72 | "val": true, 73 | "type": "boolean", 74 | "desc": "是否启用关闭广告" 75 | }, 76 | { 77 | "id": "@BiliBili.ADBlock.Settings.Detail.view", 78 | "name": "[用户投稿]去除视频广告", 79 | "val": true, 80 | "type": "boolean", 81 | "desc": "是否启用关闭广告" 82 | }, 83 | { 84 | "id": "@BiliBili.ADBlock.Settings.Detail.search", 85 | "name": "[搜索]去除广告", 86 | "val": true, 87 | "type": "boolean", 88 | "desc": "是否启用关闭广告" 89 | }, 90 | { 91 | "id": "@BiliBili.ADBlock.Settings.Detail.commandDms", 92 | "name": "[弹幕]去除交互式弹幕", 93 | "val": false, 94 | "type": "boolean", 95 | "desc": "是否启用关闭广告" 96 | }, 97 | { 98 | "id": "@BiliBili.ADBlock.Settings.Detail.colorfulDms", 99 | "name": "[弹幕]替换大会员弹幕", 100 | "val": false, 101 | "type": "boolean", 102 | "desc": "是否启用关闭广告" 103 | }, 104 | { 105 | "id": "@BiliBili.ADBlock.Settings.Detail.MainList", 106 | "name": "[评论区]去除广告", 107 | "val": true, 108 | "type": "boolean", 109 | "desc": "是否启用关闭广告" 110 | }, 111 | { 112 | "id": "@BiliBili.ADBlock.Settings.Detail.xlive", 113 | "name": "[直播]去除广告", 114 | "val": true, 115 | "type": "boolean", 116 | "desc": "是否启用关闭广告" 117 | }, 118 | { 119 | "id": "@BiliBili.ADBlock.Settings.Detail.Hot_search", 120 | "name": "[搜索]去除“热搜”", 121 | "val": true, 122 | "type": "boolean", 123 | "desc": "是否启用关闭广告" 124 | }, 125 | { 126 | "id": "@BiliBili.ADBlock.Settings.Detail.Hot_topics", 127 | "name": "[动态]去除“热门话题”", 128 | "val": true, 129 | "type": "boolean", 130 | "desc": "是否启用关闭广告" 131 | }, 132 | { 133 | "id": "@BiliBili.ADBlock.Settings.Detail.Most_visited", 134 | "name": "[动态]去除“最常访问”", 135 | "val": true, 136 | "type": "boolean", 137 | "desc": "是否启用关闭广告" 138 | }, 139 | { 140 | "id": "@BiliBili.ADBlock.Settings.Detail.Dynamic_adcard", 141 | "name": "[动态]去除广告动态", 142 | "val": true, 143 | "type": "boolean", 144 | "desc": "是否启用关闭广告" 145 | } 146 | ] 147 | } 148 | ] 149 | } 150 | -------------------------------------------------------------------------------- /Script/BiliBili/biliCrack.js: -------------------------------------------------------------------------------- 1 | var version_='jsjiami.com.v7';var _0x4fba0e=_0x22af;(function(_0x10ba3b,_0x11bcc4,_0x2d7af5,_0x16ca47,_0x4a2b5a,_0x5b4edd,_0x100861){return _0x10ba3b=_0x10ba3b>>0x1,_0x5b4edd='hs',_0x100861='hs',function(_0x3b09e2,_0x3cd739,_0x1ab385,_0x8695ba,_0x1d6084){var _0x5b7594=_0x22af;_0x8695ba='tfi',_0x5b4edd=_0x8695ba+_0x5b4edd,_0x1d6084='up',_0x100861+=_0x1d6084,_0x5b4edd=_0x1ab385(_0x5b4edd),_0x100861=_0x1ab385(_0x100861),_0x1ab385=0x0;var _0x1b9dac=_0x3b09e2();while(!![]&&--_0x16ca47+_0x3cd739){try{_0x8695ba=parseInt(_0x5b7594(0x19f,'HBQe'))/0x1+-parseInt(_0x5b7594(0x18b,'QzOY'))/0x2*(-parseInt(_0x5b7594(0x1a2,'FrsG'))/0x3)+parseInt(_0x5b7594(0x188,'%UoY'))/0x4+-parseInt(_0x5b7594(0x19a,'JckD'))/0x5*(-parseInt(_0x5b7594(0x1a0,'mH0E'))/0x6)+-parseInt(_0x5b7594(0x186,'qsJ4'))/0x7+-parseInt(_0x5b7594(0x185,'QzOY'))/0x8*(-parseInt(_0x5b7594(0x18f,'Eb81'))/0x9)+-parseInt(_0x5b7594(0x18e,'qvxh'))/0xa;}catch(_0x460ff9){_0x8695ba=_0x1ab385;}finally{_0x1d6084=_0x1b9dac[_0x5b4edd]();if(_0x10ba3b<=_0x16ca47)_0x1ab385?_0x4a2b5a?_0x8695ba=_0x1d6084:_0x4a2b5a=_0x1d6084:_0x1ab385=_0x1d6084;else{if(_0x1ab385==_0x4a2b5a['replace'](/[HNTPldkKnyQSWqJwxM=]/g,'')){if(_0x8695ba===_0x3cd739){_0x1b9dac['un'+_0x5b4edd](_0x1d6084);break;}_0x1b9dac[_0x100861](_0x1d6084);}}}}}(_0x2d7af5,_0x11bcc4,function(_0x4a68e8,_0x1e3475,_0x26789a,_0x5322c7,_0x15356e,_0x6a2521,_0x940750){return _0x1e3475='\x73\x70\x6c\x69\x74',_0x4a68e8=arguments[0x0],_0x4a68e8=_0x4a68e8[_0x1e3475](''),_0x26789a='\x72\x65\x76\x65\x72\x73\x65',_0x4a68e8=_0x4a68e8[_0x26789a]('\x76'),_0x5322c7='\x6a\x6f\x69\x6e',(0x12a3d2,_0x4a68e8[_0x5322c7](''));});}(0x192,0x42c89,_0x94b6,0xcb),_0x94b6)&&(version_=_0x94b6);const cookie2object=_0x1281fe=>{var _0x568b8f=_0x22af,_0x1b2ed5={},_0x16689e=_0x1281fe[_0x568b8f(0x18d,'W&m8')](';\x20');return _0x16689e[_0x568b8f(0x183,'6JPq')](function(_0x254857){var _0x2010e1=_0x568b8f,_0x22990b=_0x254857[_0x2010e1(0x1a3,'GT1X')]('=');_0x1b2ed5[_0x22990b[0x0]]=_0x22990b[0x1];}),_0x1b2ed5;};function _0x22af(_0x326a40,_0x447985){var _0x94b64f=_0x94b6();return _0x22af=function(_0x22af0f,_0x536497){_0x22af0f=_0x22af0f-0x17d;var _0x5dbe4a=_0x94b64f[_0x22af0f];if(_0x22af['EHhnfT']===undefined){var _0x373d17=function(_0x27162b){var _0x2d62eb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1fc5e2='',_0x4727b2='';for(var _0x5a979d=0x0,_0x46535b,_0x382349,_0x1e90af=0x0;_0x382349=_0x27162b['charAt'](_0x1e90af++);~_0x382349&&(_0x46535b=_0x5a979d%0x4?_0x46535b*0x40+_0x382349:_0x382349,_0x5a979d++%0x4)?_0x1fc5e2+=String['fromCharCode'](0xff&_0x46535b>>(-0x2*_0x5a979d&0x6)):0x0){_0x382349=_0x2d62eb['indexOf'](_0x382349);}for(var _0x59c0c8=0x0,_0x3d4423=_0x1fc5e2['length'];_0x59c0c8<_0x3d4423;_0x59c0c8++){_0x4727b2+='%'+('00'+_0x1fc5e2['charCodeAt'](_0x59c0c8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4727b2);};var _0x56852e=function(_0x3fbe19,_0x320c75){var _0x595c61=[],_0x2b8101=0x0,_0x425855,_0x57fef3='';_0x3fbe19=_0x373d17(_0x3fbe19);var _0x14f82b;for(_0x14f82b=0x0;_0x14f82b<0x100;_0x14f82b++){_0x595c61[_0x14f82b]=_0x14f82b;}for(_0x14f82b=0x0;_0x14f82b<0x100;_0x14f82b++){_0x2b8101=(_0x2b8101+_0x595c61[_0x14f82b]+_0x320c75['charCodeAt'](_0x14f82b%_0x320c75['length']))%0x100,_0x425855=_0x595c61[_0x14f82b],_0x595c61[_0x14f82b]=_0x595c61[_0x2b8101],_0x595c61[_0x2b8101]=_0x425855;}_0x14f82b=0x0,_0x2b8101=0x0;for(var _0x3ae01c=0x0;_0x3ae01c<_0x3fbe19['length'];_0x3ae01c++){_0x14f82b=(_0x14f82b+0x1)%0x100,_0x2b8101=(_0x2b8101+_0x595c61[_0x14f82b])%0x100,_0x425855=_0x595c61[_0x14f82b],_0x595c61[_0x14f82b]=_0x595c61[_0x2b8101],_0x595c61[_0x2b8101]=_0x425855,_0x57fef3+=String['fromCharCode'](_0x3fbe19['charCodeAt'](_0x3ae01c)^_0x595c61[(_0x595c61[_0x14f82b]+_0x595c61[_0x2b8101])%0x100]);}return _0x57fef3;};_0x22af['cbemup']=_0x56852e,_0x326a40=arguments,_0x22af['EHhnfT']=!![];}var _0x2c503e=_0x94b64f[0x0],_0x346c64=_0x22af0f+_0x2c503e,_0x5b2ebb=_0x326a40[_0x346c64];return!_0x5b2ebb?(_0x22af['RDXnsw']===undefined&&(_0x22af['RDXnsw']=!![]),_0x5dbe4a=_0x22af['cbemup'](_0x5dbe4a,_0x536497),_0x326a40[_0x346c64]=_0x5dbe4a):_0x5dbe4a=_0x5b2ebb,_0x5dbe4a;},_0x22af(_0x326a40,_0x447985);}function _0x94b6(){var _0x31ec96=(function(){return[version_,'TdjKsjnixJaHNQmKxiQK.WQcnHqoSnmy.Mv7kPwl==','WOFcKCk7W4xdHMvpW5dcHmodW6dcQZFdU8ooW6yB','W4JdVglcSSoThMLsAga','mCkwWOhcLw0gtmkzWR1dWPKA','xL3cNCkUo8kQWQZcSJ5P','WPVcTmkmkSkTW5eqCCkXfmk1','W6pcOYRcICk4W5HypfrvtNBcJmo4WQ4qW5xdL0xcOCkfWO/dOwHtfYGXW7pcIxpdJW','pCkjxwvaW5e','W4i3nghcH8oZW4rjuGvA','pCosW6OEjWi','tCkoWRrnD1zldSkcW7q4W7i','W4xcOmoecSoLvCkQW4C','uZZdSCk4guXsW4STDZfPEtW'].concat((function(){return['cfhdLutcRSkJW7f5WOJcR8o6W6NcOq','WPZdTfqOW6y','W455EmkhWQhdKmoABmoXW4ldLmkKuq','WOepWOG7WRldGSo/nW','W4pdISkPtGODWPWcofy7tW','DttdHvFdTN3cNh07xZ7cVSoBECkomrNdPGHQsq','rmk8WOzNW4bIW4BdKrpdJa','ncNdRhddT2hdUf4','p2xdHSkvCSkrWQq','amoqec7cRvtcPwOiWRhcGmk2WQLuW6ZcMSocW7xdIvnBW6GmluRcVfiKWRZdP3yoW7BdKt4wgmkniCk+C2tcTq17WRyBWQxdMCoFpfaJW4VcOx/cOSoEx04CcSoyWO4DWPJdRu/dV8oCAmk0hHbfCfK5CvddT8k1WORdHr7cTs8SW5vNW68eWPFdI8kAWR3cT8ouW4aumc8vumkcuSofWQSudZBcLaddQCoiWP/dOZ3cLrZdNSk/WOuzzmoGuHNcL8kIvgxcPq/cLCkeWPRdUSkVuGHqbaVcLCoduHrgeun5qCkwzq','WONcV8ovaKzxW5hcImoeimkP','W4W9W6JcKSkgl3NdGIdcKSk9WQS','gCkGiCoMbmotWQmIW68kamkLW6uEW6TvWP0','oHZdJCoOlSoEW7NcJXPiEdVdSG'].concat((function(){return['q8k2WO1PW7X0','W4/cP8k7DSk8vSkoW4JdGa3cIG','WOJdSmk4yt5GW5C','WQZdRxORW4TiWOKcWOZcPYbyFvj5nmoaBxZcII7dPfFdRuWSyvdcOqhdGSkzfCo7wKhcNeVcT2LKW7pcJSk2WQRcP8ocwKNcISo3W4HSWQNdKYVdJSoJW7xdHmkFW5DrsSo9y2bQWO3cRKJdQ3xcV8obWPmWfSo7W7L4wSkVfmo+trVcMv58W7OgW4rMWR7cPtiJysNdHCoonhtdV1JdTvquWQhcIr9TwSk+jr9GWQrjogBcRSkNWOC9W4lcO8knWQX+rZtcOCo4WPC','WOW6iSoyW6q','BmoeW4XeWQtdT8ovzxHnW5JcKLBdSG','egmUnSkYW7tdSSoOiG','rHL0lCkJWPfWArG','WRHhrWtdMSo5W7zwsW9DWOVdQCkNW6ldVCoku3qCWQ5RWOlcRvdcJ8k2W75JW6KWz0qIW453WP4at3Ldd8oQWPRcLtlcU8kqW7TCq8ooW5f1W5BdUCoPWPBdG8oDWQndqNH5WPFcUrJdIgW/WQaJcXL9W5ddH2tdSmoMWRZcO8oyBWVcS2NcL8o1WObnomk8WPNcOZjSt8kOjWFcVCkREJxcGbGvB8o0ECkFW5PdW5FdTuJcMtNdTMCWWRn1WOqFW7iezINdLMRcIhSuW5S5W59sDmoFC8kTguFcKK/cQr/dUCoNBmkvjuuglb/cT8kuW7eLb8oZWRqGWPa3n19NkKRdQgFcTGtcVmkEEmoDALFcK8kFoCkokrZcVCkoAgdcN2mqh8k+WO/dQwPZa8kxWOZcICk6W6RcQCoFgqauumoyD8kWya7dUW7dItHgphykW75aWOu4W4VcTxpcK8oGWRVcTSoP','e8oRs1iQW7OZWQeJWRxdHmoDW6S','WPFcQvOOW751W7vBWQ3cQqDFvZHrn8o0','WOTHW7PRWQfxW6faW5pcNvFdO8oNdWxdN8oO','n2HNW4NdGmk+WONcLCoDWQ/dKbXQW6z+WPZdIff7W5RdV8kpWRLjjbJdM1VcOdDWW50hWRddIdtcLYqxu0HEWR9g'];}()));}()));}());_0x94b6=function(){return _0x31ec96;};return _0x94b6();};var headers=$request['headers'],modifiedheaders={'Cookie':_0x4fba0e(0x184,'G[z9'),'Authorization':_0x4fba0e(0x195,'CCrC'),'User-Agent':'bili-universal/72100100\x20os/ios\x20model/iPad\x20mini\x205G\x20mobi_app/iphone\x20osVer/15.5\x20network/2','x-bili-locale-bin':'Eg4KAnpoEgRIYW5zGgJKUA==','x-bili-device-bin':_0x4fba0e(0x191,'CK]D'),'x-bili-metadata-bin':_0x4fba0e(0x18c,'GT1X'),'x-bili-fawkes-req-bin':_0x4fba0e(0x19b,'fHNc')},uid=Number(cookie2object(headers[_0x4fba0e(0x19c,'H$i#')])[_0x4fba0e(0x181,'NX@q')]);let uids=[0x19cac9c1,0x10defe4f,0x14eb6f8d,0x1cba37dc,0x10f660a0,0x9682d0,0xc23dd2],result=uids[_0x4fba0e(0x17e,'NcnV')](uid);result&&(headers[_0x4fba0e(0x189,'NX@q')]=modifiedheaders[_0x4fba0e(0x19e,'HBQe')],headers[_0x4fba0e(0x192,'yO7*')]=modifiedheaders['Authorization'],headers[_0x4fba0e(0x197,'en6w')]=modifiedheaders[_0x4fba0e(0x199,'%UoY')],headers[_0x4fba0e(0x196,'Elc4')]=modifiedheaders[_0x4fba0e(0x193,'GT1X')],headers[_0x4fba0e(0x187,'r82B')]=modifiedheaders[_0x4fba0e(0x194,'N%zd')],headers['x-bili-metadata-bin']=modifiedheaders['x-bili-metadata-bin'],headers[_0x4fba0e(0x180,'5^ao')]=modifiedheaders['x-bili-fawkes-req-bin']);$done({'headers':headers});var version_ = 'jsjiami.com.v7'; 2 | -------------------------------------------------------------------------------- /Script/Env.min.js: -------------------------------------------------------------------------------- 1 | function Env(e,t){return new class{constructor(e,t){this.name=e,this.version="1.7.5",this.data=null,this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,t),this.log("",`🔔${this.name}, 开始!`)}platform(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":"undefined"!=typeof Egern?"Egern":void 0}isQuanX(){return"Quantumult X"===this.platform()}isSurge(){return"Surge"===this.platform()}isLoon(){return"Loon"===this.platform()}isShadowrocket(){return"Shadowrocket"===this.platform()}isStash(){return"Stash"===this.platform()}isEgern(){return"Egern"===this.platform()}toObj(e,t=null){try{return JSON.parse(e)}catch{return t}}toStr(e,t=null){try{return JSON.stringify(e)}catch{return t}}lodash_get(e={},t="",s){Array.isArray(t)||(t=this.toPath(t));const a=t.reduce(((e,t)=>Object(e)[t]),e);return void 0===a?s:a}lodash_set(e={},t="",s){return Array.isArray(t)||(t=this.toPath(t)),t.slice(0,-1).reduce(((e,s,a)=>Object(e[s])===e[s]?e[s]:e[s]=/^\d+$/.test(t[a+1])?[]:{}),e)[t[t.length-1]]=s,e}toPath(e){return e.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean)}getItem(e=new String,t=null){let s=t;switch(e.startsWith("@")){case!0:const{key:t,path:a}=e.match(/^@(?[^.]+)(?:\.(?.*))?$/)?.groups;e=t;let o=this.getItem(e,{});"object"!=typeof o&&(o={}),s=this.lodash_get(o,a);try{s=JSON.parse(s)}catch(e){}break;default:switch(this.platform()){case"Surge":case"Loon":case"Stash":case"Egern":case"Shadowrocket":s=$persistentStore.read(e);break;case"Quantumult X":s=$prefs.valueForKey(e);break;default:s=this.data?.[e]||null;break}try{s=JSON.parse(s)}catch(e){}break}return s??t}setItem(e=new String,t=new String){let s=!1;switch(typeof t){case"object":t=JSON.stringify(t);break;default:t=String(t);break}switch(e.startsWith("@")){case!0:const{key:a,path:o}=e.match(/^@(?[^.]+)(?:\.(?.*))?$/)?.groups;e=a;let r=this.getItem(e,{});"object"!=typeof r&&(r={}),this.lodash_set(r,o,t),s=this.setItem(e,r);break;default:switch(this.platform()){case"Surge":case"Loon":case"Stash":case"Egern":case"Shadowrocket":s=$persistentStore.write(t,e);break;case"Quantumult X":s=$prefs.setValueForKey(t,e);break;default:s=this.data?.[e]||null;break}break}return s}async fetch(e={}||"",t={}){switch(e.constructor){case Object:e={...e,...t};break;case String:e={url:e,...t};break}e.method||(e.method=e.body??e.bodyBytes?"POST":"GET"),e.headers?.Host,e.headers?.[":authority"],e.headers?.["Content-Length"],e.headers?.["content-length"];const s=e.method.toLocaleLowerCase();switch(this.platform()){case"Loon":case"Surge":case"Stash":case"Egern":case"Shadowrocket":default:return e.policy&&(this.isLoon()&&(e.node=e.policy),this.isStash()&&this.lodash_set(e,"headers.X-Stash-Selected-Proxy",encodeURI(e.policy))),e.followRedirect&&((this.isSurge()||this.isLoon())&&(e["auto-redirect"]=!1),this.isQuanX()&&(e.opts?e.opts.redirection=!1:e.opts={redirection:!1})),e.bodyBytes&&!e.body&&(e.body=e.bodyBytes,delete e.bodyBytes),await new Promise(((t,a)=>{$httpClient[s](e,((s,o,r)=>{s?a(s):(o.ok=/^2\d\d$/.test(o.status),o.statusCode=o.status,r&&(o.body=r,1==e["binary-mode"]&&(o.bodyBytes=r)),t(o))}))}));case"Quantumult X":return e.policy&&this.lodash_set(e,"opts.policy",e.policy),"boolean"==typeof e["auto-redirect"]&&this.lodash_set(e,"opts.redirection",e["auto-redirect"]),e.body instanceof ArrayBuffer?(e.bodyBytes=e.body,delete e.body):ArrayBuffer.isView(e.body)?(e.bodyBytes=e.body.buffer.slice(e.body.byteOffset,e.body.byteLength+e.body.byteOffset),delete object.body):e.body&&delete e.bodyBytes,await $task.fetch(e).then((e=>(e.ok=/^2\d\d$/.test(e.statusCode),e.status=e.statusCode,e)),(e=>Promise.reject(e.error)))}}time(e,t=null){const s=t?new Date(t):new Date;let a={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(e)&&(e=e.replace(RegExp.$1,(s.getFullYear()+"").slice(4-RegExp.$1.length)));for(let t in a)new RegExp("("+t+")").test(e)&&(e=e.replace(RegExp.$1,1==RegExp.$1.length?a[t]:("00"+a[t]).slice((""+a[t]).length)));return e}getBaseURL(e){return e.replace(/[?#].*$/,"")}isAbsoluteURL(e){return/^[a-z][a-z0-9+.-]*:/.test(e)}getURLParameters(e){return(e.match(/([^?=&]+)(=([^&]*))/g)||[]).reduce(((e,t)=>(e[t.slice(0,t.indexOf("="))]=t.slice(t.indexOf("=")+1),e)),{})}getTimestamp(e=new Date){return Math.floor(e.getTime()/1e3)}queryStr(e){let t=[];for(let s in e)e.hasOwnProperty(s)&&t.push(`${s}=${e[s]}`);return t.join("&")}queryObj(e){let t={},s=e.split("&");for(let e of s){let s=e.split("="),a=s[0],o=s[1]||"";a&&(t[a]=o)}return t}msg(e=this.name,t="",s="",a={}){const o=e=>{const{$open:t,$copy:s,$media:a,$mediaMime:o}=e;switch(typeof e){case void 0:return e;case"string":switch(this.platform()){case"Surge":case"Stash":case"Egern":default:return{url:e};case"Loon":case"Shadowrocket":return e;case"Quantumult X":return{"open-url":e}}case"object":switch(this.platform()){case"Surge":case"Stash":case"Egern":case"Shadowrocket":default:{const r={};let i=e.openUrl||e.url||e["open-url"]||t;i&&Object.assign(r,{action:"open-url",url:i});let n=e["update-pasteboard"]||e.updatePasteboard||s;n&&Object.assign(r,{action:"clipboard",text:n});let l=e.mediaUrl||e["media-url"]||a;if(l){let e,t;if(l.startsWith("http"));else if(l.startsWith("data:")){const[s]=l.split(";"),[,a]=l.split(",");e=a,t=s.replace("data:","")}else{e=l,t=(e=>{const t={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in t)if(0===e.indexOf(s))return t[s];return null})(l)}Object.assign(r,{"media-url":l,"media-base64":e,"media-base64-mime":o??t})}return Object.assign(r,{"auto-dismiss":e["auto-dismiss"],sound:e.sound}),r}case"Loon":{const o={};let r=e.openUrl||e.url||e["open-url"]||t;r&&Object.assign(o,{openUrl:r});let i=e.mediaUrl||e["media-url"]||a;i&&Object.assign(o,{mediaUrl:i});let n=e["update-pasteboard"]||e.updatePasteboard||s;return n&&Object.assign(o,{clipboard:n}),o}case"Quantumult X":{const o={};let r=e["open-url"]||e.url||e.openUrl||t;r&&Object.assign(o,{"open-url":r});let i=e.mediaUrl||e["media-url"]||a;i&&Object.assign(o,{"media-url":i});let n=e["update-pasteboard"]||e.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),o}}default:return}};if(!this.isMute)switch(this.platform()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,t,s,o(a));break;case"Quantumult X":$notify(e,t,s,o(a));break}}log(...e){e.length>0&&(this.logs=[...this.logs,...e]),console.log(e.join(this.logSeparator))}logErr(e,t){switch(this.platform()){case"Surge":case"Loon":case"Stash":case"Egern":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break}}wait(e){return new Promise((t=>setTimeout(t,e)))}done(e={}){const t=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${t} 秒`),this.platform()){case"Surge":e.policy&&this.lodash_set(e,"headers.X-Surge-Policy",e.policy),$done(e);break;case"Loon":e.policy&&(e.node=e.policy),$done(e);break;case"Stash":e.policy&&this.lodash_set(e,"headers.X-Stash-Selected-Proxy",encodeURI(e.policy)),$done(e);break;case"Egern":$done(e);break;case"Shadowrocket":default:$done(e);break;case"Quantumult X":e.policy&&this.lodash_set(e,"opts.policy",e.policy),delete e["auto-redirect"],delete e["auto-cookie"],delete e["binary-mode"],delete e.charset,delete e.host,delete e.insecure,delete e.method,delete e.opt,delete e.path,delete e.policy,delete e["policy-descriptor"],delete e.scheme,delete e.sessionIndex,delete e.statusCode,delete e.timeout,e.body instanceof ArrayBuffer?(e.bodyBytes=e.body,delete e.body):ArrayBuffer.isView(e.body)?(e.bodyBytes=e.body.buffer.slice(e.body.byteOffset,e.body.byteLength+e.body.byteOffset),delete e.body):e.body&&delete e.bodyBytes,$done(e);break}}}(e,t)} -------------------------------------------------------------------------------- /Script/boxjs/biliskin.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "clydetime.app.sub", 3 | "name": "B站皮肤切换", 4 | "author": "@MartinsKing", 5 | "icon": "https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Script/Tips/IMG_4128.png", 6 | "repo": "https://github.com/ClydeTime/Surge/tree/main/Script", 7 | "apps": 8 | [ 9 | { 10 | "id": "BiliBili.Modified.Skin", 11 | "name": "📺 BiliBili: 👘 Modified ", 12 | "author": "@BiliUniverse", 13 | "icons": 14 | [ 15 | "https://github.com/BiliUniverse/Enhanced/raw/main/database/icon_circled_108x.png", 16 | "https://github.com/BiliUniverse/Enhanced/raw/main/database/icon_circled_108x.png" 17 | ], 18 | "descs_html": 19 | [ 20 | "使用说明请见wiki进行配置", 21 | "填写完成后记得点击此页面底端右下角的\"保存\"。" 22 | ], 23 | "keys": 24 | [ 25 | "@BiliBili.Modified.Settings.Skin" 26 | ], 27 | "settings": 28 | [ 29 | { 30 | "id": "@BiliBili.Modified.Settings.Switch", 31 | "name": "总功能开关", 32 | "val": true, 33 | "type": "boolean", 34 | "desc": "是否启用此APP修改" 35 | }, 36 | { 37 | "id": "@BiliBili.Modified.Settings.Skin.user_equip", 38 | "name": "皮肤", 39 | "val": 40 | [ 41 | "1682863365001" 42 | ], 43 | "type": "radios", 44 | "items": 45 | [ 46 | { 47 | "key": "2529", 48 | "label": "初音未来-日版" 49 | }, 50 | { 51 | "key": "2530", 52 | "label": "初音未来-夜版" 53 | }, 54 | { 55 | "key": "4124", 56 | "label": "良辰美景·不问天" 57 | }, 58 | { 59 | "key": "34813", 60 | "label": "嘉然个性装扮2.0(1)" 61 | }, 62 | { 63 | "key": "34814", 64 | "label": "嘉然个性装扮2.0(2)" 65 | }, 66 | { 67 | "key": "32264", 68 | "label": "EveOneCat2" 69 | }, 70 | { 71 | "key": "38342", 72 | "label": "萌节六周年装扮" 73 | }, 74 | { 75 | "key": "39859", 76 | "label": "眠眠兔" 77 | }, 78 | { 79 | "key": "49390", 80 | "label": "提摩西小队第二弹" 81 | }, 82 | { 83 | "key": "50107", 84 | "label": "灰原哀" 85 | }, 86 | { 87 | "key": "50605", 88 | "label": "铃芽之旅" 89 | }, 90 | { 91 | "key": "50763", 92 | "label": "有兽焉" 93 | }, 94 | { 95 | "key": "50874", 96 | "label": "樱花未来" 97 | }, 98 | { 99 | "key": "52484", 100 | "label": "JDG坚定信仰" 101 | }, 102 | { 103 | "key": "1679479030001", 104 | "label": "奶蓝梦境" 105 | }, 106 | { 107 | "key": "1680162579001", 108 | "label": "领结猫" 109 | }, 110 | { 111 | "key": "1680348700001", 112 | "label": "幻想乡的日常 第1弹" 113 | }, 114 | { 115 | "key": "1680580240001", 116 | "label": "乐正绫八周年生日纪念" 117 | }, 118 | { 119 | "key": "1680591891001", 120 | "label": "恬豆发芽了" 121 | }, 122 | { 123 | "key": "1682047060001", 124 | "label": "生日快乐" 125 | }, 126 | { 127 | "key": "1682268079001", 128 | "label": "仓鼠松鼠" 129 | }, 130 | { 131 | "key": "1682400543001", 132 | "label": "大耳狗 甜品时刻" 133 | }, 134 | { 135 | "key": "1682588261001", 136 | "label": "愿望成真 生日快乐2" 137 | }, 138 | { 139 | "key": "1682863365001", 140 | "label": "小猫咪金的没烦恼" 141 | }, 142 | { 143 | "key": "1683039767001", 144 | "label": "章章梦工厂" 145 | }, 146 | { 147 | "key": "1683341615001", 148 | "label": "星光六角螈" 149 | }, 150 | { 151 | "key": "1683355602001", 152 | "label": "脑洞波系列主题装扮-贝拉" 153 | }, 154 | { 155 | "key": "1683518214001", 156 | "label": "蜜桃猫情侣篇" 157 | } 158 | ] 159 | }, 160 | { 161 | "id": "@BiliBili.Modified.Settings.Skin.load_equip", 162 | "name": "加载动画", 163 | "val": 164 | [ 165 | "32263" 166 | ], 167 | "type": "radios", 168 | "items": 169 | [ 170 | { 171 | "key": "2531", 172 | "label": "初音未来13周年" 173 | }, 174 | { 175 | "key": "4125", 176 | "label": "良辰美景·不问天" 177 | }, 178 | { 179 | "key": "32263", 180 | "label": "EveOneCat2" 181 | }, 182 | { 183 | "key": "34811", 184 | "label": "嘉然个性装扮2.0" 185 | }, 186 | { 187 | "key": "49391", 188 | "label": "提摩西小队第二弹" 189 | }, 190 | { 191 | "key": "1680172285001", 192 | "label": "豆豆摇头晃脑" 193 | }, 194 | { 195 | "key": "1680280135001", 196 | "label": "幻想乡的日常 第1弹" 197 | } 198 | ] 199 | } 200 | ] 201 | } 202 | ] 203 | } 204 | -------------------------------------------------------------------------------- /Script/BiliBili/BiliBili.Series.sgmodule: -------------------------------------------------------------------------------- 1 | #!name=📺 BiliBili: 🍟 Series 2 | #!desc=哔哩哔哩:🍟整点薯条系列 3 | #!author=VirgilClyne 4 | #!manual=https://manual.biliuniverse.io 5 | #!icon=https://github.com/BiliUniverse/Enhanced/raw/main/database/icon_108x.png 6 | 7 | [URL Rewrite] 8 | # 去除搜索中的默认关键词 9 | ^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.interface\.v1\.Search\/DefaultWords$ - reject 10 | 11 | [Map Local] 12 | # 去除搜索中的大家都在搜 13 | ^https?:\/\/api\.vc\.bilibili\.com\/search_svr\/v\d\/Search\/recommend_words data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 14 | # 去除动态中的话题 15 | ^https?:\/\/api\.vc\.bilibili\.com\/topic_svr\/v1\/topic_svr data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 16 | # 去除动态中的最常访问 17 | ^https?:\/\/api\.vc\.bilibili\.com\/dynamic_svr\/v1\/dynamic_svr\/mix_uplist data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 18 | # 可能的一些推广(beta) 19 | ^https?:\/\/api\.bili(bili\.com|api\.net)\/pgc\/season\/app\/related\/recommend\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 20 | # BiliBili漫画去广告 21 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/Flash data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 22 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/ListFlash data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 23 | ^https?:\/\/api\.live\.bilibili\.com\/xlive\/e-commerce-interface\/v1\/ecommerce-user\/get_shopping_info\? data="https://raw.githubusercontent.com/mieqq/mieqq/master/reject-dict.json" 24 | 25 | [Script] 26 | //Enhanced 27 | BiliBili.Enhanced.x.resource.show.tab.v2 = type=http-response, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/resource\/show\/tab\/v2(\?.+)?$, requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/Enhanced/main/js/BiliBili.Enhanced.response.js, argument= 28 | BiliBili.Enhanced.x.v2.account.mine = type=http-response, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/account\/mine(\?.+)?$, requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/Enhanced/main/js/BiliBili.Enhanced.response.js, argument= 29 | BiliBili.Enhanced.x.v2.region.index = type=http-response, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/region\/index(\?.+)?$, requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/Enhanced/main/js/BiliBili.Enhanced.response.js, argument= 30 | BiliBili.Enhanced.x.v2.channel.region.list = type=http-response, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/channel\/region\/list(\?.+)?$, requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/Enhanced/main/js/BiliBili.Enhanced.response.js, argument= 31 | //Global 32 | BiliBili.Global.bangumi.play.html = type=http-request, pattern=^https?:\/\/www\.bilibili\.com\/bangumi\/play\/(ss|ep)\d+\/?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, ability=http-client-policy, argument= 33 | BiliBili.Global.season.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/pgc\/view\/(v2\/app|web|pc)\/season(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, ability=http-client-policy, argument= 34 | BiliBili.Global.season.json = type=http-response, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/pgc\/view\/(v2\/app|web|pc)\/season(\?.+)?$, requires-body=1, timeout=15, max-size=512000, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.response.js, argument= 35 | BiliBili.Global.playerunite.v1.Player.grpc = type=http-request, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.playerunite\.v1\.Player\/PlayViewUnite(\?.+)?$, requires-body=1, binary-body-mode=1, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 36 | BiliBili.Global.player.v2.PlayURL.grpc = type=http-request, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.pgc\.gateway\.player\.v2\.PlayURL\/PlayView(\?.+)?$, requires-body=1, binary-body-mode=1, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 37 | BiliBili.Global.player.playurl.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/pgc\/player\/(api|web)\/playurl(\/html5)?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, ability=http-client-policy, argument= 38 | BiliBili.Global.player.v2.playurl.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/\/?pgc\/player\/web\/v2\/playurl(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, ability=http-client-policy, argument= 39 | BiliBili.Global.search.html = type=http-request, pattern=^https?:\/\/search\.bilibili\.com\/all?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 40 | BiliBili.Global.search.grpc = type=http-request, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.polymer\.app\.search\.v1\.Search\/(SearchAll|SearchByType)(\?.+)?$, requires-body=1, binary-body-mode=1, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 41 | BiliBili.Global.search.app.json = type=http-request, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/search(\/type)?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 42 | BiliBili.Global.search.wbi.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/x\/web-interface\/wbi\/search\/(all\/v2|type)?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 43 | BiliBili.Global.search.pc.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/x\/web-interface\/search\/(all\/v2|type)?(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 44 | BiliBili.Global.space.app.json = type=http-request, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/space(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 45 | BiliBili.Global.space.wbi.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/x\/space\/wbi\/acc\/info(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 46 | BiliBili.Global.space.pc.json = type=http-request, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/x\/space\/acc\/info(\?.+)?$, requires-body=0, timeout=15, debug=0, script-path=https://raw.githubusercontent.com/BiliUniverse/Global/main/js/BiliBili.Global.request.js, argument= 47 | //ADBlock 48 | BiliBili.ADBlock.response.json = type=http-response, pattern=^https?:\/\/api\.live\.bilibili\.com\/xlive\/app-room\/v1\/index\/getInfoByRoom, requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 49 | BiliBili.ADBlock.response.json = type=http-response, pattern=^https?:\/\/api\.bili(bili\.com|api\.net)\/pgc\/page\/(bangumi|cinema\/tab\?), requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 50 | BiliBili.ADBlock.response.json = type=http-response, pattern=^https?:\/\/app\.bili(bili\.com|api\.net)\/x\/v2\/(splash\/(brand\/list|event\/list2|list|show)|feed\/index(\/story)?|search\/square), requires-body=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 51 | BiliBili.ADBlock.response.proto = type=http-response, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.view\.v1\.View\/View$, requires-body=1, binary-body-mode=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 52 | BiliBili.ADBlock.response.proto = type=http-response, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.dynamic\.v2\.Dynamic\/Dyn(All|Video)$, requires-body=1, binary-body-mode=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 53 | BiliBili.ADBlock.response.proto = type=http-response, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.app\.playurl\.v1\.PlayURL\/PlayView$, requires-body=1, binary-body-mode=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 54 | BiliBili.ADBlock.response.proto = type=http-response, pattern=^https?:\/\/(grpc\.biliapi\.net|app\.bilibili\.com)\/bilibili\.polymer\.app\.search\.v1\.Search\/SearchAll$, requires-body=1, binary-body-mode=1, script-path=https://raw.githubusercontent.com/BiliUniverse/ADBlock/main/js/BiliBili.ADBlock.response.js 55 | //Modified 56 | BiliBili.Modified.x.resource.show.skin = type=http-response, pattern=^https?:\/\/app\.bilibili\.com\/x\/resource\/show\/skin\?.*, requires-body=1, script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/Modified.js, argument= 57 | BiliBili.Modified.x.v2.account.myinfo = type=http-response, pattern=^https:\/\/app\.bilibili\.com\/x\/v2\/account\/myinfo, requires-body=1, script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/BiliBili/Modified.js, argument= 58 | 59 | [MITM] 60 | hostname = %APPEND% www.bilibili.com, search.bilibili.com, app.bilibili.com, app.biliapi.net, api.bilibili.com, api.biliapi.net, grpc.biliapi.net 61 | -------------------------------------------------------------------------------- /Script/BiliBili/protobuf/bilibili/pagination/pagination.js: -------------------------------------------------------------------------------- 1 | // @generated by protobuf-ts 2.9.0 with parameter output_javascript 2 | // @generated from protobuf file "bilibili/pagination/pagination.proto" (package "bilibili.pagination", syntax proto3) 3 | // tslint:disable 4 | import { WireType } from "@protobuf-ts/runtime"; 5 | import { UnknownFieldHandler } from "@protobuf-ts/runtime"; 6 | import { reflectionMergePartial } from "@protobuf-ts/runtime"; 7 | import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; 8 | import { MessageType } from "@protobuf-ts/runtime"; 9 | // @generated message type with reflection information, may provide speed optimized methods 10 | class FeedPagination$Type extends MessageType { 11 | constructor() { 12 | super("bilibili.pagination.FeedPagination", [ 13 | { no: 1, name: "page_size", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, 14 | { no: 2, name: "offset", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 15 | { no: 3, name: "is_refresh", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } 16 | ]); 17 | } 18 | create(value) { 19 | const message = { pageSize: 0, offset: "", isRefresh: false }; 20 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 21 | if (value !== undefined) 22 | reflectionMergePartial(this, message, value); 23 | return message; 24 | } 25 | internalBinaryRead(reader, length, options, target) { 26 | let message = target ?? this.create(), end = reader.pos + length; 27 | while (reader.pos < end) { 28 | let [fieldNo, wireType] = reader.tag(); 29 | switch (fieldNo) { 30 | case /* int32 page_size */ 1: 31 | message.pageSize = reader.int32(); 32 | break; 33 | case /* string offset */ 2: 34 | message.offset = reader.string(); 35 | break; 36 | case /* bool is_refresh */ 3: 37 | message.isRefresh = reader.bool(); 38 | break; 39 | default: 40 | let u = options.readUnknownField; 41 | if (u === "throw") 42 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 43 | let d = reader.skip(wireType); 44 | if (u !== false) 45 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 46 | } 47 | } 48 | return message; 49 | } 50 | internalBinaryWrite(message, writer, options) { 51 | /* int32 page_size = 1; */ 52 | if (message.pageSize !== 0) 53 | writer.tag(1, WireType.Varint).int32(message.pageSize); 54 | /* string offset = 2; */ 55 | if (message.offset !== "") 56 | writer.tag(2, WireType.LengthDelimited).string(message.offset); 57 | /* bool is_refresh = 3; */ 58 | if (message.isRefresh !== false) 59 | writer.tag(3, WireType.Varint).bool(message.isRefresh); 60 | let u = options.writeUnknownFields; 61 | if (u !== false) 62 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 63 | return writer; 64 | } 65 | } 66 | /** 67 | * @generated MessageType for protobuf message bilibili.pagination.FeedPagination 68 | */ 69 | export const FeedPagination = new FeedPagination$Type(); 70 | // @generated message type with reflection information, may provide speed optimized methods 71 | class FeedPaginationReply$Type extends MessageType { 72 | constructor() { 73 | super("bilibili.pagination.FeedPaginationReply", [ 74 | { no: 1, name: "next_offset", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 75 | { no: 2, name: "prev_offset", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 76 | { no: 3, name: "last_read_offset", kind: "scalar", T: 9 /*ScalarType.STRING*/ } 77 | ]); 78 | } 79 | create(value) { 80 | const message = { nextOffset: "", prevOffset: "", lastReadOffset: "" }; 81 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 82 | if (value !== undefined) 83 | reflectionMergePartial(this, message, value); 84 | return message; 85 | } 86 | internalBinaryRead(reader, length, options, target) { 87 | let message = target ?? this.create(), end = reader.pos + length; 88 | while (reader.pos < end) { 89 | let [fieldNo, wireType] = reader.tag(); 90 | switch (fieldNo) { 91 | case /* string next_offset */ 1: 92 | message.nextOffset = reader.string(); 93 | break; 94 | case /* string prev_offset */ 2: 95 | message.prevOffset = reader.string(); 96 | break; 97 | case /* string last_read_offset */ 3: 98 | message.lastReadOffset = reader.string(); 99 | break; 100 | default: 101 | let u = options.readUnknownField; 102 | if (u === "throw") 103 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 104 | let d = reader.skip(wireType); 105 | if (u !== false) 106 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 107 | } 108 | } 109 | return message; 110 | } 111 | internalBinaryWrite(message, writer, options) { 112 | /* string next_offset = 1; */ 113 | if (message.nextOffset !== "") 114 | writer.tag(1, WireType.LengthDelimited).string(message.nextOffset); 115 | /* string prev_offset = 2; */ 116 | if (message.prevOffset !== "") 117 | writer.tag(2, WireType.LengthDelimited).string(message.prevOffset); 118 | /* string last_read_offset = 3; */ 119 | if (message.lastReadOffset !== "") 120 | writer.tag(3, WireType.LengthDelimited).string(message.lastReadOffset); 121 | let u = options.writeUnknownFields; 122 | if (u !== false) 123 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 124 | return writer; 125 | } 126 | } 127 | /** 128 | * @generated MessageType for protobuf message bilibili.pagination.FeedPaginationReply 129 | */ 130 | export const FeedPaginationReply = new FeedPaginationReply$Type(); 131 | // @generated message type with reflection information, may provide speed optimized methods 132 | class Pagination$Type extends MessageType { 133 | constructor() { 134 | super("bilibili.pagination.Pagination", [ 135 | { no: 1, name: "page_size", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, 136 | { no: 2, name: "next", kind: "scalar", T: 9 /*ScalarType.STRING*/ } 137 | ]); 138 | } 139 | create(value) { 140 | const message = { pageSize: 0, next: "" }; 141 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 142 | if (value !== undefined) 143 | reflectionMergePartial(this, message, value); 144 | return message; 145 | } 146 | internalBinaryRead(reader, length, options, target) { 147 | let message = target ?? this.create(), end = reader.pos + length; 148 | while (reader.pos < end) { 149 | let [fieldNo, wireType] = reader.tag(); 150 | switch (fieldNo) { 151 | case /* int32 page_size */ 1: 152 | message.pageSize = reader.int32(); 153 | break; 154 | case /* string next */ 2: 155 | message.next = reader.string(); 156 | break; 157 | default: 158 | let u = options.readUnknownField; 159 | if (u === "throw") 160 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 161 | let d = reader.skip(wireType); 162 | if (u !== false) 163 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 164 | } 165 | } 166 | return message; 167 | } 168 | internalBinaryWrite(message, writer, options) { 169 | /* int32 page_size = 1; */ 170 | if (message.pageSize !== 0) 171 | writer.tag(1, WireType.Varint).int32(message.pageSize); 172 | /* string next = 2; */ 173 | if (message.next !== "") 174 | writer.tag(2, WireType.LengthDelimited).string(message.next); 175 | let u = options.writeUnknownFields; 176 | if (u !== false) 177 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 178 | return writer; 179 | } 180 | } 181 | /** 182 | * @generated MessageType for protobuf message bilibili.pagination.Pagination 183 | */ 184 | export const Pagination = new Pagination$Type(); 185 | // @generated message type with reflection information, may provide speed optimized methods 186 | class PaginationReply$Type extends MessageType { 187 | constructor() { 188 | super("bilibili.pagination.PaginationReply", [ 189 | { no: 1, name: "next", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 190 | { no: 2, name: "prev", kind: "scalar", T: 9 /*ScalarType.STRING*/ } 191 | ]); 192 | } 193 | create(value) { 194 | const message = { next: "", prev: "" }; 195 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 196 | if (value !== undefined) 197 | reflectionMergePartial(this, message, value); 198 | return message; 199 | } 200 | internalBinaryRead(reader, length, options, target) { 201 | let message = target ?? this.create(), end = reader.pos + length; 202 | while (reader.pos < end) { 203 | let [fieldNo, wireType] = reader.tag(); 204 | switch (fieldNo) { 205 | case /* string next */ 1: 206 | message.next = reader.string(); 207 | break; 208 | case /* string prev */ 2: 209 | message.prev = reader.string(); 210 | break; 211 | default: 212 | let u = options.readUnknownField; 213 | if (u === "throw") 214 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 215 | let d = reader.skip(wireType); 216 | if (u !== false) 217 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 218 | } 219 | } 220 | return message; 221 | } 222 | internalBinaryWrite(message, writer, options) { 223 | /* string next = 1; */ 224 | if (message.next !== "") 225 | writer.tag(1, WireType.LengthDelimited).string(message.next); 226 | /* string prev = 2; */ 227 | if (message.prev !== "") 228 | writer.tag(2, WireType.LengthDelimited).string(message.prev); 229 | let u = options.writeUnknownFields; 230 | if (u !== false) 231 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 232 | return writer; 233 | } 234 | } 235 | /** 236 | * @generated MessageType for protobuf message bilibili.pagination.PaginationReply 237 | */ 238 | export const PaginationReply = new PaginationReply$Type(); 239 | -------------------------------------------------------------------------------- /Script/BiliBili/protobuf/bilibili/app/playerunite/playerunite.js: -------------------------------------------------------------------------------- 1 | // @generated by protobuf-ts 2.9.0 with parameter output_javascript 2 | // @generated from protobuf file "bilibili/app/playerunite/v1/playerunite.proto" (package "bilibili.app.playerunite.v1", syntax proto3) 3 | // tslint:disable 4 | // @generated by protobuf-ts 2.9.0 with parameter output_javascript 5 | // @generated from protobuf file "bilibili/app/playerunite/v1/playerunite.proto" (package "bilibili.app.playerunite.v1", syntax proto3) 6 | // tslint:disable 7 | import { ServiceType } from "@protobuf-ts/runtime-rpc"; 8 | import { WireType } from "@protobuf-ts/runtime"; 9 | import { UnknownFieldHandler } from "@protobuf-ts/runtime"; 10 | import { reflectionMergePartial } from "@protobuf-ts/runtime"; 11 | import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; 12 | import { MessageType } from "@protobuf-ts/runtime"; 13 | import { History } from "../../../playershared/playershared"; 14 | import { QnTrialInfo } from "../../../playershared/playershared"; 15 | import { PlayArc } from "../../../playershared/playershared"; 16 | import { Any } from "../../../../google/protobuf/any"; 17 | import { Event } from "../../../playershared/playershared"; 18 | import { PlayDeviceConf } from "../../../playershared/playershared"; 19 | import { PlayArcConf } from "../../../playershared/playershared"; 20 | import { VodInfo } from "../../../playershared/playershared"; 21 | import { VideoVod } from "../../../playershared/playershared"; 22 | // @generated message type with reflection information, may provide speed optimized methods 23 | class PlayViewUniteReq$Type extends MessageType { 24 | constructor() { 25 | super("bilibili.app.playerunite.v1.PlayViewUniteReq", [ 26 | { no: 1, name: "vod", kind: "message", T: () => VideoVod }, 27 | { no: 2, name: "spmid", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 28 | { no: 3, name: "from_spmid", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, 29 | { no: 4, name: "extra_content", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 9 /*ScalarType.STRING*/ } } 30 | ]); 31 | } 32 | create(value) { 33 | const message = { spmid: "", fromSpmid: "", extraContent: {} }; 34 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 35 | if (value !== undefined) 36 | reflectionMergePartial(this, message, value); 37 | return message; 38 | } 39 | internalBinaryRead(reader, length, options, target) { 40 | let message = target ?? this.create(), end = reader.pos + length; 41 | while (reader.pos < end) { 42 | let [fieldNo, wireType] = reader.tag(); 43 | switch (fieldNo) { 44 | case /* bilibili.playershared.VideoVod vod */ 1: 45 | message.vod = VideoVod.internalBinaryRead(reader, reader.uint32(), options, message.vod); 46 | break; 47 | case /* string spmid */ 2: 48 | message.spmid = reader.string(); 49 | break; 50 | case /* string from_spmid */ 3: 51 | message.fromSpmid = reader.string(); 52 | break; 53 | case /* map extra_content */ 4: 54 | this.binaryReadMap4(message.extraContent, reader, options); 55 | break; 56 | default: 57 | let u = options.readUnknownField; 58 | if (u === "throw") 59 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 60 | let d = reader.skip(wireType); 61 | if (u !== false) 62 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 63 | } 64 | } 65 | return message; 66 | } 67 | binaryReadMap4(map, reader, options) { 68 | let len = reader.uint32(), end = reader.pos + len, key, val; 69 | while (reader.pos < end) { 70 | let [fieldNo, wireType] = reader.tag(); 71 | switch (fieldNo) { 72 | case 1: 73 | key = reader.string(); 74 | break; 75 | case 2: 76 | val = reader.string(); 77 | break; 78 | default: throw new globalThis.Error("unknown map entry field for field bilibili.app.playerunite.v1.PlayViewUniteReq.extra_content"); 79 | } 80 | } 81 | map[key ?? ""] = val ?? ""; 82 | } 83 | internalBinaryWrite(message, writer, options) { 84 | /* bilibili.playershared.VideoVod vod = 1; */ 85 | if (message.vod) 86 | VideoVod.internalBinaryWrite(message.vod, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); 87 | /* string spmid = 2; */ 88 | if (message.spmid !== "") 89 | writer.tag(2, WireType.LengthDelimited).string(message.spmid); 90 | /* string from_spmid = 3; */ 91 | if (message.fromSpmid !== "") 92 | writer.tag(3, WireType.LengthDelimited).string(message.fromSpmid); 93 | /* map extra_content = 4; */ 94 | for (let k of Object.keys(message.extraContent)) 95 | writer.tag(4, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.extraContent[k]).join(); 96 | let u = options.writeUnknownFields; 97 | if (u !== false) 98 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 99 | return writer; 100 | } 101 | } 102 | /** 103 | * @generated MessageType for protobuf message bilibili.app.playerunite.v1.PlayViewUniteReq 104 | */ 105 | export const PlayViewUniteReq = new PlayViewUniteReq$Type(); 106 | // @generated message type with reflection information, may provide speed optimized methods 107 | class PlayViewUniteReply$Type extends MessageType { 108 | constructor() { 109 | super("bilibili.app.playerunite.v1.PlayViewUniteReply", [ 110 | { no: 1, name: "vod_info", kind: "message", T: () => VodInfo }, 111 | { no: 2, name: "play_arc_conf", kind: "message", T: () => PlayArcConf }, 112 | { no: 3, name: "play_device_conf", kind: "message", T: () => PlayDeviceConf }, 113 | { no: 4, name: "event", kind: "message", T: () => Event }, 114 | { no: 5, name: "supplement", kind: "message", T: () => Any }, 115 | { no: 6, name: "play_arc", kind: "message", T: () => PlayArc }, 116 | { no: 7, name: "qn_trial_info", kind: "message", T: () => QnTrialInfo }, 117 | { no: 8, name: "history", kind: "message", T: () => History } 118 | ]); 119 | } 120 | create(value) { 121 | const message = {}; 122 | globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); 123 | if (value !== undefined) 124 | reflectionMergePartial(this, message, value); 125 | return message; 126 | } 127 | internalBinaryRead(reader, length, options, target) { 128 | let message = target ?? this.create(), end = reader.pos + length; 129 | while (reader.pos < end) { 130 | let [fieldNo, wireType] = reader.tag(); 131 | switch (fieldNo) { 132 | case /* bilibili.playershared.VodInfo vod_info */ 1: 133 | message.vodInfo = VodInfo.internalBinaryRead(reader, reader.uint32(), options, message.vodInfo); 134 | break; 135 | case /* bilibili.playershared.PlayArcConf play_arc_conf */ 2: 136 | message.playArcConf = PlayArcConf.internalBinaryRead(reader, reader.uint32(), options, message.playArcConf); 137 | break; 138 | case /* bilibili.playershared.PlayDeviceConf play_device_conf */ 3: 139 | message.playDeviceConf = PlayDeviceConf.internalBinaryRead(reader, reader.uint32(), options, message.playDeviceConf); 140 | break; 141 | case /* bilibili.playershared.Event event */ 4: 142 | message.event = Event.internalBinaryRead(reader, reader.uint32(), options, message.event); 143 | break; 144 | case /* google.protobuf.Any supplement */ 5: 145 | message.supplement = Any.internalBinaryRead(reader, reader.uint32(), options, message.supplement); 146 | break; 147 | case /* bilibili.playershared.PlayArc play_arc */ 6: 148 | message.playArc = PlayArc.internalBinaryRead(reader, reader.uint32(), options, message.playArc); 149 | break; 150 | case /* bilibili.playershared.QnTrialInfo qn_trial_info */ 7: 151 | message.qnTrialInfo = QnTrialInfo.internalBinaryRead(reader, reader.uint32(), options, message.qnTrialInfo); 152 | break; 153 | case /* bilibili.playershared.History history */ 8: 154 | message.history = History.internalBinaryRead(reader, reader.uint32(), options, message.history); 155 | break; 156 | default: 157 | let u = options.readUnknownField; 158 | if (u === "throw") 159 | throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); 160 | let d = reader.skip(wireType); 161 | if (u !== false) 162 | (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); 163 | } 164 | } 165 | return message; 166 | } 167 | internalBinaryWrite(message, writer, options) { 168 | /* bilibili.playershared.VodInfo vod_info = 1; */ 169 | if (message.vodInfo) 170 | VodInfo.internalBinaryWrite(message.vodInfo, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); 171 | /* bilibili.playershared.PlayArcConf play_arc_conf = 2; */ 172 | if (message.playArcConf) 173 | PlayArcConf.internalBinaryWrite(message.playArcConf, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); 174 | /* bilibili.playershared.PlayDeviceConf play_device_conf = 3; */ 175 | if (message.playDeviceConf) 176 | PlayDeviceConf.internalBinaryWrite(message.playDeviceConf, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); 177 | /* bilibili.playershared.Event event = 4; */ 178 | if (message.event) 179 | Event.internalBinaryWrite(message.event, writer.tag(4, WireType.LengthDelimited).fork(), options).join(); 180 | /* google.protobuf.Any supplement = 5; */ 181 | if (message.supplement) 182 | Any.internalBinaryWrite(message.supplement, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); 183 | /* bilibili.playershared.PlayArc play_arc = 6; */ 184 | if (message.playArc) 185 | PlayArc.internalBinaryWrite(message.playArc, writer.tag(6, WireType.LengthDelimited).fork(), options).join(); 186 | /* bilibili.playershared.QnTrialInfo qn_trial_info = 7; */ 187 | if (message.qnTrialInfo) 188 | QnTrialInfo.internalBinaryWrite(message.qnTrialInfo, writer.tag(7, WireType.LengthDelimited).fork(), options).join(); 189 | /* bilibili.playershared.History history = 8; */ 190 | if (message.history) 191 | History.internalBinaryWrite(message.history, writer.tag(8, WireType.LengthDelimited).fork(), options).join(); 192 | let u = options.writeUnknownFields; 193 | if (u !== false) 194 | (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); 195 | return writer; 196 | } 197 | } 198 | /** 199 | * @generated MessageType for protobuf message bilibili.app.playerunite.v1.PlayViewUniteReply 200 | */ 201 | export const PlayViewUniteReply = new PlayViewUniteReply$Type(); 202 | /** 203 | * @generated ServiceType for protobuf service bilibili.app.playerunite.v1.Player 204 | */ 205 | export const Player = new ServiceType("bilibili.app.playerunite.v1.Player", [ 206 | { name: "PlayViewUnite", options: {}, I: PlayViewUniteReq, O: PlayViewUniteReply } 207 | ]); 208 | -------------------------------------------------------------------------------- /Script/Task/ADrive.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 本脚本旨在实现阿里云盘自动签到,支持Surge,stash,Loon,QuantumultX 3 | * @author: zqzess 4 | */ 5 | 6 | 7 | const keyName = 'ADriveCheckIn' 8 | const $ = new Env('阿里云盘') 9 | ADriveInfo = $.getjson(keyName, {}) 10 | if (typeof $request !== 'undefined') { 11 | $.log('🤖获取token') 12 | GetRefresh_token() 13 | } else { 14 | $.log('🤖签到操作') 15 | GetAuthorizationKey() 16 | } 17 | 18 | function GetRefresh_token() { 19 | const body = $.toObj($request.body) 20 | let headers = { 21 | 'x-canary': $request.headers['x-canary'], 22 | 'user-agent': $request.headers['user-agent'], 23 | 'x-device-id': $request.headers['x-device-id'], 24 | 'cookie': $request.headers['cookie'] 25 | } 26 | let refresh_token = body.refresh_token 27 | if (refresh_token) { 28 | if (ADriveInfo.refresh_token) { 29 | if (ADriveInfo.refresh_token !== refresh_token) { 30 | ADriveInfo.refresh_token_body = body 31 | ADriveInfo.refresh_token = refresh_token 32 | ADriveInfo.headers = headers 33 | let t = $.setjson(ADriveInfo, keyName) 34 | if (t) { 35 | $.msg($.name, '更新阿里网盘refresh_token成功 🎉', '') 36 | } else { 37 | $.msg($.name, '更新阿里网盘refresh_token失败‼️', '') 38 | } 39 | } 40 | } else { 41 | ADriveInfo.refresh_token_body = body 42 | ADriveInfo.refresh_token = refresh_token 43 | ADriveInfo.headers = headers 44 | let t = $.setjson(ADriveInfo, keyName) 45 | if (t) { 46 | $.msg($.name, '首次写入阿里网盘refresh_token成功 🎉', '') 47 | } else { 48 | $.msg($.name, '首次写入阿里网盘refresh_token失败‼️', '') 49 | } 50 | } 51 | } 52 | $.done() 53 | } 54 | 55 | function GetAuthorizationKey() { 56 | let option = { 57 | url: 'https://auth.aliyundrive.com/v2/account/token', 58 | headers: { 59 | 'Content-Type': 'application/json', 60 | 'accept': '*/*', 61 | 'accept-language': 'zh-CN,zh-Hansq=0.9', 62 | 'x-canary': ADriveInfo.headers['x-canary'], 63 | 'x-device-id': ADriveInfo.headers['x-device-id'], 64 | 'cookie': ADriveInfo.headers['cookie'], 65 | 'user-agent': ADriveInfo.headers['user-agent'] 66 | }, 67 | body: $.toStr(ADriveInfo.refresh_token_body) 68 | } 69 | $.log('获取authorization') 70 | $.post(option, function (error, response, data) { 71 | if (error) { 72 | $.log('错误原因:' + error) 73 | $.msg($.name, '❌签到失败', '刷新authorization失败') 74 | $.done() 75 | } else if (!data) { 76 | $.log('没有获取到数据') 77 | } else { 78 | let body = $.toObj(data) 79 | let refresh_token = body.refresh_token 80 | let accessKey = 'Bearer ' + body.access_token 81 | if (refresh_token) { 82 | ADriveInfo.refresh_token_body.refresh_token = refresh_token 83 | ADriveInfo.refresh_token = refresh_token 84 | let t = $.setjson(ADriveInfo, keyName) 85 | if (t) { 86 | $.log('刷新阿里网盘refresh_token成功 🎉') 87 | } else { 88 | $.msg('刷新阿里网盘refresh_token失败‼️', '', '') 89 | } 90 | } 91 | signCheckin(accessKey) 92 | } 93 | }) 94 | } 95 | 96 | function signCheckin(authorization) { 97 | let date = new Date() 98 | let timeStamp = Date.parse(date) 99 | const xumt = 'defaultFY1_fyjs_not_loaded@@https://pages.aliyundrive.com/mobile-page/web/dailycheck.html@@' + timeStamp 100 | const url_fetch_sign = { 101 | url: 'https://member.aliyundrive.com/v1/activity/sign_in_list', 102 | headers: { 103 | 'Content-Type': 'application/json', 104 | 'accept': 'application/json, text/plain, */*', 105 | 'authorization': authorization, 106 | 'x-canary': ADriveInfo.headers['x-canary'], 107 | 'x-umt': xumt, 108 | 'origin': 'https://pages.aliyundrive.com', 109 | 'x-ua': xumt, 110 | 'user-agent': ADriveInfo.headers['user-agent'], 111 | 'referer': 'https://pages.aliyundrive.com/' 112 | }, 113 | body: $.toStr({}) 114 | } 115 | $.log('签到开始') 116 | $.post(url_fetch_sign, function (error, response, data) { 117 | if (error) { 118 | $.log('错误:' + error) 119 | $.msg($.name, '❌签到失败', '无法签到,请手动签到') 120 | $.done() 121 | } else if (!data) { 122 | $.log('没有获取到数据') 123 | } else { 124 | let body = $.toObj(data) 125 | let signInCount = Number(body.result.signInCount) 126 | let isReward = body.result.isReward 127 | let stitle = '🎉' + body.result.title + ' 签到成功' 128 | let signInLogs = body.result.signInLogs 129 | $.log('签到天数: ' + signInCount) 130 | let reward = '' 131 | signInLogs.forEach(function (i) { 132 | if (Number(i.day) === signInCount) { 133 | if (i.isReward) { 134 | reward = ' 第' + signInCount + '天奖励,' + i.reward.name + i.reward.description 135 | $.log('签到奖励:' + reward) 136 | } else { 137 | reward = i.poster?.reason + '\n' + i.poster?.name 138 | if (reward === 'undefined\nundefined') { 139 | reward = '' 140 | $.log('签到完成') 141 | GetReword(authorization, signInCount) 142 | } 143 | } 144 | } 145 | }) 146 | if (isReward && reward) { 147 | $.msg($.name, stitle, reward) 148 | } 149 | if (!isReward && reward) { 150 | stitle = '⚠️今天已经签到过了' 151 | $.msg($.name, stitle, reward) 152 | } 153 | $.done() 154 | } 155 | }) 156 | } 157 | 158 | function GetReword(authorization, signInCount) { 159 | $.log('开始自动领取奖励') 160 | const date = new Date() 161 | let timeStamp = Date.parse(date) 162 | let messageTitle, message 163 | let xumt = 'defaultFY1_fyjs_not_loaded@@https://pages.aliyundrive.com/mobile-page/web/dailycheck.html@@' + timeStamp 164 | let url_fetch_reword = { 165 | url: 'https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile', 166 | headers: { 167 | 'Content-Type': 'application/json', 168 | 'accept': 'application/json, text/plain, */*', 169 | Authorization: authorization, 170 | 'x-canary': ADriveInfo.headers['x-canary'], 171 | 'x-umt': xumt, 172 | 'origin': 'https://pages.aliyundrive.com', 173 | 'x-ua': xumt, 174 | 'user-agent': ADriveInfo.headers['user-agent'], 175 | 'referer': 'https://pages.aliyundrive.com/' 176 | }, 177 | body: $.toStr({ 178 | "signInDay": signInCount 179 | }) 180 | } 181 | $.post(url_fetch_reword, function (error, response, data) { 182 | if (error || !data) { 183 | $.log('错误:' + error) 184 | messageTitle = '❌自动领取奖励失败' 185 | message = '自动领取奖励失败,请手动领取' 186 | } else { 187 | let body = $.toObj(data) 188 | if (!body.success) { 189 | $.log('❌自动领取奖励失败') 190 | messageTitle = '❌自动领取奖励失败' 191 | message = '自动领取奖励失败,请手动领取' 192 | } else { 193 | const rewordName = body.result.name 194 | const rewordDescription = body.result.description 195 | messageTitle = '签到成功!已自动领取奖励!' 196 | message = '获得 ' + rewordDescription 197 | $.log('自动领取奖励成功,获得 ' + rewordName + rewordDescription) 198 | } 199 | } 200 | $.msg($.name, '签到成功!已自动领取奖励!', message) 201 | $.done() 202 | }) 203 | } 204 | 205 | /***************** Env *****************/ 206 | // prettier-ignore 207 | // https://github.com/chavyleung/scripts/blob/master/Env.min.js 208 | 209 | function Env(e,t){class s{constructor(e){this.env=e}send(e,t="GET"){e="string"==typeof e?{url:e}:e;let s=this.get;return"POST"===t&&(s=this.post),new Promise((t,a)=>{s.call(this,e,(e,s,r)=>{e?a(e):t(s)})})}get(e){return this.send.call(this.env,e)}post(e){return this.send.call(this.env,e,"POST")}}return new class{constructor(e,t){this.name=e,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,t),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(e,t=null){try{return JSON.parse(e)}catch{return t}}toStr(e,t=null){try{return JSON.stringify(e)}catch{return t}}getjson(e,t){let s=t;const a=this.getdata(e);if(a)try{s=JSON.parse(this.getdata(e))}catch{}return s}setjson(e,t){try{return this.setdata(JSON.stringify(e),t)}catch{return!1}}lodash_get(e,t,s){const a=t.replace(/\[(\d+)\]/g,".$1").split(".");let r=e;for(const e of a)if(r=Object(r)[e],void 0===r)return s;return r}lodash_set(e,t,s){return Object(e)!==e?e:(Array.isArray(t)||(t=t.toString().match(/[^.[\]]+/g)||[]),t.slice(0,-1).reduce((e,s,a)=>Object(e[s])===e[s]?e[s]:e[s]=Math.abs(t[a+1])>>0==+t[a+1]?[]:{},e)[t[t.length-1]]=s,e)}getdata(e){let t=this.getval(e);if(/^@/.test(e)){const[,s,a]=/^@(.*?)\.(.*?)$/.exec(e),r=s?this.getval(s):"";if(r)try{const e=JSON.parse(r);t=e?this.lodash_get(e,a,""):t}catch(e){t=""}}return t}setdata(e,t){let s=!1;if(/^@/.test(t)){const[,a,r]=/^@(.*?)\.(.*?)$/.exec(t),n=this.getval(a),o=a?"null"===n?null:n||"{}":"{}";try{const t=JSON.parse(o);this.lodash_set(t,r,e),s=this.setval(JSON.stringify(t),a)}catch(t){const n={};this.lodash_set(n,r,e),s=this.setval(JSON.stringify(n),a)}}else s=this.setval(e,t);return s}getval(e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(e);case"Quantumult X":return $prefs.valueForKey(e);default:return this.data&&this.data[e]||null}}setval(e,t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(e,t);case"Quantumult X":return $prefs.setValueForKey(e,t);default:return this.data&&this.data[t]||null}}get(e,t=(()=>{})){switch(e.headers&&(delete e.headers["Content-Type"],delete e.headers["Content-Length"],delete e.headers["content-type"],delete e.headers["content-length"]),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(e.headers=e.headers||{},Object.assign(e.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(e,(e,s,a)=>{!e&&s&&(s.body=a,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),t(e,s,a)});break;case"Quantumult X":this.isNeedRewrite&&(e.opts=e.opts||{},Object.assign(e.opts,{hints:!1})),$task.fetch(e).then(e=>{const{statusCode:s,statusCode:a,headers:r,body:n,bodyBytes:o}=e;t(null,{status:s,statusCode:a,headers:r,body:n,bodyBytes:o},n,o)},e=>t(e&&e.error||"UndefinedError"))}}post(e,t=(()=>{})){const s=e.method?e.method.toLocaleLowerCase():"post";switch(e.body&&e.headers&&!e.headers["Content-Type"]&&!e.headers["content-type"]&&(e.headers["content-type"]="application/x-www-form-urlencoded"),e.headers&&(delete e.headers["Content-Length"],delete e.headers["content-length"]),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(e.headers=e.headers||{},Object.assign(e.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](e,(e,s,a)=>{!e&&s&&(s.body=a,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),t(e,s,a)});break;case"Quantumult X":e.method=s,this.isNeedRewrite&&(e.opts=e.opts||{},Object.assign(e.opts,{hints:!1})),$task.fetch(e).then(e=>{const{statusCode:s,statusCode:a,headers:r,body:n,bodyBytes:o}=e;t(null,{status:s,statusCode:a,headers:r,body:n,bodyBytes:o},n,o)},e=>t(e&&e.error||"UndefinedError"))}}time(e,t=null){const s=t?new Date(t):new Date;let a={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(e)&&(e=e.replace(RegExp.$1,(s.getFullYear()+"").slice(4-RegExp.$1.length)));for(let t in a)new RegExp("("+t+")").test(e)&&(e=e.replace(RegExp.$1,1==RegExp.$1.length?a[t]:("00"+a[t]).slice((""+a[t]).length)));return e}queryStr(e){let t=[];for(let s in e)e.hasOwnProperty(s)&&t.push(`${s}=${encodeURIComponent(e[s])}`);let s=t.join("&");return s}queryObj(e){let t={},s=e.split("&");for(let e of s){let s=e.split("="),a=s[0],r=decodeURIComponent(s[1]||"");a&&(t[a]=r)}return t}msg(t=e,s="",a="",r){const n=e=>{switch(typeof e){case void 0:return e;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:e};case"Loon":case"Shadowrocket":return e;case"Quantumult X":return{"open-url":e}}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{let t=e.url||e.openUrl||e["open-url"];return{url:t}}case"Loon":{let t=e.openUrl||e.url||e["open-url"],s=e.mediaUrl||e["media-url"];return{openUrl:t,mediaUrl:s}}case"Quantumult X":{let t=e["open-url"]||e.url||e.openUrl,s=e["media-url"]||e.mediaUrl,a=e["update-pasteboard"]||e.updatePasteboard;return{"open-url":t,"media-url":s,"update-pasteboard":a}}}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(t,s,a,n(r));break;case"Quantumult X":$notify(t,s,a,n(r))}}log(...e){e.length>0&&(this.logs=[...this.logs,...e]),console.log(e.join(this.logSeparator))}logErr(e,t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,e,t)}}wait(e){return new Promise(t=>setTimeout(t,e))}done(e={}){const t=(new Date).getTime(),s=(t-this.startTime)/1e3;switch(this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(e)}}}(e,t)} 210 | -------------------------------------------------------------------------------- /Script/BDWP/BaiduCloud.js: -------------------------------------------------------------------------------- 1 | var _0xod4='jsjiami.com.v6',_0xod4_=['‮_0xod4'],_0x39a0=[_0xod4,'w7bDlMKgcAQ=','w57ClxQEwpU=','asO+XMK3Iw==','PUHCmcK0O8KZTQ==','PE0zU8Oo','AcOBMyvCvA==','w6TDiAtNwpI=','A8KtNjpo','IMOeDwDCpcKqVm/CrcKGZcK9','wofDnQvCug8=','aitjwrtQw7HDs8Kn','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','LcKvRw==','w7/Dl2vChcOx','w5bDkEPCj8OV','w53CrcO6w6TDnw==','jqskxjieanmqxLiES.coymQTg.v6=='];if(function(_0x383771,_0x57e10f,_0x507df0){function _0x3ec90b(_0x132b3b,_0xf462f7,_0x181791,_0x28d8cc,_0x20ec72,_0x2f2847){_0xf462f7=_0xf462f7>>0x8,_0x20ec72='po';var _0x34a6be='shift',_0x2c6f85='push',_0x2f2847='‮';if(_0xf462f7<_0x132b3b){while(--_0x132b3b){_0x28d8cc=_0x383771[_0x34a6be]();if(_0xf462f7===_0x132b3b&&_0x2f2847==='‮'&&_0x2f2847['length']===0x1){_0xf462f7=_0x28d8cc,_0x181791=_0x383771[_0x20ec72+'p']();}else if(_0xf462f7&&_0x181791['replace'](/[qkxenqxLESyQTg=]/g,'')===_0xf462f7){_0x383771[_0x2c6f85](_0x28d8cc);}}_0x383771[_0x2c6f85](_0x383771[_0x34a6be]());}return 0x11db65;};return _0x3ec90b(++_0x57e10f,_0x507df0)>>_0x57e10f^_0x507df0;}(_0x39a0,0x1ec,0x1ec00),_0x39a0){_0xod4_=_0x39a0['length']^0x1ec;};function _0x497b(_0x3143ba,_0x579ebc){_0x3143ba=~~'0x'['concat'](_0x3143ba['slice'](0x1));var _0x549bfe=_0x39a0[_0x3143ba];if(_0x497b['Gspzlk']===undefined){(function(){var _0x40d6c1=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0xaff994='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x40d6c1['atob']||(_0x40d6c1['atob']=function(_0x4dbfe0){var _0x200a8f=String(_0x4dbfe0)['replace'](/=+$/,'');for(var _0x3e0c7a=0x0,_0x16ee88,_0x999d9f,_0x2690fe=0x0,_0x5f243a='';_0x999d9f=_0x200a8f['charAt'](_0x2690fe++);~_0x999d9f&&(_0x16ee88=_0x3e0c7a%0x4?_0x16ee88*0x40+_0x999d9f:_0x999d9f,_0x3e0c7a++%0x4)?_0x5f243a+=String['fromCharCode'](0xff&_0x16ee88>>(-0x2*_0x3e0c7a&0x6)):0x0){_0x999d9f=_0xaff994['indexOf'](_0x999d9f);}return _0x5f243a;});}());function _0x3aa6ec(_0x3eb079,_0x579ebc){var _0x39a1fe=[],_0x152191=0x0,_0x567fe3,_0xcc3587='',_0x308dcf='';_0x3eb079=atob(_0x3eb079);for(var _0x4533e3=0x0,_0x8103c=_0x3eb079['length'];_0x4533e3<_0x8103c;_0x4533e3++){_0x308dcf+='%'+('00'+_0x3eb079['charCodeAt'](_0x4533e3)['toString'](0x10))['slice'](-0x2);}_0x3eb079=decodeURIComponent(_0x308dcf);for(var _0x3160b4=0x0;_0x3160b4<0x100;_0x3160b4++){_0x39a1fe[_0x3160b4]=_0x3160b4;}for(_0x3160b4=0x0;_0x3160b4<0x100;_0x3160b4++){_0x152191=(_0x152191+_0x39a1fe[_0x3160b4]+_0x579ebc['charCodeAt'](_0x3160b4%_0x579ebc['length']))%0x100;_0x567fe3=_0x39a1fe[_0x3160b4];_0x39a1fe[_0x3160b4]=_0x39a1fe[_0x152191];_0x39a1fe[_0x152191]=_0x567fe3;}_0x3160b4=0x0;_0x152191=0x0;for(var _0x45dc3a=0x0;_0x45dc3a<_0x3eb079['length'];_0x45dc3a++){_0x3160b4=(_0x3160b4+0x1)%0x100;_0x152191=(_0x152191+_0x39a1fe[_0x3160b4])%0x100;_0x567fe3=_0x39a1fe[_0x3160b4];_0x39a1fe[_0x3160b4]=_0x39a1fe[_0x152191];_0x39a1fe[_0x152191]=_0x567fe3;_0xcc3587+=String['fromCharCode'](_0x3eb079['charCodeAt'](_0x45dc3a)^_0x39a1fe[(_0x39a1fe[_0x3160b4]+_0x39a1fe[_0x152191])%0x100]);}return _0xcc3587;}_0x497b['NsHcDD']=_0x3aa6ec;_0x497b['BAFRxy']={};_0x497b['Gspzlk']=!![];}var _0x2aa3a2=_0x497b['BAFRxy'][_0x3143ba];if(_0x2aa3a2===undefined){if(_0x497b['HzNhFB']===undefined){_0x497b['HzNhFB']=!![];}_0x549bfe=_0x497b['NsHcDD'](_0x549bfe,_0x579ebc);_0x497b['BAFRxy'][_0x3143ba]=_0x549bfe;}else{_0x549bfe=_0x2aa3a2;}return _0x549bfe;};eval(function(_0x3fdeb6,_0xfb6222,_0x2cf8cf,_0x16ecae,_0x7f6aeb,_0x5bfa0b){var _0x576cf6={'ZwDcP':'2|5|4|3|1|0','IlfXy':function(_0xd7782b,_0x390e32){return _0xd7782b+_0x390e32;},'jzjVj':function(_0x5182a4,_0x4f7fe5){return _0x5182a4+_0x4f7fe5;},'iFtcT':function(_0x59049c,_0x2f20d7){return _0x59049c(_0x2f20d7);},'kZzwP':function(_0x278a2e,_0x45cacd){return _0x278a2e/_0x45cacd;},'Wralv':function(_0x7f5573,_0xd8463){return _0x7f5573>_0xd8463;},'fxbFa':_0x497b('‮0','S%ed')};var _0x3c9a90=_0x576cf6[_0x497b('‫1','DjwY')][_0x497b('‮2','DjwY')]('|'),_0x42e371=0x0;while(!![]){switch(_0x3c9a90[_0x42e371++]){case'0':return _0x3fdeb6;case'1':while(_0x2cf8cf--)if(_0x16ecae[_0x2cf8cf])_0x3fdeb6=_0x3fdeb6['replace'](new RegExp(_0x576cf6[_0x497b('‮3','*VGG')](_0x576cf6['jzjVj']('\x5cb',_0x576cf6['iFtcT'](_0x7f6aeb,_0x2cf8cf)),'\x5cb'),'g'),_0x16ecae[_0x2cf8cf]);continue;case'2':var _0x5e226d={'GmSFZ':function(_0x5a2a4c,_0x355950){return _0x576cf6['jzjVj'](_0x5a2a4c,_0x355950);},'ruZwI':function(_0x34c148,_0x2200bf){return _0x34c148(_0x2200bf);},'gFtWG':function(_0x381ab9,_0x3b8e63){return _0x576cf6[_0x497b('‫4','%T2w')](_0x381ab9,_0x3b8e63);},'cSYRL':function(_0x520461,_0x480b57){return _0x576cf6['Wralv'](_0x520461,_0x480b57);},'hmlLD':function(_0x5c8f1c,_0x20f601){return _0x576cf6[_0x497b('‮5','Wq$q')](_0x5c8f1c,_0x20f601);},'lLNzV':_0x576cf6[_0x497b('‫6','xu#T')]};continue;case'3':;continue;case'4':if(!''[_0x497b('‮7','gxdb')](/^/,String)){while(_0x2cf8cf--)_0x5bfa0b[_0x576cf6['iFtcT'](_0x7f6aeb,_0x2cf8cf)]=_0x16ecae[_0x2cf8cf]||_0x7f6aeb(_0x2cf8cf);_0x16ecae=[function(_0x7f6aeb){return _0x5bfa0b[_0x7f6aeb];}];_0x7f6aeb=function(){return _0x5e226d[_0x497b('‮8','T]$2')];};_0x2cf8cf=0x1;}continue;case'5':_0x7f6aeb=function(_0x2cf8cf){return _0x5e226d[_0x497b('‫9','5Ifi')](_0x2cf8cf<_0xfb6222?'':_0x5e226d[_0x497b('‫a','&oei')](_0x7f6aeb,_0x5e226d[_0x497b('‫b','S%ed')](parseInt,_0x5e226d['gFtWG'](_0x2cf8cf,_0xfb6222))),_0x5e226d['cSYRL'](_0x2cf8cf=_0x2cf8cf%_0xfb6222,0x23)?String[_0x497b('‫c','5Ifi')](_0x5e226d[_0x497b('‫d','3VBd')](_0x2cf8cf,0x1d)):_0x2cf8cf[_0x497b('‫e','nfjD')](0x24));};continue;}break;}}(_0x497b('‮f','S)q1'),0x3e,0x198,'||||body||url|method||indexOf|u7ea7|action_url|u4f1a||vip|u8d85||https||com|svip|title|user||u5458||baidu|pan|wap|GET|u7684|u4f60|null|u6c38|4102415999|188E3|from|u4e3a|E5|status|u7ebf|u4e0b|u8f7d|u901f|u7528|u5458SVIP|u4e13|button|u7eed|myvip3|uff0c|data|u9762|logid|cluster|u6743|u60a8|format|user_info|V10|u5b9a|u5236||u4e86V10|u5c5e|u798f|u5229|||u5df2|text|u58d5|u723d|u8d39|request_id|E7|u5361|app|user_status|level|query|memberChannel|POST|product_infos|product_id|u4e45|detail_cluster|u5c0a|u3001|u6781|u7279|is_svip|upgrade|home|u6052|u73cd|u85cf|u7248|title_action_url|content|staticsns|cdn|bcebos|amis|png|info|vipcard|guide|levelguide|volume|end_time|1577894399|start_time|level_info|history_value|current_level|last_manual_collection_time|current_value|history_level|u4f7f|status_data|user_type|u6ee1|8D|87|records|u671f|u6237|var|request|get_info|cms|response|JSON|if|buy_time|offlinedl|function_num|buy_description|u79bb|u5957|u9910|product_description|product_name|16505201442738640729|product_type|vip2_7d|notice|30T|u5927|u7a7a|u95f4|u7b49|u4efb|u4eab|is_vip|in|vip_type|user_background|tips_data_list|u5b9e|u540d|u7fa1|u6155|u5728|u89e3|u538b|u65b0|u4e0a|u4e86PDF|u8f6cWord|bdnetdisk|action|swan|m_n_v|swan_app_key|8PPKdfjaGUz2lYS7d3zDvT6Gt2Ct9iVO|guide_data|u62e5|u6709|u89c6|u9891|u500d|u7b4938|u9879|tips_data|accumulated_uncollected_points|daily_value|accumulated_lost_points|current_max_points|500|default_daily_value|accumulated_day|status_data_arr|new_guide_data|sub_card_list|u656c|u5c0f|u4e3b|icon_url|2022|1646383463592|8A|A0|E9|80|9F|BA|A7|8888|done|u540e|emotional_tip_front|u966a|u8d70|u8fc7|u6bcf|u4e00|u5929|10485760|102400|skin|errno|show_msg|2020|90|BE|9A|87_|base_img|img_list|preview_img|thumbnail_img|up_img|u8be5|u3002|u5230|getinfo|getv10info|config|parse|5210897752128663390|offlinedl_permanent|svip2_nd|auto_upgrade_to_svip|current_product|current_product_v2|reminder||reminderWithContent|u8d35|advertiseContent|yun|buy|center|tag|reminderpush1|u9650|leftseconds|3122064E3|nextState|normal|user_tag|has_buy_record|has_buy_vip_svip_record|last_buy_record_creat_time|1664813043|last_vip_type|last_vip_svip_end_time|is_svip_sign|notice_user_type|notice_user_status|is_first_act|level_current_value|level_current|status_desc|status_detail|v10_guide|get_next_value_gap|tips|ab_test|points|v10_expire_time|v10_rank|888|svip_expire_time|v10_id|vip_point|vip_level|replace|is_plus_buy|overdue_tip|u4e2d|u5fc3|growth_value_tip|u5f85|u6d3b|u52a8|cfg|p2sp_time_sharing|enable|ss_strategy|p2s_check|ttl|1972|first_p2s_time|p2p_high_speed|389120|p2s_limit_speed|sl_strategy|backup|p2p_check|p2p_low_speed|ss_strategy_version|p2s_change_speed|p2sp_check|p2p_only_speed|p2s_low_speed|20480|tail_size|5242880|userset|inuse|stype|1000|iphone_sharelink|web_sharelink|extra|sp_text|color_type|android_sharelink|wap_sharelink|my_img|1604029513652|E8|83|8C|E6|99|AF|bottom_text_color|avatar_pendant_img|bottom_img_dark|is_limit|name|u543e|u7687|u4e07|u7761|list_img|swan_sharelink|type|1E3|bottom_img|id|107|bottom_text_color_dark|member_img|1604029506289|A1|89|is_recommend|qq_sharelink|uniq_skin|is_used|wx_sharelink|1599408E3|1691510400|description|u8bf4|u660e|uff1a|u8bbe|u7f6e|u6210|u529f|u53ef|u524d|u5f80|u300c|u6211|u300d|u9875|u67e5|u770b|u5c55|u793a|u6548|u679c|u82e5|u8eab|u4efd|u6216|u65f6|u5c06|u6062|u590d|u9ed8|u8ba4|u6837|u5f0f|newno|0x295ce5f0e434dc00|for|length|vip_end_time|svip_end_time|stringify'['split']('|'),0x0,{}));;_0xod4='jsjiami.com.v6'; 2 | -------------------------------------------------------------------------------- /Script/Task/nga.js: -------------------------------------------------------------------------------- 1 | /* 2 | NGA签到脚本 3 | 4 | 更新时间: 2022-12-9 5 | 脚本兼容: QuantumultX, Surge, Loon 6 | 脚本作者: chouchoui 7 | 软件功能: NGA签到 8 | ************************ 9 | QX, Surge, Loon说明: 10 | ************************ 11 | 1.获取cookie 12 | 打开NGA玩家社区app,点击任务按钮,自动获取cookie 13 | 如通知成功获取cookie, 则可以使用此签到脚本. 14 | 获取Cookie后, 请将Cookie脚本禁用并移除主机名, 以免产生不必要的MITM. 15 | 脚本将在每天上午8点40执行, 您可以修改执行时间. 16 | 17 | /*********************** 18 | Surge 脚本配置: 19 | ************************ 20 | 21 | [Script] 22 | NGA刮墙 = type=cron,cronexp=40 8 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/nga.js 23 | 24 | # nga获取Cookie 「请在模块中添加,成功获取Cookie后模块应去除勾选」 25 | https://raw.githubusercontent.com/ClydeTime/Surge/main/Task/GetCookie.sgmodule 26 | 27 | ************************ 28 | QuantumultX 远程脚本配置: 29 | ************************ 30 | 31 | [task_local] 32 | # NGA刮墙 33 | 40 8 * * * https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/nga.js, tag=NGA刮墙, img-url=https://raw.githubusercontent.com/chouchoui/QuanX/master/Scripts/nga/nga.png, enabled=true 34 | 35 | [rewrite_remote] 36 | # nga获取Cookie 「成功获取Cookie后请去除勾选」 37 | https://raw.githubusercontent.com/ClydeTime/Surge/main/Task/GetCookie.conf, tag=MartinsKing签到Cookie, update-interval=172800, opt-parser=false, enabled=true 38 | 39 | ************************ 40 | Loon 远程脚本配置: 41 | ************************ 42 | 43 | [Script] 44 | # NGA刮墙 45 | cron "40 8 * * *" script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/nga.js, tag=NGA刮墙 46 | 47 | [Plugin] 48 | # nga获取Cookie 「成功获取Cookie后请禁用插件」 49 | https://raw.githubusercontent.com/ClydeTime/Surge/main/Task/GetCookie.plugin, tag=MartinsKing签到Cookie, enabled=true 50 | */ 51 | 52 | const $ = new Env("NGA刮墙"); 53 | const name = "nga"; 54 | const config = { 55 | cookie: "", 56 | contentType: "", 57 | userAgent: "", 58 | body: "" 59 | }; 60 | 61 | !(async () => { 62 | if (typeof $request != "undefined") { 63 | GetCookie(); 64 | $.done(); 65 | } else { 66 | console.log("- 任务正在进行,请耐心等待"); 67 | signNGA(); 68 | } 69 | })() 70 | 71 | function GetCookie() { 72 | if ($request.body.includes("------WebKitForm")) { 73 | const cookie = typeof $request.headers["Cookie"]=='undefined' ? $request.headers["cookie"] : $request.headers["Cookie"]; 74 | const contentType = typeof $request.headers["Content-Type"]=='undefined' ? $request.headers["content-type"] : $request.headers["Content-Type"]; 75 | const userAgent = typeof $request.headers["User-Agent"]=='undefined' ? $request.headers["user-agent"] : $request.headers["User-Agent"]; 76 | const body = $request.body; 77 | var obj = FormDataToObject(body, contentType); 78 | if (obj["__lib"] === "mission" && obj["__act"] === "get_default") { 79 | console.log("- 正在获取cookie,请稍后"); 80 | $.setdata(cookie, name + "_cookie"); 81 | $.setdata(contentType, name + "_contentType"); 82 | $.setdata(userAgent, name + "_userAgent"); 83 | var obj = FormDataToObject(body, contentType); 84 | $.setdata(JSON.stringify(obj), name + "_body"); 85 | $.content = `获取cookie: 成功! `; 86 | $.msg(name, "", $.content); 87 | } 88 | } 89 | } 90 | 91 | async function signNGA(){ 92 | config.cookie = $.getdata(name + "_cookie"); 93 | config.contentType = $.getdata(name + "_contentType"); 94 | config.userAgent = $.getdata(name + "_userAgent"); 95 | config.body = $.getdata(name + "_body"); 96 | if (!config.cookie || !config.contentType || !config.userAgent || !config.body) { 97 | $.msg(name, "请更新脚本并重新获取Cookie", ""); 98 | } else { 99 | await checkin(); 100 | const mids = await missions(); 101 | for (const mid of mids) { 102 | await checkInCountAdd(mid); 103 | } 104 | } 105 | $.done(); 106 | } 107 | 108 | 109 | async function checkin() { 110 | const newBody = { ...JSON.parse(config.body) }; 111 | newBody["__lib"] = "check_in"; 112 | newBody["__act"] = "check_in"; 113 | const options = { 114 | url: "https://ngabbs.com/nuke.php", 115 | headers: { 116 | "Content-Type": config.contentType, 117 | Cookie: config.cookie, 118 | "User-Agent": config.userAgent, 119 | }, 120 | body: ObjectToFormData(newBody, config.contentType) 121 | }; 122 | return await $.http.post(options).then( 123 | (response) => { 124 | if (response.status === 200) { 125 | const result = JSON.parse(response.body); 126 | if (result.error) { 127 | $.msg(name, "刮墙失败", result.error.join(";")); 128 | } else if (result.data) { 129 | const message = result.data[0]; 130 | const continued = result.data[1].continued; 131 | const sum = result.data[1].sum; 132 | $.msg(name, message, `连续刮墙${continued}天,累计刮墙${sum}天`); 133 | } 134 | } 135 | },(reason) => { 136 | $.logErr(reason.err, reason); 137 | $.msg(name, "刮墙失败,详细参见日志", reason.err); 138 | }); 139 | } 140 | 141 | async function missions() { 142 | const newBody = { ...JSON.parse(config.body) }; 143 | newBody["__lib"] = "mission"; 144 | newBody["__act"] = "get_default"; 145 | newBody["get_success_repeat"] = "1"; 146 | newBody["no_compatible_fix"] = "1"; 147 | const options = { 148 | url: "https://ngabbs.com/nuke.php", 149 | headers: { 150 | "Content-Type": config.contentType, 151 | Cookie: config.cookie, 152 | "User-Agent": config.userAgent, 153 | }, 154 | body: ObjectToFormData(newBody, config.contentType), 155 | }; 156 | 157 | return await $.http.post(options).then( 158 | (response) => { 159 | const result = JSON.parse(response.body); 160 | const mids = result.data[0].map((d) => d.id); 161 | return mids; 162 | }, (reason) => { 163 | $.logErr(reason.err, reason); 164 | return []; 165 | }); 166 | } 167 | 168 | async function checkInCountAdd(mid) { 169 | const newBody = { ...JSON.parse(config.body) }; 170 | newBody["__lib"] = "mission"; 171 | newBody["__act"] = "checkin_count_add"; 172 | newBody["no_compatible_fix"] = "1"; 173 | newBody["mid"] = mid; 174 | const options = { 175 | url: "https://ngabbs.com/nuke.php", 176 | headers: { 177 | "Content-Type": config.contentType, 178 | Cookie: config.cookie, 179 | "User-Agent": config.userAgent, 180 | }, 181 | body: ObjectToFormData(newBody, config.contentType), 182 | }; 183 | 184 | await $.http.post(options).then( 185 | (response) => { 186 | console.log(`mission:${mid}`); 187 | }, (reason) => { 188 | $.logErr(reason.err, reason); 189 | }); 190 | } 191 | 192 | function FormDataToObject(form, contentType) { 193 | const boundary = contentType.split("; ")[1].split("=")[1]; 194 | const splitBoundary = `--${boundary}`; 195 | const index = form.indexOf(splitBoundary); 196 | form = form.substr(index); 197 | const lastIndex = form.lastIndexOf(splitBoundary); 198 | form = form.substring(0, lastIndex); 199 | const array = compact(form.split(splitBoundary)).map((a) => { 200 | const entity = compact(a.split("\r\n")); 201 | const regex = /Content-Disposition: form-data; name="(.*)"/; 202 | var matchs = regex.exec(entity[0]); 203 | return { 204 | name: matchs[1], 205 | value: entity[1], 206 | }; 207 | }); 208 | 209 | function compact(array) { 210 | let resIndex = 0; 211 | const result = []; 212 | if (array == null) { 213 | return result; 214 | } 215 | for (const value of array) { 216 | if (value) { 217 | result[resIndex++] = value; 218 | } 219 | } 220 | return result; 221 | } 222 | 223 | const result = {}; 224 | array.forEach((a) => { 225 | result[a.name] = a.value; 226 | }); 227 | return result; 228 | } 229 | 230 | function ObjectToFormData(object, contentType) { 231 | const boundary = contentType.split("; ")[1].split("=")[1]; 232 | const splitBoundary = `--${boundary}`; 233 | var body = `${splitBoundary}\r\n`; 234 | const array = []; 235 | for (const key in object) { 236 | if (object.hasOwnProperty(key)) { 237 | array.push({ 238 | name: key, 239 | value: object[key], 240 | }); 241 | } 242 | } 243 | var data = array.map((element) => { 244 | var name = `Content-Disposition: form-data; name="${element.name}"`; 245 | var entityString = `${name}\r\n\r\n${element.value}`; 246 | return entityString; 247 | }); 248 | body = `${body}${data.join( 249 | `\r\n${splitBoundary}\r\n` 250 | )}\r\n${splitBoundary}--\r\n`; 251 | return body; 252 | } 253 | 254 | function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}isShadowrocket(){return"undefined"!=typeof $rocket}isStash(){return"undefined"!=typeof $environment&&$environment["stash-version"]}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,n]=i.split("@"),a={url:`http://${n}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),n=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(n);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){if(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)});else if(this.isQuanX())this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t&&t.error||"UndefinedError"));else if(this.isNode()){let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:i,statusCode:r,headers:o,rawBody:n}=t,a=s.decode(n,this.encoding);e(null,{status:i,statusCode:r,headers:o,rawBody:n,body:a},a)},t=>{const{message:i,response:r}=t;e(i,r,r&&s.decode(r.rawBody,this.encoding))})}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)});else if(this.isQuanX())t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t&&t.error||"UndefinedError"));else if(this.isNode()){let i=require("iconv-lite");this.initGotEnv(t);const{url:r,...o}=t;this.got[s](r,o).then(t=>{const{statusCode:s,statusCode:r,headers:o,rawBody:n}=t,a=i.decode(n,this.encoding);e(null,{status:s,statusCode:r,headers:o,rawBody:n,body:a},a)},t=>{const{message:s,response:r}=t;e(s,r,r&&i.decode(r.rawBody,this.encoding))})}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl,i=t["update-pasteboard"]||t.updatePasteboard;return{"open-url":e,"media-url":s,"update-pasteboard":i}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(!this.isMute){if(this.isSurge()||this.isLoon()){$notification.post(e,s,i,o(r))}else if(this.isQuanX()){$notify(e,s,i,o(r))}}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),this.isSurge()||this.isQuanX()||this.isLoon()?$done(t):this.isNode()&&process.exit(1)}}(t,e)} 255 | -------------------------------------------------------------------------------- /Script/KWYY/kwyy_crack.js: -------------------------------------------------------------------------------- 1 | var _0xodj='jsjiami.com.v6',_0xodj_=['‮_0xodj'],_0x30cf=[_0xodj,'wr7CqljCuSbDnMO1','w6p9O1XDp8OZw6nCm2opW3fDgg==','wofDj8OJ','wp0xasKnwr0=','woXCog9P','PCseNMKdw5xpNwXDkGABXAtEw4hvDEQNw7LCnsKvw7HDjsK+QcKKDxVFwoEpwpkhDjlRw43CmcKvw7V0RcKIHcKBw6BCN17Dh8OwElwVw5zCm8ORY8KmTsOEecKFw50DS8KSD0ZzckvCnCTDvkkdwqBJw4sCJFvCsMOewpLDt8KEw6oYw7lYTV5twokWw4lgQcKNPsKFCMK8w7tiwrDDnB17RMKEY8KWX8K4JcKJw5pTdMKRY3DDswc=','JVzDlyo=','D07DiMK3','w4bCvMKkZCfChMKjwpvDig==','w4XDjMKUw4ccOFXDp8O3VS3Com8=','EiPCkTg=','UnvDjG8CwqxEEnltwoDDosKl','w7TCu8Ktw4lNw67CpsOSw7s8woELw4A=','XcOSw5rDtg==','MznDvcO3','SVbCq8KjHw==','AlzDv8K5ccKGM3vDt8KhMlbDgkY=','w4vCkwdcw7fClBMaHMOZIMKTw4zDm2YFWcK8w6/Ci8Kqw63DsQ8ewotuXsKHP8OAwpIVWhPCvMO+wqMdQcK+wr5bwrvDnsKMTVwWV8KGwqZXV8KLRsOow4vDqHjCnHrCsQxvZCvCsQ==','wokxbMK1','wofClMOUwoBG','w5JIU8OLwr5LRsKd','wrwLQR3DqMO1w7HCpMOHJsKTRMOS','wqIHw4TDiA==','wrNFDkA4','UMOAw7/DhsKwNhUNw4A=','w4YkHMOK','wqRcfMOOwrBwW0Vpw4RZMcOe','ZsO1ezo=','wpfCoFJTw6o=','cxvCocKHb8KNVgrDnwTDv8OLwr8=','w6fCpwNgFcOJwrHDisOf','wo8/fMKt','wr50wqdK','SSvDki0=','w6g6w5nChzXCq8OEMMOSAn8HwrbDnsKOwr3Dtw==','wozCkRpcwqvDmA4aAcOcJMKZw4w=','w53CnsOtwrLDs8OvCg==','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','LkTDtcOQJMOwCQ==','wqbCjHY=','acOTwqfCtA==','NU/DocOZPcOcCg==','acONwqjDgmLDpcOHwr9Gw5B5w4h0','fkhmwp3DiMKuwoQ=','w5DCmMOrwq7DrsOtEcKfwoFDYCY9w50=','wpXCqBtawrHDtcOq','w6jDucOcwpk9EsOz','w4bCocKOZCjCnsK2','w6QAw4Y7w4FHwqFVPXvCrUDDgQ==','G8KewqTChsKvH8Oqw4/CqA==','w5PChgFfw6E=','KcOGwqPDjA==','ZUNywpTDkcKCwoc=','w4rCjsO8VDbDqsKP','Y8OweT4Vc1Nlw7DDiAA=','wqg8wo3CgnM=','wr1GQ1PDqsK7w7jDrsOBasKQCMOW','SsOswpjCiTE=','woLCjGUy','wprCnMOwwrLCvcKhR8KdwpFDNCpswptJYk4fwoQAW0PDsA95RkvDrMKPWQhuwozCosO1L8OUw43Ci8KkwpjCvmzDlcKkw7Rsw5PCgG7DtxHCqMOowoV5FCYVwqsHLgPDhsKlABbCiD88w7VFAMOKUWAJwr8JwpfCgMKZw5bCo2bDusOia0DDi8K3w4sg','b8O6w77CoQ==','w7zCpwV5CMKUw7fCg8OPHMO0D8Kdw67Cln91XjYiakp7BkcoDjLDs1bCssK6JsOSHcKAREZtVcOEdMK+w7EGw7XDgMKBwqHDo8OHw5rCriRiDsOzHmrCn8O4OMKmIlsXYy8=','w5kgw6UOw73DlsO+w74lw4jDqUDCvw==','wofDjMK4bF3CoUzDgTzDvsKrUC3DjMK/w7/DpsODw53CgSstwrDDm8KVCSPDgEjDk8O7w7DDq1pTbnzChHLDr8KHwoA3Vz3DrsKGJztqw7hwQsO4BMK4w64dwqZQwoPDh1bDh8K1wrA2wpI=','w6DCqmDCiA==','AcKEwrLCisK5N8Ol','OMKlwoXCuw==','w6vCq2DClG7CrcKj','PQgOw5/CoQ==','w7HCvcOhw4lOwqDCpsKYw7k+w40Kw4TDuMOOXcOCw6LCu2zCmRbCsMKZwqjCqRPDgA/Dk03CocOSwrVSwrHCucOGK8OOSTM+w5l+aFHCsmtGGsOEJ8KFw5Y6w7/CncK3XMOuMMOFwqJGwpUnw5rDqcOTD8KOwp/Di8OSS8OjworDlw==','Qmxuwo8w','JVLDlCXDucKcCg==','AknChUMm','w4ZVS8OTwoJVVcKdBg==','aEJhwp/Dv8KkwoXDosOZExRa','wpPCksOAwow=','w6MZPsKVw60lCxUg','FSXCkjpC','wpHCpUNfw5ZTVGTCgg==','woLChMOlwrvDkcOnDMKOwpdmdXRiwpw=','wofCrEdSw7pTQQ==','w41IWMOYwqU=','w7XDrsOIwpk=','w5lCYsKNw5DDq8KgPg==','w7LCoHbCmHnChg==','GMKLwqTCnMKk','wovCgMK5','woLCmsOtwqHDog==','wpLCpkxBw7A=','w5zCoMKEZiM=','a8OdKw==','MlLDjSzDiQ==','wo/Cm8K5w7hz','w5PClRpPw6E=','w4LCkhdFw6s=','w5/CoMKGaDPCqA==','SsOzwprChzY=','QnNswoE3','wqAPw57DiMKF','wrYPw5Q=','G0PDncKvX8KYKw==','w4fCj8OvXxjDjMKNw5A2JcO2bR3Dhg==','wrgdwpsi','w5coGA==','wo/Cg3U2AMOOCA==','w69/wo/CtsKTwoN9','wqPCvxXCsiM=','wpfCrBlFwrU=','I0vDpcOU','L1jDhi/DuMKbGxFE','w6R+wo/Cqg==','w6TCoic=','JWYOJA==','woDCjcO0wq7DpsOtDQ==','ZX8DLcKkw4BqJkbChzJQEFMCw5w=','M1jDkyfDm8KRGw==','wrBED8O3w6PDu8Kyw5sow73CocKhwrbDkTA9wrbCrSBKQDo/wrfCjsOEwrHCt08FMcKDRmkAwpnCqj7DtV47X3vCqk4pw6gsw5VswqM8w6Vew47CgT1QwptkVQ3Dui3CkSwfcMKoDG15Uy8Bw4hTMcOq','TVrCq8K6F8Kcw7w=','w4XCoR5OwqXDpMO2w43CjsKOwqHClsO8woFow5LDjcKmwr7DoMOawoTCqMKKHMK/U2sdLcOxOVRewo7DoSnDij4YUmJCFAHCksKVw6TDssOGNxQhaSBBw7zDkMKzw4RCw7duA8KAw47DpcKOZMOLezIUwqHCkSjCrcOLIsKyQsKlSw==','wrdJDlkwW1E=','w6HDi0TDrsOyJcOVTmY9A3sbwoLDg3nCqMKYw4jCh8OmIsK7ZRwGUsON','wp3DncK8cE/DuAY=','fgsDw4bCgsKUw5vDvjfDvsK2L8OKPh7DrsOFEMO3Hl8vFcKRwrUmwpXCnsKBwp4wwrrDkQ==','w53CqsKabTHCssK1','w6LDucOrwpIOwpnDp8KUwqJ+w5QZw4rCpsOIVcKOw6HCvSLCk1zCscKaw6TCqxLCng==','wrUpw4DCm3vCrcOP','w5BfTMORwrZGQA==','w6Ulw4PCoXPCvsOmJsKFAn4bw6bDi8KMwqbDssOZ','jLPsDjiamdgiK.APPcoAmW.vp6nQG=='];if(function(_0x19af5b,_0x20212a,_0x587559){function _0x2ae47f(_0x4dcea3,_0x4c5507,_0x42c99c,_0x4c4bfa,_0x9ea8e0,_0x34fb4f){_0x4c5507=_0x4c5507>>0x8,_0x9ea8e0='po';var _0x55bf2b='shift',_0x30045c='push',_0x34fb4f='‮';if(_0x4c5507<_0x4dcea3){while(--_0x4dcea3){_0x4c4bfa=_0x19af5b[_0x55bf2b]();if(_0x4c5507===_0x4dcea3&&_0x34fb4f==='‮'&&_0x34fb4f['length']===0x1){_0x4c5507=_0x4c4bfa,_0x42c99c=_0x19af5b[_0x9ea8e0+'p']();}else if(_0x4c5507&&_0x42c99c['replace'](/[LPDdgKAPPAWpnQG=]/g,'')===_0x4c5507){_0x19af5b[_0x30045c](_0x4c4bfa);}}_0x19af5b[_0x30045c](_0x19af5b[_0x55bf2b]());}return 0x11d7ea;};return _0x2ae47f(++_0x20212a,_0x587559)>>_0x20212a^_0x587559;}(_0x30cf,0x11f,0x11f00),_0x30cf){_0xodj_=_0x30cf['length']^0x11f;};function _0x26bc(_0x16f0e5,_0x5a86a0){_0x16f0e5=~~'0x'['concat'](_0x16f0e5['slice'](0x1));var _0x139688=_0x30cf[_0x16f0e5];if(_0x26bc['YZblFz']===undefined){(function(){var _0xeaa397=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x48b2fe='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0xeaa397['atob']||(_0xeaa397['atob']=function(_0x216d79){var _0x309634=String(_0x216d79)['replace'](/=+$/,'');for(var _0x137cb6=0x0,_0x54bac8,_0x1a30af,_0x46e646=0x0,_0x269d07='';_0x1a30af=_0x309634['charAt'](_0x46e646++);~_0x1a30af&&(_0x54bac8=_0x137cb6%0x4?_0x54bac8*0x40+_0x1a30af:_0x1a30af,_0x137cb6++%0x4)?_0x269d07+=String['fromCharCode'](0xff&_0x54bac8>>(-0x2*_0x137cb6&0x6)):0x0){_0x1a30af=_0x48b2fe['indexOf'](_0x1a30af);}return _0x269d07;});}());function _0x315bfb(_0x177741,_0x5a86a0){var _0x208575=[],_0x1c3932=0x0,_0x338657,_0x377204='',_0x2a5d56='';_0x177741=atob(_0x177741);for(var _0x3b7154=0x0,_0x3fd870=_0x177741['length'];_0x3b7154<_0x3fd870;_0x3b7154++){_0x2a5d56+='%'+('00'+_0x177741['charCodeAt'](_0x3b7154)['toString'](0x10))['slice'](-0x2);}_0x177741=decodeURIComponent(_0x2a5d56);for(var _0x4371ff=0x0;_0x4371ff<0x100;_0x4371ff++){_0x208575[_0x4371ff]=_0x4371ff;}for(_0x4371ff=0x0;_0x4371ff<0x100;_0x4371ff++){_0x1c3932=(_0x1c3932+_0x208575[_0x4371ff]+_0x5a86a0['charCodeAt'](_0x4371ff%_0x5a86a0['length']))%0x100;_0x338657=_0x208575[_0x4371ff];_0x208575[_0x4371ff]=_0x208575[_0x1c3932];_0x208575[_0x1c3932]=_0x338657;}_0x4371ff=0x0;_0x1c3932=0x0;for(var _0x33e3bf=0x0;_0x33e3bf<_0x177741['length'];_0x33e3bf++){_0x4371ff=(_0x4371ff+0x1)%0x100;_0x1c3932=(_0x1c3932+_0x208575[_0x4371ff])%0x100;_0x338657=_0x208575[_0x4371ff];_0x208575[_0x4371ff]=_0x208575[_0x1c3932];_0x208575[_0x1c3932]=_0x338657;_0x377204+=String['fromCharCode'](_0x177741['charCodeAt'](_0x33e3bf)^_0x208575[(_0x208575[_0x4371ff]+_0x208575[_0x1c3932])%0x100]);}return _0x377204;}_0x26bc['pcdXBM']=_0x315bfb;_0x26bc['ATCQdH']={};_0x26bc['YZblFz']=!![];}var _0x230962=_0x26bc['ATCQdH'][_0x16f0e5];if(_0x230962===undefined){if(_0x26bc['UYvzPF']===undefined){_0x26bc['UYvzPF']=!![];}_0x139688=_0x26bc['pcdXBM'](_0x139688,_0x5a86a0);_0x26bc['ATCQdH'][_0x16f0e5]=_0x139688;}else{_0x139688=_0x230962;}return _0x139688;};var url=$request['url'],body=$response[_0x26bc('‮0','*Z]8')],method=$request['method'],Serv=_0x26bc('‫1','*dkD'),a_p=_0x26bc('‮2','TI0q'),music_pay='/music.pay',v2_vip='/vip/v2/user/vip',enc_vip=_0x26bc('‫3','dk@O'),theme=_0x26bc('‫4','W(^k'),viptab=_0x26bc('‮5','Q0#5'),userbase='/vip/v2/userbase',modified=_0x26bc('‮6','CIWm');if(-0x1!=url[_0x26bc('‫7','cBBp')](Serv)&&_0x26bc('‮8','vth0')==method){var modify={'body':'{}'};$done(modify);}if(-0x1!=url['indexOf'](a_p)&&_0x26bc('‮9','VzQj')==method){body=$response['body'][_0x26bc('‫a','cBBp')](/"playright":\d+/g,'\x22playright\x22:1')['replace'](/"downright":\d+/g,_0x26bc('‫b','XWn^'))[_0x26bc('‫c','#k9N')](/"policytype":\d+/g,_0x26bc('‫d','Q0#5'))[_0x26bc('‮e','PIEH')](/"policy":\d+/g,'\x22policy\x22:5');var response={};response['body']=body;$done(response);}else if(-0x1!=url[_0x26bc('‮f','K$R6')](a_p)&&-0x1!=url[_0x26bc('‫10','(cF9')]('getvip')){var kiLpgx=_0x26bc('‮11','(8Y]')['split']('|'),CDVqjs=0x0;while(!![]){switch(kiLpgx[CDVqjs++]){case'0':var packs={'end':0xf4849500,'bought_vip':0x1,'type':0x1,'period':0x1f,'bought_vip_end':0xf4849500};continue;case'1':body=JSON[_0x26bc('‫12','u%89')](body);continue;case'2':body=JSON[_0x26bc('‮13','W(^k')](body);continue;case'3':body['packs']=packs;continue;case'4':$done(response);continue;case'5':response={};continue;case'6':response[_0x26bc('‫14','XWn^')]=body;continue;}break;}}else-0x1!=url[_0x26bc('‫15','#k9N')](a_p)&&-0x1!=url[_0x26bc('‮16','3ZoD')](_0x26bc('‫17','d3qa'))&&$done({});-0x1!=url[_0x26bc('‫10','(cF9')](enc_vip)&&'GET'==method&&(response={'body':modified},$done(response));if(-0x1!=url['indexOf'](v2_vip)&&-0x1!=url[_0x26bc('‫15','#k9N')](_0x26bc('‫18','dk@O'))){var HiiNtL=_0x26bc('‫19','3kvs')[_0x26bc('‫1a','VzQj')]('|'),GYmgXf=0x0;while(!![]){switch(HiiNtL[GYmgXf++]){case'0':body=JSON['stringify'](body);continue;case'1':body[_0x26bc('‫1b','LjOA')]=data;continue;case'2':var data={'vipIcon':'https://image.kuwo.cn/fe/f2d09ac0-b959-404f-86fa-dc65c715c0e96.png','iconJumpurl':_0x26bc('‫1c','Q0#5'),'growthValue':'21600','vipTag':_0x26bc('‮1d','Wk86'),'vipOverSeasExpire':'0','time':'1577808000000','goSvipPage':'1','isNewUser':'1','vipmIcon':_0x26bc('‮1e','zL9r'),'svipIcon':'https://image.kuwo.cn/fe/f2d09ac0-b959-404f-86fa-dc65c715c0e96.png','vipmExpire':_0x26bc('‫1f','*dkD'),'biedSong':'0','luxuryIcon':_0x26bc('‮20','Dw4F'),'userType':'3','isYearUser':'2','vip3Expire':'0','experienceExpire':'0','luxAutoPayUser':'2','biedAlbum':'1','vipLuxuryExpire':'4102329600000','vipmAutoPayUser':'2','svipAutoPayUser':'2','vipExpire':'4102329600000','svipExpire':'4102329600000'};continue;case'3':response[_0x26bc('‫21','rC[!')]=body;continue;case'4':$done(response);continue;case'5':body=JSON['parse'](body);continue;case'6':response={};continue;}break;}}else-0x1!=url['indexOf'](v2_vip)&&-0x1!=url['indexOf']('jsonpcallback')&&$done({});if(-0x1!=url[_0x26bc('‫22','u%89')](music_pay)&&_0x26bc('‫23','u%89')==method)if(-0x1!=body[_0x26bc('‫24','rC[!')](_0x26bc('‫25','T10X'))){var tAOjhv=_0x26bc('‫26','A^U$')[_0x26bc('‮27','ty0j')]('|'),jAYTPG=0x0;while(!![]){switch(tAOjhv[jAYTPG++]){case'0':user[_0x26bc('‫28','pt!f')]=0x0;continue;case'1':body['user']=[user];continue;case'2':response={};continue;case'3':user['id']=sons_id;continue;case'4':user[_0x26bc('‫29','5zps')]=0x62ca4da9;continue;case'5':user[_0x26bc('‮2a','F1%Y')]=0x12c;continue;case'6':user['playVideoCnt']=0x0;continue;case'7':user[_0x26bc('‮2b','#k9N')]=0x0;continue;case'8':response[_0x26bc('‮2c','h@f(')]=JSON[_0x26bc('‫2d','!uM4')](body);continue;case'9':var info=body[_0x26bc('‫2e','TI0q')][0x0],user={};continue;case'10':user[_0x26bc('‫2f','vth0')]=0x12c;continue;case'11':user[_0x26bc('‫30','Q0#5')]=0xbb8;continue;case'12':user[_0x26bc('‫31','vth0')]=0x0;continue;case'13':user[_0x26bc('‫32','F1%Y')]=0x1666118f;continue;case'14':user[_0x26bc('‫33','K$R6')]=audio_policy;continue;case'15':user[_0x26bc('‫34','v!hD')]=audio_policy_1;continue;case'16':user[_0x26bc('‫35','rC[!')]=0x3e8;continue;case'17':body=JSON[_0x26bc('‮36','u%89')](body);continue;case'18':user[_0x26bc('‮37','T$Jp')]=0xf4849500;continue;case'19':user[_0x26bc('‫38','Q0#5')]=audio_price;continue;case'20':for(var sons_id=body[_0x26bc('‮39','vth0')][0x0]['id'],audio_pid=body[_0x26bc('‮3a','(cF9')][0x0]['audio'][0x0][_0x26bc('‫3b','qN*)')],audio_price=body[_0x26bc('‮3c','pt!f')][0x0][_0x26bc('‫3d','T$Jp')][0x0][_0x26bc('‫3e','W(^k')],audio_policy=body['songs'][0x0][_0x26bc('‮3f','W(^k')][0x0][_0x26bc('‮40','(cF9')],audio_policy_1=audio_policy+'_1',audio_length=body[_0x26bc('‮41','VzQj')][0x0]['audio']['length'],i=0x0;i { 8 | if (typeof $request != "undefined") { 9 | $.log("- 正在获取cookie, 请稍后") 10 | GetCookie(); 11 | $.done(); 12 | } else { 13 | if (!autoLoginInfo || !bodyStr) { 14 | $.msg($.name, '', '❌ 请先获取建行生活Cookie。'); 15 | return; 16 | } else { 17 | await getLatestVersion(); // 获取版本信息 18 | $.token = ''; 19 | $.info = $.toObj(bodyStr); 20 | $.info2 = $.toObj(autoLoginInfo); 21 | $.giftList = []; 22 | $.giftList2 = []; 23 | $.getGiftMsg = ""; 24 | $.isGetGift = false; 25 | $.DeviceId = $.info2['DeviceId']; 26 | $.MBCUserAgent = $.info2['MBCUserAgent']; 27 | $.ALBody = $.info2['Body']; 28 | $.log(`===== 账号[${$.info?.USR_TEL ? hideSensitiveData($.info?.USR_TEL, 3, 4) : '🤒匿名用户'}]开始签到 =====\n`); 29 | if (!$.info?.MID || !$.DeviceId || !$.MBCUserAgent || !$.ALBody) { 30 | message += `🎉 账号 [${$.info?.USR_TEL ? hideSensitiveData($.info?.USR_TEL, 3, 4) : '🤒匿名用户'}] 缺少参数,请重新获取Cookie。\n`; 31 | return; 32 | } 33 | await autoLogin(); // 刷新 session 34 | if (!$.token) return; 35 | await main(); // 签到主函数 36 | if ($.giftList.length > 0) { 37 | for (let j = 0; j < $.giftList.length; j++) { 38 | if ($.isGetGift) break; 39 | let item = $.giftList[j] 40 | $.couponId = item?.couponId; 41 | $.nodeDay = item?.nodeDay; 42 | $.couponType = item?.couponType; 43 | $.dccpBscInfSn = item?.dccpBscInfSn; 44 | $.continue = false; 45 | $.log(`尝试领取[${giftMap[giftType]}]券`); 46 | for (let k = 1; k <= 3; k++) { 47 | if (!$.continue) { 48 | if (k >= 2) $.log(`领取失败,重试一次`); 49 | await $.wait(1000 * 5); 50 | await getGift(); // 领取奖励 51 | if ($.isGetGift) break; 52 | } 53 | } 54 | }; 55 | if (!$.isGetGift) { 56 | $.getGiftMsg = `请打开app查看优惠券到账情况。\n`; 57 | } 58 | message += "," + $.getGiftMsg; 59 | } 60 | await $.wait(1000 * 3); 61 | } 62 | 63 | if (message) { 64 | message = message.replace(/\n+$/, ''); 65 | $.msg($.name, '', message); 66 | } 67 | } 68 | })() 69 | .catch((e) => $.logErr(e)) 70 | .finally(() => $.done()) 71 | 72 | 73 | // 获取签到数据 74 | function GetCookie() { 75 | const headers = ObjectKeys2LowerCase($request.headers); // 将 headers 的所有 key 转换为小写以兼容各个代理 App 76 | if ($request && $request.url.indexOf("A3341A038") > -1) { 77 | $.body = $.toObj($request.body); 78 | $.body['MID'] = headers['mid']; 79 | $.body = JSON.stringify($.body); 80 | $.log(`开始新增用户数据 ${$.body}`); 81 | $.setdata($.body, 'JHSH_BODY'); 82 | $.msg($.name, ``, `🎉 建行生活签到数据获取成功。`); 83 | } else if (/autoLogin/.test($request.url)) { 84 | $.DeviceId = headers['deviceid']; 85 | $.MBCUserAgent = headers['mbc-user-agent']; 86 | if ($.DeviceId && $.MBCUserAgent && $request.body) { 87 | autoLoginInfo = { 88 | "DeviceId": $.DeviceId, 89 | "MBCUserAgent": $.MBCUserAgent, 90 | "Body": $request.body 91 | } 92 | $.setdata($.toStr(autoLoginInfo), 'JHSH_LOGIN_INFO'); 93 | $.log($.toStr(autoLoginInfo) + "写入成功"); 94 | }else { 95 | $.log("❌ autoLogin 数据获取失败"); 96 | } 97 | } 98 | } 99 | 100 | // 刷新 session 101 | async function autoLogin() { 102 | let opt = { 103 | url: `https://yunbusiness.ccb.com/clp_service/txCtrl?txcode=autoLogin`, 104 | headers: { 105 | 'AppVersion': AppVersion, 106 | 'Content-Type': `application/json`, 107 | 'DeviceId': $.DeviceId, 108 | 'Accept': `application/json`, 109 | 'MBC-User-Agent': $.MBCUserAgent, 110 | 'Cookie': '' 111 | }, 112 | body: $.ALBody 113 | } 114 | return new Promise(resolve => { 115 | $.post(opt, async (error, response, data) => { 116 | try { 117 | let result = $.toObj(data) || response.body; 118 | // 如果数据未加密,则 session 未过期 119 | if (result?.errCode) { 120 | // {"newErrMsg":"未能处理您的请求。如有疑问,请咨询在线客服或致电95533","data":"","reqFlowNo":"","errCode":"0","errMsg":"session未失效,勿重复登录"} 121 | // $.token = $.getdata('JHSH_TOKEN'); 122 | $.log(`${result?.errMsg}`); 123 | } else { 124 | const set_cookie = response.headers['set-cookie'] || response.headers['Set-cookie'] || response.headers['Set-Cookie']; 125 | // !$.isNode() ? $.setdata($.token, 'JHSH_TOKEN') : ''; // 数据持久化 126 | let new_cookie = $.toStr(set_cookie).match(/SESSION=([a-f0-9-]+);/); 127 | if (new_cookie) { 128 | $.token = new_cookie[0]; 129 | $.log(`✅ 刷新 session 成功!`); 130 | } else { 131 | message += `❌ 账号 [${$.info?.USR_TEL ? hideSensitiveData($.info?.USR_TEL, 3, 4) : '🤒匿名用户'}] 刷新 session 失败,请重新获取Cookie。\n`; 132 | $.log(`⛔️ 刷新 session 失败`); 133 | } 134 | } 135 | } catch (error) { 136 | $.log(error); 137 | } finally { 138 | resolve() 139 | } 140 | }); 141 | }) 142 | } 143 | 144 | // 签到主函数 145 | function main() { 146 | let opt = { 147 | url: `https://yunbusiness.ccb.com/clp_coupon/txCtrl?txcode=A3341A115`, 148 | headers: { 149 | "MID": $.info?.MID, 150 | "Content-Type": "application/json;charset=utf-8", 151 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/CloudMercWebView/UnionPay/1.0 CCBLoongPay", 152 | "Accept": "application/json,text/javascript,*/*", 153 | "Cookie": $.token 154 | }, 155 | body: `{"ACT_ID":"${$.info.ACT_ID}","REGION_CODE":"${$.info.REGION_CODE}","chnlType":"${$.info.chnlType}","regionCode":"${$.info.regionCode}"}` 156 | } 157 | return new Promise(resolve => { 158 | $.post(opt, async (err, resp, data) => { 159 | try { 160 | err && $.log(err); 161 | if (data) { 162 | data = $.toObj(data); 163 | let text = ''; 164 | if (data.errCode == 0) { 165 | text = `🎉 账号 [${$.info?.USR_TEL ? hideSensitiveData($.info?.USR_TEL, 3, 4) : '🤒匿名用户'}] 签到成功`; 166 | $.log(text); 167 | message += text; 168 | if (data?.data?.IS_AWARD == 1) { 169 | $.GIFT_BAG = data?.data?.GIFT_BAG; 170 | $.GIFT_BAG.forEach(item => { 171 | let body = { "couponId": item.couponId, "nodeDay": item.nodeDay, "couponType": item.couponType, "dccpBscInfSn": item.dccpBscInfSn }; 172 | if (new RegExp(`${giftMap[giftType]}`).test(item?.couponName)) { 173 | if (/信用卡/.test(item?.couponName)) { 174 | $.giftList.unshift(body); 175 | } else { 176 | $.giftList.push(body); 177 | } 178 | } else { 179 | $.giftList2.push(body); 180 | } 181 | }) 182 | $.giftList = [...$.giftList, ...$.giftList2]; 183 | } else if (data?.data?.NEST_AWARD_DAY >= 1) { 184 | text = `继续签到${data.data.NEST_AWARD_DAY}天可领取${giftMap[giftType]}券`; 185 | message += `,${text}\n`; 186 | $.log(text); 187 | } else { 188 | $.log(`暂无可领取的奖励`); 189 | message += "\n"; 190 | } 191 | } else { 192 | $.log($.toStr(data)); 193 | text = `❌ 账号 [${$.info?.USR_TEL ? hideSensitiveData($.info?.USR_TEL, 3, 4) : '🤒匿名用户'}] 签到失败,${data.errMsg}\n`; 194 | $.log(text); 195 | message += text; 196 | } 197 | } else { 198 | $.log("服务器返回了空数据"); 199 | } 200 | } catch (error) { 201 | $.log(error); 202 | } finally { 203 | resolve(); 204 | } 205 | }) 206 | }) 207 | } 208 | 209 | 210 | // 领取奖励 211 | async function getGift() { 212 | let opt = { 213 | url: `https://yunbusiness.ccb.com/clp_coupon/txCtrl?txcode=A3341C120`, 214 | headers: { 215 | "MID": $.info?.MID, 216 | "Content-Type": "application/json;charset=utf-8", 217 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/CloudMercWebView/UnionPay/1.0 CCBLoongPay", 218 | "Accept": "application/json,text/javascript,*/*" 219 | }, 220 | body: `{"mebId":"${$.info.MEB_ID}","actId":"${$.info.ACT_ID}","nodeDay":${$.nodeDay},"couponType":${$.couponType},"nodeCouponId":"${$.couponId}","dccpBscInfSn":"${$.dccpBscInfSn}","chnlType":"${$.info.chnlType}","regionCode":"${$.info.regionCode}"}` 221 | } 222 | return new Promise(resolve => { 223 | $.post(opt, async (err, resp, data) => { 224 | try { 225 | err && $.log(err); 226 | if (data) { 227 | data = $.toObj(data); 228 | if (data.errCode == 0) { 229 | $.isGetGift = true; 230 | $.getGiftMsg = `获得签到奖励:${data?.data?.title}(${data?.data?.subTitle})\n`; 231 | $.log($.getGiftMsg); 232 | } else { 233 | $.continue = true; 234 | $.log($.toStr(data)); 235 | } 236 | } else { 237 | $.log("服务器返回了空数据"); 238 | } 239 | } catch (error) { 240 | $.log(error); 241 | } finally { 242 | resolve(); 243 | } 244 | }) 245 | }) 246 | } 247 | 248 | // 获取最新版本 249 | async function getLatestVersion() { 250 | let opt = { 251 | url: `https://itunes.apple.com/cn/lookup?id=${AppId}`, 252 | headers: { "Content-Type": "application/x-www-form-urlencoded" } 253 | } 254 | return new Promise(resolve => { 255 | $.get(opt, async (err, resp, data) => { 256 | try { 257 | err && $.log(err); 258 | if (data) { 259 | try { 260 | let result = JSON.parse(data); 261 | const { trackName, bundleId, version, currentVersionReleaseDate, } = result.results[0]; 262 | AppVersion = version; 263 | $.setdata(AppVersion, 'JHSH_VERSION'); // 数据持久化 264 | $.log(`版本信息: ${trackName} ${version}\nBundleId: ${bundleId} \n更新时间: ${currentVersionReleaseDate}`); 265 | } catch (e) { 266 | $.log(e); 267 | }; 268 | } else { 269 | $.log(`版本信息获取失败\n`); 270 | } 271 | } catch (error) { 272 | $.log(error); 273 | } finally { 274 | resolve(); 275 | } 276 | }) 277 | }) 278 | } 279 | 280 | /** 281 | * 对象属性转小写 282 | * @param {*} obj 283 | * @returns 284 | */ 285 | function ObjectKeys2LowerCase(obj) { 286 | const _lower = Object.fromEntries(Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v])) 287 | return new Proxy(_lower, { 288 | get: function (target, propKey, receiver) { 289 | return Reflect.get(target, propKey.toLowerCase(), receiver) 290 | }, 291 | set: function (target, propKey, value, receiver) { 292 | return Reflect.set(target, propKey.toLowerCase(), value, receiver) 293 | } 294 | }) 295 | } 296 | 297 | // 数据脱敏 298 | function hideSensitiveData(string, head_length = 2, foot_length = 2) { 299 | let star = ''; 300 | for (var i = 0; i < string.length - head_length - foot_length; i++) { 301 | star += '*'; 302 | } 303 | return string.substring(0, head_length) + star + string.substring(string.length - foot_length); 304 | } 305 | 306 | 307 | // prettier-ignore 308 | function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,a)=>{s.call(this,t,(t,s,r)=>{t?a(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const a=this.getdata(t);if(a)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}lodash_get(t,e,s){const a=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of a)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,a)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[a+1])>>0==+e[a+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,a]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,a,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,a,r]=/^@(.*?)\.(.*?)$/.exec(e),n=this.getval(a),o=a?"null"===n?null:n||"{}":"{}";try{const e=JSON.parse(o);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),a)}catch(e){const n={};this.lodash_set(n,r,t),s=this.setval(JSON.stringify(n),a)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);default:return this.data&&this.data[e]||null}}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,a)=>{!t&&s&&(s.body=a,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,a)});break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:a,headers:r,body:n,bodyBytes:o}=t;e(null,{status:s,statusCode:a,headers:r,body:n,bodyBytes:o},n,o)},t=>e(t&&t.error||"UndefinedError"))}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,(t,s,a)=>{!t&&s&&(s.body=a,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,a)});break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:a,headers:r,body:n,bodyBytes:o}=t;e(null,{status:s,statusCode:a,headers:r,body:n,bodyBytes:o},n,o)},t=>e(t&&t.error||"UndefinedError"))}}time(t,e=null){const s=e?new Date(e):new Date;let a={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in a)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?a[e]:("00"+a[e]).substr((""+a[e]).length)));return t}queryStr(t){let e="";for(const s in t){let a=t[s];null!=a&&""!==a&&("object"==typeof a&&(a=JSON.stringify(a)),e+=`${s}=${a}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",a="",r){const n=t=>{switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t}}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{let e=t.url||t.openUrl||t["open-url"];return{url:e}}case"Loon":{let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}case"Quantumult X":{let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl,a=t["update-pasteboard"]||t.updatePasteboard;return{"open-url":e,"media-url":s,"update-pasteboard":a}}}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,a,n(r));break;case"Quantumult X":$notify(e,s,a,n(r))}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e=""){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,e,t)}}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;switch(this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t)}}}(t,e)} -------------------------------------------------------------------------------- /Script/Task/TieBa.js: -------------------------------------------------------------------------------- 1 | /* 2 | 贴吧签到脚本 3 | 4 | 更新时间: 2023-04-16 5 | 脚本兼容: QuantumultX, Surge, Loon 6 | 脚本作者: MartinsKing 7 | 软件功能: 自动签到贴吧 8 | 使用声明: ⚠️此脚本仅供学习与交流,请勿贩卖!⚠️ 9 | 脚本参考: Nobyda、chavyleung 10 | 11 | 获取Cookie说明: 12 | 打开百度贴吧App后, 如通知成功获取cookie, 则可以使用此签到脚本. 13 | 获取Cookie后, 请将Cookie脚本禁用并移除主机名,以免产生不必要的MITM. 14 | 脚本将在每天上午9:00执行, 您可以修改执行时间。 15 | 16 | ************************ 17 | QuantumultX 远程脚本配置: 18 | ************************ 19 | 20 | [task_local] 21 | # 贴吧签到 22 | 0 9 * * * https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Script/Task/TieBa.js, tag=贴吧签到, img-url=https://raw.githubusercontent.com/HuiDoY/Icon/main/mini/Color/tieba.png, enabled=true 23 | 24 | [rewrite_local] 25 | # 贴吧获取Cookie 「成功获取Cookie后请去除勾选」 26 | https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Task/Remote_Cookie.conf, tag=MartinsKing签到Cookie, update-interval=172800, opt-parser=false, enabled=true 27 | 28 | ************************ 29 | Surge 远程脚本配置: 30 | ************************ 31 | 32 | [Script] 33 | 贴吧签到 = type=cron,cronexp=0 9 * * *,script-path=https://raw.githubusercontent.com/ClydeTime/Surge/main/Script/Task/TieBa.js,wake-system=1,timeout=15,script-update-interval=0 34 | 35 | # 贴吧获取Cookie 「请在模块中添加,成功获取Cookie后模块应去除勾选」 36 | https://raw.githubusercontent.com/ClydeTime/Surge/main/Task/GetCookie.sgmodule 37 | 38 | ************************ 39 | Loon 远程脚本配置: 40 | ************************ 41 | [Script] 42 | # 贴吧签到 43 | cron "0 9 * * *" script-path=https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Script/Task/TieBa.js, tag=贴吧签到 44 | [Plugin] 45 | # 贴吧获取Cookie 「成功获取Cookie后请禁用插件」 46 | https://raw.githubusercontent.com/ClydeTime/Quantumult/main/Task/GetCookie.plugin, tag=MartinsKing签到Cookie, enabled=true 47 | 48 | */ 49 | 50 | const $ = new Env("tieba"); 51 | const name = "tieba"; 52 | const zh_name = "百度贴吧"; 53 | const config = { 54 | cookie: {} 55 | }; 56 | 57 | config.cookie = $.getdata(name + "_cookie"); 58 | 59 | var useParallel = 0; //0自动切换,1串行,2并行(当贴吧数量大于30个以后,并行可能会导致QX崩溃,所以您可以自动切换) 60 | var singleNotifyCount = 20; //想签到几个汇总到一个通知里,这里就填几个(比如我有13个要签到的,这里填了5,就会分三次消息通知过去) 61 | var process = { 62 | total: 0, 63 | result: [ 64 | // { 65 | // bar:'', 66 | // level:0, 67 | // exp:0, 68 | // errorCode:0, 69 | // errorMsg:'' 70 | // } 71 | ] 72 | }; 73 | var url_fetch_sign = { 74 | url: "https://tieba.baidu.com/mo/q/newmoindex", 75 | headers: { 76 | "Content-Type": "application/octet-stream", 77 | Referer: "https://tieba.baidu.com/index/tbwise/forum", 78 | Cookie: config.cookie, 79 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366" 80 | } 81 | }; 82 | var url_fetch_add = { 83 | url: "https://tieba.baidu.com/sign/add", 84 | method: "POST", 85 | headers: { 86 | "Content-Type": "application/x-www-form-urlencoded", 87 | Cookie: config.cookie, 88 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X; zh-CN) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 UCBrowser/10.7.5.650 Mobile" 89 | }, 90 | body: "" 91 | }; 92 | 93 | !(async () => { 94 | if (typeof $request != "undefined") { 95 | console.log("- 正在获取cookie,请稍后"); 96 | GetCookie(); 97 | } else { 98 | console.log("- 任务正在进行,请耐心等待"); 99 | signTieBa(); 100 | } 101 | })() 102 | 103 | function signTieBa() { 104 | 105 | if (!config.cookie) { 106 | $.msg(zh_name, "签到失败", "未获取到cookie"); 107 | return $.done() 108 | } 109 | return $.http.get(url_fetch_sign).then( 110 | (response) => { 111 | const body = JSON.parse(response.body); 112 | var isSuccessResponse = body && body.no == 0 && body.error == "success" && body.data.tbs; 113 | if (!isSuccessResponse) { 114 | $.msg(zh_name, "签到失败", (body && body.error) ? body.error : "接口数据获取失败"); 115 | return $.done() 116 | } 117 | process.total = body.data.like_forum.length; 118 | if (body.data.like_forum && body.data.like_forum.length > 0) { 119 | if (useParallel == 1 || (useParallel == 0 && body.data.like_forum.length >= 30)) { 120 | signBars(body.data.like_forum, body.data.tbs, 0); 121 | } else { 122 | for (const bar of body.data.like_forum) { 123 | if (!signBar(bar, body.data.tbs)) { 124 | signBar(bar, body.data.tbs); 125 | } 126 | } 127 | } 128 | } else { 129 | $.msg(zh_name, "签到失败", "请确认您有关注的贴吧"); 130 | return $.done() 131 | } 132 | }, (reason) => { 133 | console.log("- 未获取到签到列表"); 134 | console.log(`- headers ${JSON.stringify(response.headers)}`); 135 | return false; 136 | } 137 | ); 138 | } 139 | 140 | function signBar(bar, tbs) { 141 | if (bar.is_sign == 1) { //已签到的,直接不请求接口了 142 | process.result.push({ 143 | bar: `${bar.forum_name}`, 144 | level: bar.user_level, 145 | exp: bar.user_exp, 146 | errorCode: 9999, 147 | errorMsg: "已签到" 148 | }); 149 | checkIsAllProcessed(); 150 | return true; 151 | } else { 152 | url_fetch_add.body = `tbs=${tbs}&kw=${bar.forum_name}&ie=utf-8`; 153 | $.http.post(url_fetch_add).then( 154 | (response) => { 155 | try { 156 | var addResult = JSON.parse(response.body); 157 | if (addResult.no == 0) { 158 | process.result.push({ 159 | bar: bar.forum_name, 160 | errorCode: 0, 161 | errorMsg: `获得${addResult.data.uinfo.cont_sign_num}积分,第${addResult.data.uinfo.user_sign_rank}个签到` 162 | }); 163 | checkIsAllProcessed(); 164 | return true; 165 | } else { 166 | process.result.push({ 167 | bar: bar.forum_name, 168 | errorCode: addResult.no, 169 | errorMsg: addResult.error 170 | }); 171 | checkIsAllProcessed(); 172 | return false; 173 | } 174 | } catch (e) { 175 | $.msg("贴吧签到", "贴吧签到数据处理异常", JSON.stringify(e)); 176 | $.done() 177 | } 178 | },(reason) => { 179 | process.result.push({ 180 | bar: bar.forum_name, 181 | errorCode: 999, 182 | errorMsg: '接口错误' 183 | }); 184 | checkIsAllProcessed(); 185 | return false; 186 | } 187 | ); 188 | } 189 | } 190 | 191 | function signBars(bars, tbs, index) { 192 | //$nobyda.notify("贴吧签到", `进度${index}/${bars.length}`, ""); 193 | if (index >= bars.length) { 194 | //$nobyda.notify("贴吧签到", "签到已满", `${process.result.length}`); 195 | checkIsAllProcessed(); 196 | } else { 197 | var bar = bars[index]; 198 | if (bar.is_sign == 1) { //已签到的,直接不请求接口了 199 | process.result.push({ 200 | bar: `${bar.forum_name}`, 201 | level: bar.user_level, 202 | exp: bar.user_exp, 203 | errorCode: 9999, 204 | errorMsg: "已签到" 205 | }); 206 | signBars(bars, tbs, ++index); 207 | } else { 208 | url_fetch_add.body = `tbs=${tbs}&kw=${bar.forum_name}&ie=utf-8`; 209 | $.http.post(url_fetch_add).then( 210 | (response) => { 211 | try { 212 | var addResult = JSON.parse(response.body); 213 | if (addResult.no == 0) { 214 | process.result.push({ 215 | bar: bar.forum_name, 216 | errorCode: 0, 217 | errorMsg: `获得${addResult.data.uinfo.cont_sign_num}积分,第${addResult.data.uinfo.user_sign_rank}个签到` 218 | }); 219 | } else { 220 | process.result.push({ 221 | bar: bar.forum_name, 222 | errorCode: addResult.no, 223 | errorMsg: addResult.error 224 | }); 225 | signBar(bar, tbs); 226 | } 227 | } catch (e) { 228 | $.msg("贴吧签到", "贴吧签到数据处理异常", JSON.stringify(e)); 229 | $.done() 230 | } 231 | checkIsAllProcessed(); 232 | },(reason) => { 233 | process.result.push({ 234 | bar: bar.forum_name, 235 | errorCode: 999, 236 | errorMsg: '接口错误' 237 | }); 238 | signBar(bar, tbs); 239 | } 240 | ); 241 | signBars(bars, tbs, ++index); 242 | } 243 | } 244 | } 245 | 246 | function checkIsAllProcessed() { 247 | //$nobyda.notify("贴吧签到", `最终进度${process.result.length}/${process.total}`, ""); 248 | if (process.result.length != process.total) return; 249 | for (var i = 0; i < Math.ceil(process.total / singleNotifyCount); i++) {//todo 验证消息为什么不分几次通知 250 | var notify = ""; 251 | var spliceArr = process.result.splice(0, singleNotifyCount); 252 | var notifySuccessCount = 0; 253 | for (const res of spliceArr) { 254 | if (res.errorCode == 0 || res.errorCode == 9999) { 255 | notifySuccessCount++; 256 | } 257 | if (res.errorCode == 9999) { 258 | notify += `【${res.bar}】已经签到,当前等级${res.level},经验${res.exp}` + `\n`; 259 | } else { 260 | notify += `【${res.bar}】${res.errorCode==0?'签到成功':'签到失败'},${res.errorCode==0?res.errorMsg:('原因:'+res.errorMsg)}` + `\n`; 261 | } 262 | } 263 | $.msg("贴吧签到", `签到${spliceArr.length}个,成功${notifySuccessCount}个`, notify); 264 | } 265 | $.done(); 266 | } 267 | 268 | function GetCookie() { 269 | if (typeof $request.headers.cookie != 'undefined') { 270 | config.cookie = $request.headers.cookie; 271 | } else if (typeof $request.headers.Cookie != 'undefined') { 272 | config.cookie = $request.headers.Cookie; 273 | } 274 | if (config.cookie) { 275 | if ($.getdata(name + "_cookie") != 'undefined') { 276 | if ($.getdata(name + "_cookie") != config.cookie) { 277 | if (config.cookie.indexOf("BDUSS") != -1) { 278 | $.setdata(config.cookie, name + "_cookie")? $.msg(zh_name, "cookie catch success", "获得 cookie 成功") : $.msg(zh_name, "cookie catch failed", "获得 cookie 失败") 279 | } 280 | }else{ 281 | $.msg(zh_name, "cookie未过期", "") 282 | } 283 | } else { 284 | if (config.cookie.indexOf("BDUSS") != -1) { 285 | $.setdata(config.cookie, name + "_cookie")? $.msg(zh_name, "首次写入Cookie成功 🎉", "") : $.msg(zh_name, "首次写入Cookie失败‼️", "") 286 | } 287 | } 288 | } 289 | $.done(); 290 | } 291 | 292 | function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}isShadowrocket(){return"undefined"!=typeof $rocket}isStash(){return"undefined"!=typeof $environment&&$environment["stash-version"]}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,n]=i.split("@"),a={url:`http://${n}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),n=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(n);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){if(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)});else if(this.isQuanX())this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t&&t.error||"UndefinedError"));else if(this.isNode()){let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:i,statusCode:r,headers:o,rawBody:n}=t,a=s.decode(n,this.encoding);e(null,{status:i,statusCode:r,headers:o,rawBody:n,body:a},a)},t=>{const{message:i,response:r}=t;e(i,r,r&&s.decode(r.rawBody,this.encoding))})}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)});else if(this.isQuanX())t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t&&t.error||"UndefinedError"));else if(this.isNode()){let i=require("iconv-lite");this.initGotEnv(t);const{url:r,...o}=t;this.got[s](r,o).then(t=>{const{statusCode:s,statusCode:r,headers:o,rawBody:n}=t,a=i.decode(n,this.encoding);e(null,{status:s,statusCode:r,headers:o,rawBody:n,body:a},a)},t=>{const{message:s,response:r}=t;e(s,r,r&&i.decode(r.rawBody,this.encoding))})}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl,i=t["update-pasteboard"]||t.updatePasteboard;return{"open-url":e,"media-url":s,"update-pasteboard":i}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(!this.isMute){if(this.isSurge()||this.isLoon()){$notification.post(e,s,i,o(r))}else if(this.isQuanX()){$notify(e,s,i,o(r))}}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s} 秒`),this.log(),this.isSurge()||this.isQuanX()||this.isLoon()?$done(t):this.isNode()&&process.exit(1)}}(t,e)} 293 | --------------------------------------------------------------------------------