Skip to content

Instantly share code, notes, and snippets.

@applelfq
Forked from makazeu/SteamRedeemKeys.js
Created November 14, 2018 07:06
Show Gist options
  • Save applelfq/38a43f484278135bd9d5f7493bfe394d to your computer and use it in GitHub Desktop.
Save applelfq/38a43f484278135bd9d5f7493bfe394d to your computer and use it in GitHub Desktop.

Revisions

  1. @makazeu makazeu revised this gist Sep 2, 2017. 1 changed file with 96 additions and 10 deletions.
    106 changes: 96 additions & 10 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,11 +1,12 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.4.2
    // @version 1.5.0
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    // @grant GM_addStyle
    // @run-at document-end
    // ==/UserScript==

    (function() {
    @@ -19,6 +20,8 @@
    var recvCount = 0;
    var timer;

    var allUnusedKeys = [];

    var failureDetail = {
    14: '无效激活码',
    15: '重复激活',
    @@ -28,7 +31,7 @@
    24: '缺少主游戏',
    36: '需要PS3?',
    50: '这是充值码',
    };
    };

    var myTexts = {
    fail: '失败',
    @@ -40,7 +43,19 @@
    unknown: '未知错误',
    redeeming: '激活中',
    waiting: '等待中',
    };
    showUnusedKey: '显示未使用的Key',
    hideUnusedKey: '隐藏未使用的Key',
    };

    var unusedKeyReasons = [
    '次数上限',
    '地区限制',
    '已拥有',
    '缺少主游戏',
    '其他错误',
    '未知错误',
    '网络错误或超时',
    ];

    function redeemKey(key) {
    jQuery.ajax({
    @@ -75,20 +90,47 @@
    if (!data.purchase_receipt_info.line_items[0]) {
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others,
    0, myTexts.nothing);
    0, myTexts.nothing);
    } else {
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others,
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description);
    }
    }
    return;
    }
    tableUpdateKey(key, myTexts.fail, myTexts.nothing, 0, myTexts.nothing);
    }
    });
    }

    function setUnusedKeys(key, success, reason, subId, subName) {
    if (success && allUnusedKeys.includes(key)) {
    allUnusedKeys = allUnusedKeys.filter(function(keyItem){
    return keyItem != key;
    });

    var listObjects = jQuery('li');
    for(var i = 0; i < listObjects.length; i++) {
    var listElement = listObjects[i];
    var listObject = jQuery(listElement);

    if(listElement.innerHTML.includes(key)) {
    listObject.remove();
    }
    }
    } else if (!success && !allUnusedKeys.includes(key) &&
    unusedKeyReasons.includes(reason)) {
    var listObject = jQuery('<li></li>');
    listObject.html(key + ' ( ' + reason +
    (subId != 0 ? (': <code>' + subId + '</code> ' + subName) : '') +
    ' )');
    jQuery('#unusedKeys').append(listObject);

    allUnusedKeys.push(key);
    }
    }

    function tableInsertKey(key) {
    keyCount++;
    var row = jQuery('<tr></tr>');
    @@ -117,6 +159,7 @@
    }

    function tableUpdateKey(key, result, detail, subId, subName) {
    setUnusedKeys(key, result === myTexts.success, detail, subId, subName);

    recvCount++;
    if (recvCount == keyCount) {
    @@ -129,8 +172,8 @@
    var rowElement = rowObjects[i];
    var rowObject = jQuery(rowElement);

    if (rowObject.children()[1].innerHTML.indexOf(key) !== -1 &&
    rowObject.children()[2].innerHTML.indexOf(myTexts.redeeming) !== -1) {
    if (rowObject.children()[1].innerHTML.includes(key)&&
    rowObject.children()[2].innerHTML.includes(myTexts.redeeming)) {
    rowObject.children()[2].remove();

    // result
    @@ -172,7 +215,7 @@
    for (var i = rowObjects.length - 1; i >= 1; i--) {
    var rowElement = rowObjects[i];
    var rowObject = jQuery(rowElement);
    if (rowObject.children()[2].innerHTML.indexOf(myTexts.waiting) !== -1) {
    if (rowObject.children()[2].innerHTML.includes(myTexts.waiting)) {
    nowKey++;
    if (nowKey <= autoDivideNum) {
    var key = rowObject.children()[1].innerHTML.substring(6);
    @@ -216,7 +259,21 @@
    }
    }

    function toggleUnusedKeyArea() {
    if (jQuery('#unusedKeyArea').is(':hidden')) {
    jQuery('#unusedKeyArea').fadeIn();
    } else {
    jQuery('#unusedKeyArea').fadeOut();
    }
    }

    jQuery('#registerkey_examples_text').html(
    '<div class="notice_box_content" id="unusedKeyArea" style="display: none">' +
    '<b>未使用的Key:</b><br>'+
    '<div><ol id="unusedKeys">' +
    '</ol></div>' +
    '</div>' +

    '<div class="table-responsive table-condensed">' +
    '<table class="table table-hover" style="display: none">' +
    '<caption><h2>激活记录</h2></caption><thead><th>No.</th><th>Key</th>' +
    @@ -234,11 +291,21 @@
    //jQuery('#register_btn').removeAttr('href').attr('href', 'javascript:redeemKeys()');
    //jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">激活!</button>');
    jQuery('#register_btn').parent().append('<a tabindex="300" class="btnv6_blue_hoverfade btn_medium"' +
    ' id="buttonRedeem"><span>激活!</span></a>');
    ' id="buttonRedeem"><span>激活!</span></a>' + ' &nbsp;&nbsp;' +
    '<a tabindex="300" class="btnv6_blue_hoverfade btn_medium"' +
    ' id="buttonShowUnused"><span>' + myTexts.showUnusedKey + '</span></a>');
    jQuery('#register_btn').remove();
    jQuery('#buttonRedeem').click(function() {
    redeemKeys();
    });
    jQuery('#buttonShowUnused').click(function() {
    toggleUnusedKeyArea();
    if (this.innerHTML.includes(myTexts.showUnusedKey)) {
    this.innerHTML = this.innerHTML.replace(myTexts.showUnusedKey, myTexts.hideUnusedKey);
    } else {
    this.innerHTML = this.innerHTML.replace(myTexts.hideUnusedKey, myTexts.showUnusedKey);
    }
    });

    var style = `
    table a {
    @@ -255,6 +322,25 @@
    background-color:#f9f2f4;
    border-radius:3px
    }
    .notice_box_content {
    border: 1px solid #a25024;
    border-radius: 3px;
    width: 525px;
    color: #acb2b8;
    font-size: 14px;
    font-family: "Motiva Sans", Sans-serif;
    font-weight: normal;
    padding: 15px 15px;
    margin-bottom: 15px;
    }
    .notice_box_content b {
    font-weight: normal;
    color: #f47b20;
    }
    li {
    white-space: nowrap;
    overflow: hidden;
    }
    `;
    GM_addStyle(style);
    GM_addStyle(style);
    })();
  2. @makazeu makazeu revised this gist Aug 31, 2017. 1 changed file with 6 additions and 5 deletions.
    11 changes: 6 additions & 5 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://steamcn.com/t303915-1-1
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.4.2
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    @@ -74,17 +74,17 @@
    } else if (data.purchase_result_details !== undefined && data.purchase_receipt_info) {
    if (!data.purchase_receipt_info.line_items[0]) {
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.unknown,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others,
    0, myTexts.nothing);
    } else {
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.unknown,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.others,
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description);
    }
    return;
    }
    tableUpdateKey(key, myTexts.fail, myTexts.others, 0, myTexts.nothing);
    tableUpdateKey(key, myTexts.fail, myTexts.nothing, 0, myTexts.nothing);
    }
    });
    }
    @@ -110,7 +110,8 @@
    //key
    row.append('<td class="nobr"><code>' + key + '</code></td>');
    //waiting...
    row.append('<td colspan="3">' + myTexts.waiting + '...</td>');
    row.append('<td colspan="3">' + myTexts.waiting +
    ' (' + waitingSeconds + '秒)...</td>');

    jQuery('tbody').prepend(row);
    }
  3. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 5 additions and 4 deletions.
    9 changes: 5 additions & 4 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.4.1
    // @namespace https://steamcn.com/t303915-1-1
    // @version 1.4.2
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    @@ -13,6 +13,7 @@

    var autoDivideNum = 9;
    var waitingSeconds = 20;
    var ajaxTimeout = 15;

    var keyCount = 0;
    var recvCount = 0;
    @@ -50,7 +51,7 @@
    },
    type: 'post',
    dataType: 'json',
    timeout: 150000,
    timeout: 1000 * ajaxTimeout,
    beforeSend: function(){
    if (jQuery('table').is(':hidden')) {
    jQuery('table').fadeIn();
    @@ -95,7 +96,7 @@
    row.append('<td class="nobr">' + keyCount + '</td>');
    //key
    row.append('<td class="nobr"><code>' + key + '</code></td>');
    //waiting...
    //redeeming...
    row.append('<td colspan="3">' + myTexts.redeeming + '...</td>');

    jQuery('tbody').prepend(row);
  4. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.4
    // @version 1.4.1
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    @@ -223,8 +223,8 @@


    jQuery('.registerkey_input_box_text').parent().append('<textarea class="form-control" rows="3"' +
    ' id="inputKey" placeholder="支持批量激活,可以把整个网页文字复制过来' +
    '一次激活的数量不要超过9个,若超过则会自动分批激活(等待20秒)"' +
    ' id="inputKey" placeholder="支持批量激活,可以把整个网页文字复制过来&#10;' +
    '若一次激活的Key的数量超过9个则会自动分批激活(等待20秒)"' +
    ' style="margin: 3px 0px 0px; width: 525px; height: 102px;"></textarea><br>');
    jQuery('.registerkey_input_box_text').fadeOut();
    jQuery('#purchase_confirm_ssa').fadeOut();
  5. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 72 additions and 9 deletions.
    81 changes: 72 additions & 9 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.3
    // @version 1.4
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    @@ -11,7 +11,12 @@
    (function() {
    'use strict';

    var autoDivideNum = 9;
    var waitingSeconds = 20;

    var keyCount = 0;
    var recvCount = 0;
    var timer;

    var failureDetail = {
    14: '无效激活码',
    @@ -33,6 +38,7 @@
    others: '其他错误',
    unknown: '未知错误',
    redeeming: '激活中',
    waiting: '等待中',
    };

    function redeemKey(key) {
    @@ -49,18 +55,15 @@
    if (jQuery('table').is(':hidden')) {
    jQuery('table').fadeIn();
    }
    tableInsertKey(key);
    },
    complete: function() {
    jQuery('#buttonRedeem').fadeIn();
    jQuery('#inputKey').removeAttr('disabled');
    },
    error: function() {
    tableUpdateKey(key, myTexts.fail, myTexts.network, 0, myTexts.nothing);
    return;
    },
    success: function(data) {
    console.log(data);
    //console.log(data);

    if (data.success == 1) {
    tableUpdateKey(key, myTexts.success, myTexts.line,
    @@ -84,6 +87,7 @@
    }
    });
    }

    function tableInsertKey(key) {
    keyCount++;
    var row = jQuery('<tr></tr>');
    @@ -97,14 +101,34 @@
    jQuery('tbody').prepend(row);
    }

    function tableWaitKey(key) {
    keyCount++;
    var row = jQuery('<tr></tr>');
    // number
    row.append('<td class="nobr">' + keyCount + '</td>');
    //key
    row.append('<td class="nobr"><code>' + key + '</code></td>');
    //waiting...
    row.append('<td colspan="3">' + myTexts.waiting + '...</td>');

    jQuery('tbody').prepend(row);
    }

    function tableUpdateKey(key, result, detail, subId, subName) {

    recvCount++;
    if (recvCount == keyCount) {
    jQuery('#buttonRedeem').fadeIn();
    jQuery('#inputKey').removeAttr('disabled');
    }

    var rowObjects = jQuery('tr');
    for (var i = 1; i < rowObjects.length; i++) {
    var rowElement = rowObjects[i];
    var rowObject = jQuery(rowElement);

    if (rowObject.children()[1].innerHTML.includes(key) &&
    rowObject.children()[2].innerHTML.includes(myTexts.redeeming)) {
    if (rowObject.children()[1].innerHTML.indexOf(key) !== -1 &&
    rowObject.children()[2].innerHTML.indexOf(myTexts.redeeming) !== -1) {
    rowObject.children()[2].remove();

    // result
    @@ -137,6 +161,34 @@
    return keys;
    }

    function startTimer() {
    timer = setInterval(function() {
    var flag = false;
    var nowKey = 0;

    var rowObjects = jQuery('tr');
    for (var i = rowObjects.length - 1; i >= 1; i--) {
    var rowElement = rowObjects[i];
    var rowObject = jQuery(rowElement);
    if (rowObject.children()[2].innerHTML.indexOf(myTexts.waiting) !== -1) {
    nowKey++;
    if (nowKey <= autoDivideNum) {
    var key = rowObject.children()[1].innerHTML.substring(6);
    key = key.substring(0, key.indexOf('</code>'));
    rowObject.children()[2].innerHTML = '<td colspan="3">' + myTexts.redeeming + '...</td>';
    redeemKey(key);
    } else {
    flag = true;
    break;
    }
    }
    }
    if (!flag) {
    clearInterval(timer);
    }
    }, 1000 * waitingSeconds);
    }

    function redeemKeys() {
    var keys = getKeysByRE(jQuery('#inputKey').val().trim());
    if (keys.length <= 0) {
    @@ -146,9 +198,20 @@
    jQuery('#buttonRedeem').fadeOut();
    jQuery('#inputKey').attr('disabled', 'disabled');

    var nowKey = 0;
    keys.forEach(function (key) {
    redeemKey(key);
    nowKey++;
    if (nowKey <= autoDivideNum) {
    tableInsertKey(key);
    redeemKey(key);
    } else {
    tableWaitKey(key);
    }
    });

    if (nowKey > autoDivideNum) {
    startTimer();
    }
    }

    jQuery('#registerkey_examples_text').html(
    @@ -161,7 +224,7 @@

    jQuery('.registerkey_input_box_text').parent().append('<textarea class="form-control" rows="3"' +
    ' id="inputKey" placeholder="支持批量激活,可以把整个网页文字复制过来' +
    '一次激活的数量不要超过9个,若超过则请多次激活并每次间隔半分钟"' +
    '一次激活的数量不要超过9个,若超过则会自动分批激活(等待20秒)"' +
    ' style="margin: 3px 0px 0px; width: 525px; height: 102px;"></textarea><br>');
    jQuery('.registerkey_input_box_text').fadeOut();
    jQuery('#purchase_confirm_ssa').fadeOut();
  6. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 28 additions and 17 deletions.
    45 changes: 28 additions & 17 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.2
    // @version 1.3
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    @@ -20,8 +20,19 @@
    13: '地区限制',
    9: '已拥有',
    24: '缺少主游戏',
    36: '需要PS3',
    50: '这是钱包码',
    36: '需要PS3?',
    50: '这是充值码',
    };

    var myTexts = {
    fail: '失败',
    success: '成功',
    network: '网络错误或超时',
    line: '——',
    nothing: '',
    others: '其他错误',
    unknown: '未知错误',
    redeeming: '激活中',
    };

    function redeemKey(key) {
    @@ -45,31 +56,31 @@
    jQuery('#inputKey').removeAttr('disabled');
    },
    error: function() {
    tableUpdateKey(key, '失败', '网络错误或超时', 0, '-');
    tableUpdateKey(key, myTexts.fail, myTexts.network, 0, myTexts.nothing);
    return;
    },
    success: function(data) {
    console.log(data);

    if (data.success == 1) {
    tableUpdateKey(key, '成功', '——',
    tableUpdateKey(key, myTexts.success, myTexts.line,
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description.substring(0, 47));
    data.purchase_receipt_info.line_items[0].line_item_description);
    return;
    } else if (data.purchase_result_details !== undefined && data.purchase_receipt_info) {
    if (!data.purchase_receipt_info.line_items[0]) {
    tableUpdateKey(key, '失败',
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : '未知错误',
    0, '');
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.unknown,
    0, myTexts.nothing);
    } else {
    tableUpdateKey(key, '失败',
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : '未知错误',
    tableUpdateKey(key, myTexts.fail,
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : myTexts.unknown,
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description.substring(0, 47));
    data.purchase_receipt_info.line_items[0].line_item_description);
    }
    return;
    }
    tableUpdateKey(key, '成功', '其他错误', 0, '-');
    tableUpdateKey(key, myTexts.fail, myTexts.others, 0, myTexts.nothing);
    }
    });
    }
    @@ -81,7 +92,7 @@
    //key
    row.append('<td class="nobr"><code>' + key + '</code></td>');
    //waiting...
    row.append('<td colspan="3">\u6FC0\u6D3B\u4E2D\uFF0C\u8BF7\u7A0D\u5019...</td>');
    row.append('<td colspan="3">' + myTexts.redeeming + '...</td>');

    jQuery('tbody').prepend(row);
    }
    @@ -93,11 +104,11 @@
    var rowObject = jQuery(rowElement);

    if (rowObject.children()[1].innerHTML.includes(key) &&
    rowObject.children()[2].innerHTML.includes('激活中')) {
    rowObject.children()[2].innerHTML.includes(myTexts.redeeming)) {
    rowObject.children()[2].remove();

    // result
    if (result == '失败') rowObject.append('<td class="nobr" style="color:red">' + result + '</td>');
    if (result == myTexts.fail) rowObject.append('<td class="nobr" style="color:red">' + result + '</td>');
    else rowObject.append('<td class="nobr" style="color:green">' + result + '</td>');
    // detail
    rowObject.append('<td class="nobr">' + detail + '</td>');
    @@ -106,7 +117,7 @@
    rowObject.append('<td>——</td>');
    } else {
    rowObject.append('<td><code>' + subId + '</code> <a href="https://steamdb.info/sub/' +
    subId + '/" target="_blank">' + subName + '</a></td>');
    subId + '/" target="_blank">' + subName + '</a></td>');
    }
    break;
    }
  7. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 8 additions and 6 deletions.
    14 changes: 8 additions & 6 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.0
    // @version 1.2
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    @@ -41,7 +41,7 @@
    tableInsertKey(key);
    },
    complete: function() {
    jQuery('#register_btn').fadeIn();
    jQuery('#buttonRedeem').fadeIn();
    jQuery('#inputKey').removeAttr('disabled');
    },
    error: function() {
    @@ -132,7 +132,7 @@
    return;
    }

    jQuery('#register_btn').fadeOut();
    jQuery('#buttonRedeem').fadeOut();
    jQuery('#inputKey').attr('disabled', 'disabled');

    keys.forEach(function (key) {
    @@ -143,7 +143,7 @@
    jQuery('#registerkey_examples_text').html(
    '<div class="table-responsive table-condensed">' +
    '<table class="table table-hover" style="display: none">' +
    '<caption>激活记录</caption><thead><th>No.</th><th>Key</th>' +
    '<caption><h2>激活记录</h2></caption><thead><th>No.</th><th>Key</th>' +
    '<th>结果</th><th>详情</th><th>Sub</th></thead><tbody></tbody>' +
    '</table></div><br>');

    @@ -156,15 +156,17 @@
    jQuery('#purchase_confirm_ssa').fadeOut();

    //jQuery('#register_btn').removeAttr('href').attr('href', 'javascript:redeemKeys()');
    jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">激活!</button>');
    //jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">激活!</button>');
    jQuery('#register_btn').parent().append('<a tabindex="300" class="btnv6_blue_hoverfade btn_medium"' +
    ' id="buttonRedeem"><span>激活!</span></a>');
    jQuery('#register_btn').remove();
    jQuery('#buttonRedeem').click(function() {
    redeemKeys();
    });

    var style = `
    table a {
    color: lightslategrey;
    color: pink;
    }
    td {
    white-space: nowrap;
  8. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -44,6 +44,10 @@
    jQuery('#register_btn').fadeIn();
    jQuery('#inputKey').removeAttr('disabled');
    },
    error: function() {
    tableUpdateKey(key, '失败', '网络错误或超时', 0, '-');
    return;
    },
    success: function(data) {
    console.log(data);

    @@ -65,6 +69,7 @@
    }
    return;
    }
    tableUpdateKey(key, '成功', '其他错误', 0, '-');
    }
    });
    }
  9. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 25 additions and 6 deletions.
    31 changes: 25 additions & 6 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -1,11 +1,11 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace http://tampermonkey.net/
    // @version 0.1
    // @description try to take over the world!
    // @namespace https://gist.github.com/zyfworks/ccb12bd87f09cf49d0a3465d167bece9
    // @version 1.0
    // @description Steam网页激活 —— 批量激活
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    // @grant none
    // @grant GM_addStyle
    // ==/UserScript==

    (function() {
    @@ -146,13 +146,32 @@
    jQuery('.registerkey_input_box_text').parent().append('<textarea class="form-control" rows="3"' +
    ' id="inputKey" placeholder="支持批量激活,可以把整个网页文字复制过来' +
    '一次激活的数量不要超过9个,若超过则请多次激活并每次间隔半分钟"' +
    ' style="margin: 3px 0px 0px; width: 524px; height: 102px;"></textarea><br>');
    ' style="margin: 3px 0px 0px; width: 525px; height: 102px;"></textarea><br>');
    jQuery('.registerkey_input_box_text').fadeOut();
    jQuery('#purchase_confirm_ssa').fadeOut();

    //jQuery('#register_btn').removeAttr('href').attr('href', 'javascript:redeemKeys()');
    jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">Redeem</button>');
    jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">激活!</button>');
    jQuery('#register_btn').remove();
    jQuery('#buttonRedeem').click(function() {
    redeemKeys();
    });

    var style = `
    table a {
    color: lightslategrey;
    }
    td {
    white-space: nowrap;
    overflow: hidden;
    }
    code {
    padding:2px 4px;
    font-size:90%;
    color:#c7254e;
    background-color:#f9f2f4;
    border-radius:3px
    }
    `;
    GM_addStyle(style);
    })();
  10. @makazeu makazeu revised this gist Aug 30, 2017. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -144,7 +144,7 @@


    jQuery('.registerkey_input_box_text').parent().append('<textarea class="form-control" rows="3"' +
    ' id="inputKey" placeholder="可留空稍后再输入;支持批量激活,可以把整个网页文字复制过来' +
    ' id="inputKey" placeholder="支持批量激活,可以把整个网页文字复制过来' +
    '一次激活的数量不要超过9个,若超过则请多次激活并每次间隔半分钟"' +
    ' style="margin: 3px 0px 0px; width: 524px; height: 102px;"></textarea><br>');
    jQuery('.registerkey_input_box_text').fadeOut();
  11. @makazeu makazeu created this gist Aug 30, 2017.
    158 changes: 158 additions & 0 deletions SteamRedeemKeys.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,158 @@
    // ==UserScript==
    // @name SteamRedeemKeys
    // @namespace http://tampermonkey.net/
    // @version 0.1
    // @description try to take over the world!
    // @author Makazeu
    // @match https://store.steampowered.com/account/registerkey
    // @grant none
    // ==/UserScript==

    (function() {
    'use strict';

    var keyCount = 0;

    var failureDetail = {
    14: '无效激活码',
    15: '重复激活',
    53: '次数上限',
    13: '地区限制',
    9: '已拥有',
    24: '缺少主游戏',
    36: '需要PS3',
    50: '这是钱包码',
    };

    function redeemKey(key) {
    jQuery.ajax({
    url: 'https://store.steampowered.com/account/ajaxregisterkey/',
    data: {
    product_key: key,
    sessionid: g_sessionID
    },
    type: 'post',
    dataType: 'json',
    timeout: 150000,
    beforeSend: function(){
    if (jQuery('table').is(':hidden')) {
    jQuery('table').fadeIn();
    }
    tableInsertKey(key);
    },
    complete: function() {
    jQuery('#register_btn').fadeIn();
    jQuery('#inputKey').removeAttr('disabled');
    },
    success: function(data) {
    console.log(data);

    if (data.success == 1) {
    tableUpdateKey(key, '成功', '——',
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description.substring(0, 47));
    return;
    } else if (data.purchase_result_details !== undefined && data.purchase_receipt_info) {
    if (!data.purchase_receipt_info.line_items[0]) {
    tableUpdateKey(key, '失败',
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : '未知错误',
    0, '');
    } else {
    tableUpdateKey(key, '失败',
    failureDetail[data.purchase_result_details] ? failureDetail[data.purchase_result_details] : '未知错误',
    data.purchase_receipt_info.line_items[0].packageid,
    data.purchase_receipt_info.line_items[0].line_item_description.substring(0, 47));
    }
    return;
    }
    }
    });
    }
    function tableInsertKey(key) {
    keyCount++;
    var row = jQuery('<tr></tr>');
    // number
    row.append('<td class="nobr">' + keyCount + '</td>');
    //key
    row.append('<td class="nobr"><code>' + key + '</code></td>');
    //waiting...
    row.append('<td colspan="3">\u6FC0\u6D3B\u4E2D\uFF0C\u8BF7\u7A0D\u5019...</td>');

    jQuery('tbody').prepend(row);
    }

    function tableUpdateKey(key, result, detail, subId, subName) {
    var rowObjects = jQuery('tr');
    for (var i = 1; i < rowObjects.length; i++) {
    var rowElement = rowObjects[i];
    var rowObject = jQuery(rowElement);

    if (rowObject.children()[1].innerHTML.includes(key) &&
    rowObject.children()[2].innerHTML.includes('激活中')) {
    rowObject.children()[2].remove();

    // result
    if (result == '失败') rowObject.append('<td class="nobr" style="color:red">' + result + '</td>');
    else rowObject.append('<td class="nobr" style="color:green">' + result + '</td>');
    // detail
    rowObject.append('<td class="nobr">' + detail + '</td>');
    // sub
    if (subId === 0) {
    rowObject.append('<td>——</td>');
    } else {
    rowObject.append('<td><code>' + subId + '</code> <a href="https://steamdb.info/sub/' +
    subId + '/" target="_blank">' + subName + '</a></td>');
    }
    break;
    }
    }
    }

    function getKeysByRE(text) {
    text = text.trim().toUpperCase();
    var reg = new RegExp('([0-9,A-Z]{5}-){2,4}[0-9,A-Z]{5}', 'g');
    var keys = [];

    var result = void 0;
    while (result = reg.exec(text)) {
    keys.push(result[0]);
    }

    return keys;
    }

    function redeemKeys() {
    var keys = getKeysByRE(jQuery('#inputKey').val().trim());
    if (keys.length <= 0) {
    return;
    }

    jQuery('#register_btn').fadeOut();
    jQuery('#inputKey').attr('disabled', 'disabled');

    keys.forEach(function (key) {
    redeemKey(key);
    });
    }

    jQuery('#registerkey_examples_text').html(
    '<div class="table-responsive table-condensed">' +
    '<table class="table table-hover" style="display: none">' +
    '<caption>激活记录:</caption><thead><th>No.</th><th>Key</th>' +
    '<th>结果</th><th>详情</th><th>Sub</th></thead><tbody></tbody>' +
    '</table></div><br>');


    jQuery('.registerkey_input_box_text').parent().append('<textarea class="form-control" rows="3"' +
    ' id="inputKey" placeholder="可留空稍后再输入;支持批量激活,可以把整个网页文字复制过来' +
    '一次激活的数量不要超过9个,若超过则请多次激活并每次间隔半分钟"' +
    ' style="margin: 3px 0px 0px; width: 524px; height: 102px;"></textarea><br>');
    jQuery('.registerkey_input_box_text').fadeOut();

    //jQuery('#register_btn').removeAttr('href').attr('href', 'javascript:redeemKeys()');
    jQuery('#register_btn').parent().append('<button class="btnv6_blue_hoverfade btn_medium" id="buttonRedeem">Redeem</button>');
    jQuery('#register_btn').remove();
    jQuery('#buttonRedeem').click(function() {
    redeemKeys();
    });
    })();