Greasy Fork is available in English.

IndieGala_GetKey&Gift

IndieGala Bundle tool kits

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey, Greasemonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey to install this script.

คุณจะต้องติดตั้งส่วนขยาย เช่น Tampermonkey หรือ Violentmonkey เพื่อติดตั้งสคริปต์นี้

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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();