Script/Bahamut/BahamutAnimeAds.js

68 lines
1.8 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)
}
}