/************************ 动画疯,屏蔽播放广告脚本 (黑屏25秒自动播放) 由于动画疯强制验证观看广告时间,无法实现真正意义上的跳过广告。 ************************/ 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); } }