// ==UserScript== // @name EPIC白嫖小助手 // @description 每1小时检测一次是否有可以白嫖的epic游戏 // @namespace https://bbs.tampermonkey.net.cn/ // @version 0.1.7 // @author CodFrm // @grant GM_xmlhttpRequest // @grant GM_notification // @grant GM_closeNotification // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @connect store-site-backend-static.ak.epicgames.com // @crontab 0 * * * * // @exportCookie domain=store-site-backend-static.ak.epicgames.com // ==/UserScript== let url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions?locale=zh-Hant&country=CN&allowCountries=CN,HK"; return new Promise((resolve, reject) => { GM_xmlhttpRequest({ url: url, responseType: "json", onload: (resp) => { if (resp.status != 200) { GM_notification("epic白嫖失败,网站检测错误:" + resp.status); resolve(); } else { let games = []; let msg = "" let elements = resp.response.data.Catalog.searchStore.elements; let map = JSON.parse(GM_getValue("epic_notify_1") || "{}"); let newmap = map; // console.log(elements); console.log(map); for (const key in elements) { console.log(elements[key].effectiveDate, map[elements[key].title]); if ((elements[key].effectiveDate == "2099-01-01T00:00:00.000Z" || new Date(elements[key].effectiveDate) < new Date()) && !map[elements[key].title]) { msg += elements[key].title + "; " let img = ""; for (const imgkey in elements[key].keyImages) { if (elements[key].keyImages[imgkey].type == "DieselStoreFrontWide") { img = elements[key].keyImages[imgkey].url; break; } } games.push( { title: elements[key].title, url: "https://www.epicgames.com/store/zh-Hant/p/" + elements[key].productSlug, image: img, }); newmap[elements[key].title] = "ok"; } } if (!games.length) { return resolve(); } console.log(games); GM_notification({ title: "今日白嫖名单", text: msg, // image: games[0].image, buttons: [{ title: "我知道了" }, { title: "马上去白嫖" }], onclick(id, btn) { if (btn !== undefined && btn >= 0) { GM_setValue("epic_notify_1", JSON.stringify(newmap)); } if (btn === 1) { for (let key in games) { GM_openInTab(games[key].url); } } GM_closeNotification(id); resolve(); }, timeout: 10 * 1000, ondone(click, id) { if (!click) { resolve(); } } }); } }, onerror() { GM_notification("epic白嫖失败,网络异常"); resolve(); } }); });