Greasy Fork is available in English.

Steam Wishlist Checker

Check specified users that add the game to wishlist.

// ==UserScript==
// @name         Steam Wishlist Checker
// @namespace    https://coding.net/u/sffxzzp
// @version      0.05
// @description  Check specified users that add the game to wishlist.
// @author       sffxzzp
// @match        *://steamcommunity.com/*/friendsthatplay/*
// @icon         https://store.steampowered.com/favicon.ico
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @connect      store.steampowered.com
// ==/UserScript==

(function() {
    var util = (function () {
        function util() {}
        util.xhr = function (xhrData) {
            return new Promise(function(resolve, reject) {
                if (!xhrData.xhr) {
                    GM_xmlhttpRequest({
                        method: xhrData.method || "get",
                        url: xhrData.url,
                        responseType: xhrData.type || "",
                        timeout: 3e4,
                        onload: function onload(res) {
                            return resolve({ response: res, body: res.response });
                        },
                        onerror: reject,
                        ontimeout: reject
                    });
                } else {
                    var xhr = new XMLHttpRequest();
                    xhr.open(
                        xhrData.method || "get",
                        xhrData.url,
                        true
                    );
                    if (xhrData.method === "POST") {
                        xhr.setRequestHeader(
                            "content-type",
                            "application/x-www-form-urlencoded; charset=utf-8"
                        );
                    }
                    if (xhrData.cookie) xhr.withCredentials = true;
                    xhr.responseType = xhrData.responseType || "";
                    xhr.timeout = 3e4;
                    xhr.onload = function(ev) {
                        var evt = ev.target;
                        resolve({ response: evt, body: evt.response });
                    };
                    xhr.onerror = reject;
                    xhr.ontimeout = reject;
                    xhr.send(xhrData.data);
                }
            });
        };
        util.wrun = function (data) {
            setTimeout(data.run||null, data.ms);
        };
        util.createElement = function (data) {
            var node;
            if (data.node) {
                node = document.createElement(data.node);
                if (data.content) {
                    this.setElement({node: node, content: data.content});
                }
                if (data.html) {
                    node.innerHTML = data.html;
                }
            }
            return node;
        };
        util.setElement = function (data) {
            if (data.node) {
                for (let name in data.content) {
                    data.node.setAttribute(name, data.content[name]);
                }
                if (data.html!=undefined) {
                    data.node.innerHTML = data.html;
                }
            }
        };
        util.getElement = function (data) {};
        return util;
    })();
    var swc = (function () {
        function swc() {};
        swc.prototype.getUsers = function () {
            var sAccounts = GM_getValue("swcAccounts");
            if (sAccounts) {
                sAccounts = JSON.parse(sAccounts);
            }
            else {
                sAccounts = [];
            }
            return sAccounts;
        };
        swc.prototype.get32id = function (steam64id) {
            var tmp = [], root = ["76561","197960","265728"];
            tmp[0] = steam64id.substr(0,5);
            tmp[1] = steam64id.substr(5,6);
            tmp[2] = steam64id.substr(11,6);
            return (tmp[0]-root[0])*1000000000000+(tmp[1]-root[1])*1000000+(tmp[2]-root[2]);
        };
        swc.prototype.getAppid = function () {
            return parseInt(/friendsthatplay\/(\d*)/ig.exec(location.href)[1]);
        };
        swc.prototype.inArray = function (array, item) {
            if (array.indexOf(item)>-1) {
                return true;
            }
            else {
                return false;
            }
        };
        swc.prototype.getXmlNode = function (xml, nodeName) {
            return xml.getElementsByTagName(nodeName)[0].textContent;
        };
        swc.prototype.addToPage = function (user) {
            var _this = this;
            util.xhr({
                url: "https://steamcommunity.com/profiles/"+user+"?xml=1",
                type: "xml"
            }).then(function (result) {
                let parser = new DOMParser();
                let xmlDoc = parser.parseFromString(result.body, "text/xml");
                let avatarMedium = _this.getXmlNode(xmlDoc, "avatarMedium");
                let steamID = _this.getXmlNode(xmlDoc, "steamID");
                let onlineState = _this.getXmlNode(xmlDoc, "onlineState");
                let userblock = util.createElement({node: "div", content: {class: "friendBlock persona "+onlineState, "data-miniprofile": _this.get32id(user)}, html: '<a class="friendBlockLinkOverlay" href="https://steamcommunity.com/profiles/'+user+'"></a><div class="playerAvatar '+onlineState+'"><img src="'+avatarMedium+'"></div><div class="friendBlockContent">'+steamID+'<br><span class="friendSmallText"><br><a class="whiteLink friendBlockInnerLink" href="https://steamcommunity.com/profiles/'+user+'/wishlist">查看愿望单</a></span></div>'});
                document.getElementById("swcbody").appendChild(userblock);
            });
        };
        swc.prototype.addView = function () {
            var mList = document.getElementById("memberList");
            let header = document.getElementsByClassName("mainSectionHeader");
            header = header[header.length-1].cloneNode(true);
            header.innerHTML += ' ** ';
            let settings = util.createElement({node: "a", content: {href: "javascript:void(0);"}, html:"设置"});
            settings.onclick = function () {
                var sAccounts = GM_getValue("swcAccounts");
                if (sAccounts) {
                    sAccounts = JSON.parse(sAccounts).join(',');
                }
                else {
                    sAccounts = "";
                }
                console.log(sAccounts);
                var input = prompt("请输入要检查的Steam 64位ID\n按英文逗号分割", sAccounts);
                if (input) {
                    var accounts = input.split(',');
                    GM_setValue("swcAccounts", JSON.stringify(accounts));
                }
            }
            header.appendChild(settings);
            let clear = util.createElement({node: "a", content: {style: "padding-left: 20px;", href: "javascript:void(0);"}, html: "清空"});
            clear.onclick = function () {
                if (confirm("确定要清空么?")) {
                    GM_deleteValue("swcAccounts");
                    alert("清空完毕!");
                }
            };
            header.appendChild(clear);
            mList.appendChild(header);
            let body = util.createElement({node: "div", content: {id: "swcbody", class: "profile_friends responsive_friendblocks"}});
            mList.appendChild(body);
        };
        swc.prototype.run = function () {
            var _this = this;
            _this.addView();
            let users = _this.getUsers();
            let appid = _this.getAppid();
            for (let i=0;i<users.length;i++) {
                util.xhr({
                    url: "https://store.steampowered.com/wishlist/profiles/"+users[i]
                }).then(function (result) {
                    let userWishlist = result;
                    let wishlistData = /g_rgWishlistData = (.*?);/ig.exec(result.body)[1];
                    wishlistData = JSON.parse(wishlistData);
                    for (let j=0;j<wishlistData.length;j++) {
                        if (wishlistData[j].appid == appid) {
                            _this.addToPage(users[i]);
                            break;
                        }
                    }
                });
            }
        };
        return swc;
    })();
    var program = new swc();
    program.run();
})();