Rules-For-Quantumult-X/Scripts/AdBlock/Other/BahamutAnimeAds.js

84 lines
1.9 KiB
JavaScript

/************************
动画疯,屏蔽播放广告脚本 (黑屏25秒自动播放)
由于动画疯强制验证观看广告时间,无法实现真正意义上的跳过广告。
Surge(4.11+)模块:
https://raw.githubusercontent.com/NobyDa/Script/master/Surge/Module/BahamutAnimeAds.sgmodule
QX(1.0.27+)用户请自行搭配KOP-XIAO资源解析器重写引用Surge模块。
************************/
let [req, rsp] = [$request, JSON.parse($response.body || "{}")];
runs()
.catch((err) => {
console.log(`[BahamutAnime] ERROR: ${err.message || err}`);
})
.finally(() =>
$done({
body: JSON.stringify(rsp),
})
);
async function runs() {
if (req.url.includes("token.php")) {
if (rsp.ad) {
rsp.ad.minor = [];
rsp.ad.major = [];
}
if (rsp.data && rsp.data.ad) {
rsp.data.ad.minor = [];
rsp.data.ad.major = [];
}
}
if (req.url.includes("m3u8.php") && (rsp.message || rsp.error)) {
await adURL("");
await new Promise((r) => setTimeout(r, 25000));
await adURL("end");
rsp = await playURL();
}
}
function adURL(str) {
return new Promise((res) => {
get(
{
url: `https://api.gamer.com.tw/mobile_app/anime/v1/stat_ad.php?ad=${str}&schedule=0&sn=${
req.url.split(/sn=(\d+)/i)[1]
}`,
headers: req.headers,
},
(err, resp, data) => res()
);
});
}
function playURL() {
return new Promise((res) => {
get(
{
url: req.url,
headers: req.headers,
},
(err, resp, data) => res(JSON.parse(data || "{}"))
);
});
}
function get(options, callback) {
if (typeof $task != "undefined") {
$task.fetch(options).then(
(response) => {
response["status"] = response.statusCode;
callback(null, response, response.body);
},
(reason) => callback(reason.error, null, null)
);
}
if (typeof $httpClient != "undefined") {
$httpClient.get(options, callback);
}
}