// ==UserScript== // @name Better SteamPY // @namespace https://space.bilibili.com/93654843 // @version 20241208 // @description 提供Steampy界面美化,功能增强,如库中已有游戏标记(支持家庭库及愿望单)、标记资料受限游戏等功能 // @author FiNNiER // @match *://steampy.com/* // @icon https://steampy.com/img/logo.63413a4f.png // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @connect gitee.com // @connect api.steampowered.com // @connect store.steampowered.com // @run-at document-body // @downloadURL https://update.greasyfork.icu/scripts/503737/Better%20SteamPY.user.js // @updateURL https://update.greasyfork.icu/scripts/503737/Better%20SteamPY.meta.js // ==/UserScript== var Saves = { wishlist: [], ownedApps: [], familygameList: [], lastupdatetime: 0, }; var limitedApps = []; var noGameList = []; var noDlc = false; var noownedGames = false; var noRestrictedGames = false; (function () { 'use strict'; load(); observePageChanges(); })(); //读取个人库存及愿望单并储存 function getOwnAndWish() { return new Promise((resolve, reject) => { var wishlist = []; var ownedApps = []; GM_xmlhttpRequest({ method: 'GET', url: 'https://store.steampowered.com/dynamicstore/userdata/?t=' + Math.trunc(Date.now() / 1000), responseType: 'json', onload: function (response) { let data = JSON.parse(response.responseText); wishlist = data.rgWishlist; ownedApps = data.rgOwnedApps; let previousSaves = GM_getValue('Saves'); let newSave = { wishlist: wishlist, ownedApps: ownedApps, familygameList: previousSaves.familygameList, lastupdatetime: new Date().getTime(), }; GM_setValue('Saves', newSave); Saves = newSave; iview.Notice.success({ title: `Better Steampy`, desc: `已加载 ${ownedApps.length} 个库存游戏及DLC,${wishlist.length} 个愿望单游戏`, }); resolve(newSave); }, }); }); } //读取家庭库并储存 function getFamilyGame() { return new Promise((resolve, reject) => { var access_token; var family_groupid; var familygameList = []; GM_xmlhttpRequest({ method: 'GET', url: 'https://store.steampowered.com/pointssummary/ajaxgetasyncconfig', responseType: 'json', onload: function (response) { let data = JSON.parse(response.responseText); access_token = data.data.webapi_token; // access_token GM_xmlhttpRequest({ method: 'GET', url: `https://api.steampowered.com/IFamilyGroupsService/GetFamilyGroupForUser/v1/?access_token=${access_token}`, responseType: 'json', onload: function (response) { let data = JSON.parse(response.responseText); family_groupid = data.response.family_groupid; // family_groupid GM_xmlhttpRequest({ method: 'GET', url: `https://api.steampowered.com/IFamilyGroupsService/GetSharedLibraryApps/v1/?access_token=${access_token}&family_groupid=${family_groupid}&include_own=true`, responseType: 'json', onload: function (response) { let data = JSON.parse(response.responseText); data.response.apps.forEach((app) => { if (app.exclude_reason == 0) { familygameList.push(app.appid); } }); let previousSaves = GM_getValue('Saves'); let newSave = { wishlist: previousSaves.wishlist, ownedApps: previousSaves.ownedApps, familygameList: familygameList, lastupdatetime: new Date().getTime(), }; GM_setValue('Saves', newSave); Saves = newSave; iview.Notice.success({ title: `Better Steampy`, desc: `已加载 ${familygameList.length} 个家庭库游戏`, }); resolve(familygameList); }, }); }, }); }, }); }); } //获取受限游戏列表 function getLimitedGamesList() { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: 'https://gitee.com/Finnier/getSteamRestrictedGameLIst/raw/main/data/normalist.json', responseType: 'json', onload: function (response) { var data = JSON.parse(response.responseText); var limitedGames = data; GM_setValue('limitedApps', limitedGames); iview.Notice.success({ title: `Better Steampy`, desc: `已加载 ${limitedGames.length} 个非受限游戏`, }); resolve(limitedGames); }, }); }); } //获取非游戏列表 function getNogameList() { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: 'https://gitee.com/Finnier/getSteamAppListWithType/raw/main/data/Listwithnogame.json', responseType: 'json', onload: function (response) { var data = JSON.parse(response.responseText); var nogamelistdata = Object.keys(data).map(Number); GM_setValue('NoGameList', nogamelistdata); noGameList = nogamelistdata; iview.Notice.success({ title: `Better Steampy`, desc: `已加载 ${nogamelistdata.length} 个DLC及原声带`, }); resolve(nogamelistdata); }, }); }); } //初始化脚本配置菜单 function init() { const settings = document.createElement('div'); settings.innerHTML = `
上次更新于
已加载 {{ownedApps}} 个库存游戏及DLC
已加载 {{wishlist}} 个愿望单游戏
已加载 {{familygameList}} 个家庭库游戏
目前共加载{{limitedApps}}个非受限游戏(跟随拥有状态自动更新)