IndieGala_GetKey&Gift

IndieGala Bundle tool kits

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         IndieGala_GetKey&Gift
// @namespace    http://tampermonkey.net/
// @version      1.12
// @description  IndieGala Bundle tool kits
// @icon         https://www.indiegala.com/favicon.ico
// @author       lenceliu,TalesYuan
// @match        https://www.indiegala.com/profile*
// @match        https://www.indiegala.com/gift*
// @match        https://www.indiegala.com/game?game_id=*
// ==/UserScript==
$ = unsafeWindow.jQuery;
var ShowGetSteamLink = true;
var reg_replace=/,\s*|\|\s*/g;
unsafeWindow.getbundle = function (section) {
    var result = '';
    var gametitle = '';
    var gamekey = '';
    var gamegiftlink = '';
	var giftpsw = '';
    var giftboughtdate = '';
    var giftarray = [];
    var steamurl = '';
    var bundletitle = '';
    var bundleid = '';
    var count = 0;

    //clearbox();
    if (location.href.indexOf('profile') > - 1)
    {
        var bundleroot = document.getElementById('collapseBundles');
        if (bundleroot.getAttribute('aria-expanded') == 'true')
        {
            //获得Bundle所有分类
            bundleslist = document.getElementById('accordion2').children;
            for (var i = 0; i < bundleslist.length; i++)
            {
                //获得Bundle分类名称
                var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
                //获得当前分类
                bundletype = document.getElementById(collapse);
                //判断当前分类是否展开
                if (bundletype.getAttribute('aria-expanded') == 'true')
                {
                    //获得当前分类下的所有bundle
                    bundles = bundletype.getElementsByClassName('panel-heading');
                    for (var j = 0; j < bundles.length; j++)
                    {
                        //判断当前bundle是否展开
                        if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                        {
                            if (collapse == 'collapseGiveaway')
                            {
                                bundletitle = 'Giveaways';
                            }
                            else
                            {
                                bundletitle = bundles[j].getElementsByTagName('a') [0].innerText;
                            }
                            bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                            bundle = document.getElementById(bundleid);
                            if (section == 'key')
                            {
                                var allkeys = bundle.getElementsByClassName('game-key-string');
                                for (var m = 0; m < allkeys.length; m++)
                                {
                                    gametitle = allkeys[m].getElementsByClassName('game-steam-url') [0].innerText.replace(reg_replace,'_');
                                    steamurl = allkeys[m].getElementsByClassName('game-steam-url') [0].href;
                                    /*散key有三种状态
                        1. 未获得key也未生成礼物     class="info_key_text"
                        2. 已获得key                 class="input-block-level margin text_align_center keys" .value
                        3. 已生成礼物但未被claim     class="keyfield give-gift-link" .getElementsByTagName('a').href
                        4. 礼物已被claim             class="span-key steam-btn" .innerText
                        */
                                    var class_giftlink = 'keyfield give-gift-link';
                                    var class_giftlink1 = 'keyfield .give-gift-link';
                                    var class_key = 'input-block-level margin text_align_center keys';
                                    var keysection = allkeys[m].getElementsByClassName('span-key steam-btn') [0];
                                    var key = allkeys[m].getElementsByClassName(class_key) [0];
                                    var gift = allkeys[m].getElementsByClassName(class_giftlink) [0];
                                    var gift1 = allkeys[m].getElementsByClassName(class_giftlink1) [0];
                                    if (keysection.children.length === 0)
                                    {
                                        gamekey = keysection.innerText;
                                    }
                                    else if (key !== undefined && key.value !== '')
                                    {
                                        gamekey = key.value;
                                    }
                                    else if (gift !== undefined)
                                    {
                                        gamekey = gift.children[0].href;
                                    }
                                    else if (gift1 !== undefined)
                                    {
                                        gamekey = gift1.children[0].href;
                                    }
                                    else
                                    {
                                        gamekey = '激活码或礼物链接尚未生成';
                                    }
                                    //判断是否要导出游戏名称

                                    if (name_switcher.checked)
                                    {
                                        result = result + gametitle + ', ' + gamekey + '\n';
                                    }
                                    else
                                    {
                                        result = result + gamekey + '\n';
                                    }
                                    count++;
                                }
                            }
                            else if (section == 'gift')
                            {
                                var allgifts = bundle.getElementsByClassName('gift-links-box');
								{
                                    for (var m = 0; m < allgifts.length; m++)
                                    {
                                        gametitle = allgifts[m].getElementsByClassName('title_gift_in') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
                                        gamegiftlink = allgifts[m].getElementsByClassName('title_gift_in') [0].getElementsByTagName('a') [0].href;
										if (allgifts[m].getElementsByClassName('gift-psw')[0] !== undefined)
										{
									        giftpsw = allgifts[m].getElementsByClassName('gift-psw')[0].innerText;
										}
                                        else
                                        {
                                            giftpsw = 'No PASSWORD';
                                        }
                                        giftarray[m] = {
                                            _bundletitle:bundletitle.trim(),
                                            _gametitle: gametitle,
                                            _gamegiftlink: gamegiftlink,
										    _giftpsw: giftpsw,
                                            //_giftboughtdate: getDate(giftboughtdate)
                                        };
                                        count++;
                                    }
                                    if (name_switcher.checked)
                                    {
                                        for (var n = 0; n < giftarray.length; n++)
                                        {
                                            result = result + giftarray[n]._bundletitle + ', ' + giftarray[n]._gamegiftlink + ', ' + '密码:' + giftarray[n]._giftpsw + '\n';
                                        }
                                    }
                                    else
                                    {
                                        for (var n = 0; n < giftarray.length; n++)
                                        {
                                            result = result + giftarray[n]._gamegiftlink + ', ' + '密码:' + giftarray[n]._giftpsw + '\n';
                                        }
                                    }
                                }
							}
                            // break;
                        }
                        else
                        {
                        }
                    }
                }
                else
                {
                }
            }
        }
    }
    else if (location.href.indexOf('gift') > - 1)
    {
        bundletitle = document.getElementById('indie_gala_2').children[0].children[0].innerText.substring(2);
        bundle = document.getElementById('steam-key');
        var allkeys = bundle.getElementsByClassName('game-key-string');
        for (var m = 0; m < allkeys.length; m++)
        {
            gametitle = allkeys[m].getElementsByClassName('game-steam-url') [0].innerText.replace(reg_replace,'_');
            steamurl = allkeys[m].getElementsByClassName('game-steam-url') [0].href;
            /*散key有三种状态
                        1. 未获得key也未生成礼物     class="info_key_text"
                        2. 已获得key                 class="input-block-level margin text_align_center keys" .value
                        3. 已生成礼物但未被claim     class="keyfield give-gift-link" .getElementsByTagName('a').href
                        4. 礼物已被claim             class="span-key steam-btn" .innerText
                        */
            var class_giftlink = 'keyfield give-gift-link';
            var class_giftlink1 = 'keyfield .give-gift-link';
            var class_key = 'input-block-level margin text_align_center keys';
            var keysection = allkeys[m].getElementsByClassName('span-key steam-btn') [0];
            var key = allkeys[m].getElementsByClassName(class_key) [0];
            var gift = allkeys[m].getElementsByClassName(class_giftlink) [0];
            var gift1 = allkeys[m].getElementsByClassName(class_giftlink1) [0];
            if (keysection.children.length === 0)
            {
                gamekey = keysection.innerText;
            }
            else if (key !== undefined && key.value !== '')
            {
                gamekey = key.value;
            }
            else if (gift !== undefined)
            {
                gamekey = gift.children[0].href;
            }
            else if (gift1 !== undefined)
            {
                gamekey = gift1.children[0].href;
            }
            else
            {
                gamekey = '激活码或礼物链接尚未生成';
            }
            //判断是否要导出游戏名称

            if (name_switcher.checked)
            {
                result = result + gametitle + ', ' + gamekey + '\n';
                //  result = result + bundletitle + ', ' + gamekey + '\n';
            }
            else
            {
                result = result + gamekey + '\n';
            }
            count++;
        }
    }
    if (bundletitle === '')
        shownote();
    giftmessage.value = result;
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = '<P><Strong>' + '提取数量: ' + count + '</Strong> </P>';
};
unsafeWindow.getDate = function (strDate) {
    var st = strDate;
    var a = st.split(' ');
    var b = a[0].split('/');
    var c = a[1].split(':');
    var date = new Date(b[2], b[0], b[1], c[0], c[1], c[2]);
    return date;
};
unsafeWindow.sortByField = function (x, y) {
    return x._giftboughtdate - y._giftboughtdate;
};
unsafeWindow.clearbox = function clearbox()
{
    giftmessage.value = '';
    bundletitle = '';
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = '<P><Strong>' + '提取数量: ' + '0' + '</Strong> </P>';
    $('#giftmessage').show();
};
unsafeWindow.getlink = function () {
    var result = '';
    // var allElements = [];
    var bundletitle = '';
    var bundleid = '';
    var gametitle = '';
    var gamelink = '';
    var count = 0;
    var bundleroot = document.getElementById('collapseBundles');

    if (location.href.indexOf('gift_id') > - 1)
    {
        bundletitle = document.getElementById('indie_gala_2').children[0].children[0].innerText.substring(2);
        bundle = document.getElementById('steam-key');
        var allkeys = bundle.getElementsByClassName('game-key-string');
        for (var n = 0; n < allkeys.length; n++)
        {
            gametitle = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
            gamelink = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].href;
            result = result + '<P>' + (n + 1) + ', ' + '<a target="_blank" class="game-steam-url" href="' + gamelink + '">' + gametitle + '</a>' + ', ' + gamelink + '</P>';
            count++;
        }
    }

    else if (bundleroot.getAttribute('aria-expanded') == 'true')
    {
        bundleslist = document.getElementById('accordion2').children;
        for (var i = 0; i < bundleslist.length; i++)
        {
            //获得Bundle分类名称
            var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
            //获得当前分类
            bundletype = document.getElementById(collapse);
            //判断当前分类是否展开
            if (bundletype.getAttribute('aria-expanded') == 'true')
            {
                //获得当前分类下的所有bundle
                bundles = bundletype.getElementsByClassName('panel-heading');
                for (var j = 0; j < bundles.length; j++)
                {
                    //判断当前bundle是否展开
                    if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                    {
                        bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                        bundle = document.getElementById(bundleid);
                        var allkeys = bundle.getElementsByClassName('game-key-string');
                        for (var n = 0; n < allkeys.length; n++)
                        {
                            if (collapse == 'collapseGiveaway')
                            {
                                bundletitle = 'Giveaways';
                                index = j;
                            }
                            else
                            {
                                bundletitle = bundles[j].getElementsByTagName('a') [0].innerText;
                                index = n;
                            }
                            gametitle = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].innerText.replace(reg_replace,'_');
                            gamelink = allkeys[n].getElementsByClassName('span-title') [0].getElementsByTagName('a') [0].href;
                            result = result + '<P>' + (index + 1) + ', ' + '<a target="_blank" class="game-steam-url" href="' + gamelink + '">' + gametitle + '</a>' + ', ' + gamelink + '</P>';
                            count++;
                        }
                    }
                }
            }
            else
            {
            }
        }
    }
    if (bundletitle === '')
        shownote();
    bundletitlebox.innerHTML = '<P><Strong>' + 'Indiegala - ' + bundletitle + '</Strong> </P>';
    statusbox.innerHTML = result;
    $('#statusbox').append('<P><Strong>' + '提取数量: ' + count + '</Strong> </P>');
};

var flg0=1;
var interval=0;
var waiting;
unsafeWindow.autoConfirm = function () {
    btn=document.getElementById('autoConfirm');
    btn.innerText="CDKEY获取中...";
    waiting = setInterval(function () { gekey(); }, 100);
};

var num = 0;
unsafeWindow.gekey = function() {

    //  var result = '';
    //  var allElements = [];
    //  var bundletitle = '';
    //  var bundleid = '';
    //   var gametitle = '';
    //   var gamelink = '';
    //   var count = 0;
    var bundleroot = document.getElementById('collapseBundles');

    if (location.href.indexOf('gift_id') > - 1)
    {
        if(flg0)
        {
            flg0=0;
            items=document.getElementsByClassName('span-key steam-btn');
            item = items[num].children;
            try
            {
                button=item[5];
                button.click();
            }
            catch(e)
            {
                flg0=1;
                //alert(e);
            }
            num += 1;
            if (num >= items.length) {
                clearInterval(waiting) ;
                num=0;
                btn=document.getElementById('autoConfirm');
                btn.innerText="自动获取CDKEY";}
        }
    }
    else if (bundleroot.getAttribute('aria-expanded') == 'true')
    {
        var bundle_expanded=false;
        bundleslist = document.getElementById('accordion2').children;
        for (var i = 0; i < bundleslist.length; i++)
        {
            //获得Bundle分类名称
            var collapse = bundleslist[i].children[0].getElementsByTagName('a') [0].hash.substring(1);
            //获得当前分类
            bundletype = document.getElementById(collapse);
            //判断当前分类是否展开
            if (bundletype.getAttribute('aria-expanded') == 'true')
            {
                //获得当前分类下的所有bundle
                bundles = bundletype.getElementsByClassName('panel-heading');
                for (var j = 0; j < bundles.length; j++)
                {
                    //判断当前bundle是否展开
                    if (bundles[j].getElementsByTagName('a') [0].getAttribute('aria-expanded') == 'true')
                    {
                        bundle_expanded=true;
                        bundleid = bundles[j].getElementsByTagName('a') [0].hash.substring(1);
                        bundle = document.getElementById(bundleid);

                        if(flg0)
                        {
                            flg0=0;
                            items = bundle.getElementsByClassName('span-key steam-btn');
                            item = items[num].children;
                            try
                            {
                                button=item[5];
                                button.click();
                            }
                            catch(e)
                            {
                                flg0=1;
                                //alert(e);
                            }
                            num += 1;
                            if (num >= items.length)
                            {
                                clearInterval(waiting);
                                num=0;
                                btn=document.getElementById('autoConfirm');
                                btn.innerText="自动获取CDKEY";
                            }
                        }
                    }
                }
            }
            else
            {
            }
        }

        if (!bundle_expanded)
        {
            clearInterval(waiting) ;
            num=0;
            btn=document.getElementById('autoConfirm');
            btn.innerText="自动获取CDKEY";
            shownote();
        }
    }

};

unsafeWindow.fn_fetchserial = function (code, steam_url, target) {


    //function fn_fetchserial(code, steam_url, target){

    if (globalAjaxSemaphore == true) { return; }
    //if (!confirm("Are you sure you want to discover the serial? You won't be able to create a permalink of it or trade it!")) { return; }

    var gameId = get_game_id_from_steam_url(steam_url);

    $.ajax({
        type: "GET",
        url: '/myserials/syncget',
        dataType: "json",
        data: {
            code: 			code,
            cache: 			false,
            productId: 		gameId,
        },
        beforeSend: function (jqXHR, settings){;
                                               $("#permbutton_"+code).hide();
                                               $("#fetchlink_"+code).hide();
                                               $("#info_key_"+code).hide();
                                               $("#fetching_"+code).fadeIn();
                                               start_steam_req(code);
                                              },
        success: function(data,textStatus){
            end_steam_req(code);
            // alert(data.serial_number);
            $(target).parent().prev().find('.btn-convert-to-trade').remove();
            $("#serial_n_"+code).val(data.serial_number);
            $("#fetching_"+code).hide();
            $("#info_key_"+code).hide();
            $("#serial_"+code).fadeIn();
            //alert('success');
            flg0=1;
        },
        error: function (xhr, ajaxOptions, thrownError){
            alert(data);
            end_steam_req(code);
            num -= 1;
            flg0=1;
        },
    });

    //}
};

unsafeWindow.shownote = function () {
    if (!$('#note').is(':visible')) {
        $('#note').css({
            display: 'block',
            top: '-100px'
        }).animate({
            top: '+200'
        }, 500, function () {
            setTimeout(out, 3000);
        });
    }
};

unsafeWindow.out = function () {
    $('#note').animate({
        top: '0'
    }, 500, function () {
        $(this).css({
            display: 'none',
            top: '-100px'
        });
    });
};
$('#header-title').after('<div id="mainbox" class="account-settings" style="margin-top: 10px; mini-height:220px;margin-bottom: 0px;text-align:left;"></div>');
$('#mainbox').append('<div id="buttonbox" style="margin-top: 10px; margin-bottom: 10px;align:left;"></div>');
$('#mainbox').append('<div id="bundletitlebox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#mainbox').append('<div id="keybox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#mainbox').append('<div id="statusbox" style="margin-top: 10px; margin-bottom: 0px;"></div>');
$('#buttonbox').append('<button onclick="getbundle(\'key\')" class="order-button-profile">复制CDKEY</button> ');
if (location.href.indexOf('profile') > - 1)
{
    $('#buttonbox').append('<button onclick="getbundle(\'gift\')" class="order-button-profile">复制礼物链接</button>');
}
if (ShowGetSteamLink)
{
    $('#buttonbox').append('<button onclick="getlink()" class="order-button-profile">复制Steam链接</button>');
}
$('#buttonbox').append('<button id="autoConfirm" onclick="autoConfirm()" class="order-button-profile">自动提取CDKEY</button>');
$('#buttonbox').append('<button onclick="clearbox()" class="order-button-profile">重置</button>');
$('#buttonbox').append('</br><label style="margin-top: 10px;margin-right: 10px;"><input id="name_switcher" type="checkbox" name="checkbox" checked>包含游戏名称</label>');
if (location.href.indexOf('profile') > - 1)
{
    $('#buttonbox').append('<label style="margin-top: 10px;margin-right: 10px;"><input id="date_switcher" style="" type="checkbox" name="checkbox" unchecked>礼物链接按购买时间排序</label>');
}
$('#keybox').append('<textarea rows="15" cols="80" name="message" id="giftmessage" style="height:200px;width:100%;");></textarea>');
var internalStyleSheet = document.createElement('style');
internalStyleSheet.setAttribute('type', 'text/css');
internalStyleSheet.textContent = '\n' +
    '#note{position:absolute;width:200px;padding:20px;background:#2E2E2E;border:1px solid #ccc;left:45%;z-index:9999;display:none;} ' + '\n' +
    '\n';
document.getElementsByTagName('head') [0].appendChild(internalStyleSheet);
var note = document.createElement('div');
note.setAttribute('id', 'note');
note.setAttribute('style', 'color:#999999');
note.innerHTML = '请展开要提取的慈善包';
document.getElementsByTagName('body') [0].appendChild(note);
clearbox();