// ==UserScript== // @name EPIC白嫖小助手 // @description 每1小时检测一次是否有可以白嫖的epic游戏 // @namespace https://bbs.tampermonkey.net.cn/ // @version 0.1.2 // @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 * * * * // @supportURL https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=644 // @homepage https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=644 // ==/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, 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 = {}; for (const key in elements) { 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(); } GM_notification({ title: "今日白嫖名单", text: msg, image: games[0].image, buttons: [{ title: "我知道了" }, { title: "马上去白嫖" }], onclick(id, btn) { if (btn !== undefined) { 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() { // 系统关闭时不保存通知记录,下次重新通知 resolve(); } }); } }, onerror() { GM_notification("epic白嫖失败,网络异常"); resolve(); } }); });