Steam自动探索队列

Steam节庆活动用脚本,自动探索3次队列。

// ==UserScript==
// @name         Steam自动探索队列
// @namespace    http://keylol.com/t157861-1-1
// @version      1.0
// @description  Steam节庆活动用脚本,自动探索3次队列。
// @author       baodongsun
// @match        https://store.steampowered.com/
// @license MIT
// @grant        SteamCN
// ==/UserScript==

(function _exec() {
    var appids,
        running = true,
        queueNumber,
        progressDialog = ShowAlertDialog('探索中', $J('<div/>').append($J('<div/>', { 'class': 'waiting_dialog_throbber' })).append($J('<div/>', { 'id': 'progressContainer' }).text('获取进度...')), '停止').done(abort);
    function abort() {
        running = false;
        progressDialog.Dismiss();
    }
    function retry() {
        abort();
        ShowConfirmDialog('错误', '是否重试?', '重试', '放弃').done(_exec)
    }
    function clearApp() {
        if (!running)
            return;
        showProgress();
        var appid = appids.shift();
        !appid ? generateQueue() : $J.post(appids.length ? '/app/' + appid : '/explore/next/', { sessionid: g_sessionID, appid_to_clear_from_queue: appid }).done(clearApp).fail(retry);
    }
    function generateQueue() {
        running && $J.post('/explore/generatenewdiscoveryqueue', { sessionid: g_sessionID, queuetype: 0 }).done(beginQueue).fail(retry);
    }
    function beginQueue() {
        if (!running)
            return;
        $J.get('/explore/').done(function (htmlText) {
            var cardInfo = htmlText.match(/<div class="subtext">\D+(\d)\D+<\/div>/);
            if (!cardInfo) {
                abort();
                ShowAlertDialog('完成', '已完成全部3轮探索队列');
                return;
            }
            var matchedAppids = htmlText.match(/0,\s+(\[.*\])/);
            if (!matchedAppids) {
                retry();
                return;
            }
            appids = JSON.parse(matchedAppids[1]);
            queueNumber = cardInfo[1];
            appids.length == 0 ? generateQueue() : clearApp();
            showProgress();
        })
    }
    function showProgress() {
        $J('#progressContainer').html('<br>剩余' + queueNumber + '个待探索队列, 当前队列剩余' + appids.length + '个待探索游戏');
    }
    beginQueue();
}())