// ==UserScript== // @name AuTo Redeemer Steamkey(自动激活Steamkey) // @namespace HCLonely // @author HCLonely // @description 复制网页中的Steamkey后自动打开激活页面并激活 // @include *://*/* // @version 2.3.1 // @grant GM_setClipboard // @grant GM_addStyle // @run-at document-end // @require https://greasyfork.org/scripts/376437-hclonely-function/code/HCLonely_function.js?version=660229 // @downloadURL none // ==/UserScript== (function() { 'use strict'; try{ var url = window.location.href; //选中激活功能 function selectRedeem(){ var iconSize = 24; var translationTestSize = 16; var icon = document.createElement('div'); var style = '' + 'width:32px;' + 'height:32px;' + 'margin:0px!important;' + ''; icon.innerHTML = '' + '' ''; icon.setAttribute('style', '' + 'width:32px!important;' + 'height:32px!important;' + 'display:none!important;' + 'background:#fff!important;' + 'border-radius:16px!important;' + 'box-shadow:4px 4px 8px #888!important;' + 'position:absolute!important;' + 'z-index:2147483647!important;' + 'cursor:pointer;'+ ''); icon.setAttribute("title","激活"); // 添加激活图标到 DOM document.documentElement.appendChild(icon); // 鼠标事件:防止选中的文本消失 document.addEventListener('mousedown', function (e) { if (e.target == icon || (e.target.parentNode && e.target.parentNode == icon) || (e.target.parentNode.parentNode && e.target.parentNode.parentNode == icon)) {// 点击了激活图标 e.preventDefault(); } }); // 选中变化事件:当点击已经选中的文本的时候,隐藏激活图标和激活面板(此时浏览器动作是:选中的文本已经取消选中了) document.addEventListener("selectionchange", function () { if (!window.getSelection().toString().trim()) { icon.style.display = 'none'; } }); // 鼠标事件:防止选中的文本消失;显示、隐藏激活图标 document.addEventListener('mouseup', function (e) { if (e.target == icon || (e.target.parentNode && e.target.parentNode == icon) || (e.target.parentNode.parentNode && e.target.parentNode.parentNode == icon)) {// 点击了激活图标 e.preventDefault(); return; } var text = window.getSelection().toString().trim(); var productKey = window.getSelection().toString().trim() || e.target.value; if (/^([\w\W]*)?([\d\w]{5}(\-[\d\w]{5}){2}(\r||,||,)?){1,}/.test(productKey) && text && icon.style.display == 'none') { icon.style.top = e.pageY + 12 + 'px'; icon.style.left = e.pageX + 18 + 'px'; icon.style.display = 'block'; } else if (!text) { icon.style.display = 'none'; } }); // 激活图标点击事件 icon.addEventListener('click', function (e) { var productKey = window.getSelection().toString().trim() || e.target.value; productKey=productKey.replace(/\r\n/g,","); productKey=productKey.replace(/\n/g,","); window.open("https://store.steampowered.com/account/registerkey?key=" + productKey, "_blank"); }); } selectRedeem(); //复制激活功能 if (!/https?:\/\/store\.steampowered\.com\/account\/registerkey[\w\W]{0,}/.test(url)){//非激活页面 var activateProduct = function(e) { var productKey = window.getSelection().toString().trim() || e.target.value; if (/^([\w\W]*)?([\d\w]{5}(\-[\d\w]{5}){2}(\r||,||,)?){1,}/.test(productKey)&&(confirm("检测到神秘key,是否进入steam激活页面并激活?"))) { var productKey1=productKey.replace(/\r\n/g,","); var productKey2=productKey1.replace(/\n/g,","); window.open("https://store.steampowered.com/account/registerkey?key=" + productKey2, "_blank"); } }; window.addEventListener("copy", activateProduct, false); } //激活页面自动激活 if (/^https?:\/\/store\.steampowered\.com\/account\/registerkey*/.test(url)){ var autoDivideNum = 9; var waitingSeconds = 20; var ajaxTimeout = 15; var keyCount = 0; var recvCount = 0; var timer; var allUnusedKeys = []; var failureDetail = { 14: '无效激活码', 15: '重复激活', 53: '次数上限', 13: '地区限制', 9: '已拥有', 24: '缺少主游戏', 36: '需要PS3?', 50: '这是充值码', }; var myTexts = { fail: '失败', success: '成功', network: '网络错误或超时', line: '——', nothing: '', others: '其他错误', unknown: '未知错误', redeeming: '激活中', waiting: '等待中', showUnusedKey: '显示未使用的Key', hideUnusedKey: '隐藏未使用的Key', }; var unusedKeyReasons = [ '次数上限', '地区限制', '已拥有', '缺少主游戏', '其他错误', '未知错误', '网络错误或超时', ]; function redeemKey(key) { jQuery.ajax({ url: 'https://store.steampowered.com/account/ajaxregisterkey/', data: { product_key: key, sessionid: g_sessionID }, type: 'post', dataType: 'json', timeout: 1000 * ajaxTimeout, beforeSend: function(){ if (jQuery('table').is(':hidden')) { jQuery('table').fadeIn(); } }, complete: function() { }, error: function() { tableUpdateKey(key, myTexts.fail, myTexts.network, 0, myTexts.nothing); return; }, success: function(data) { if (data.success == 1) { tableUpdateKey(key, myTexts.success, myTexts.line, data.purchase_receipt_info.line_items[0].packageid, 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, myTexts.fail, 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.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)) { var listObject; allUnusedKeys = allUnusedKeys.filter(function(keyItem){ return keyItem != key; }); var listObjects = jQuery('li'); for(var i = 0; i < listObjects.length; i++) { var listElement = listObjects[i]; listObject = jQuery(listElement); if(listElement.innerHTML.includes(key)) { listObject.remove(); } } } else if (!success && !allUnusedKeys.includes(key) && unusedKeyReasons.includes(reason)) { listObject = jQuery('
  • '); listObject.html(key + ' ( ' + reason + (subId != 0 ? (': ' + subId + ' ' + subName) : '') + ' )'); jQuery('#unusedKeys').append(listObject); allUnusedKeys.push(key); } } function tableInsertKey(key) { keyCount++; var row = jQuery(''); // number row.append('' + keyCount + ''); //key row.append('' + key + ''); //redeeming... row.append('' + myTexts.redeeming + '...'); jQuery('tbody').prepend(row); } function tableWaitKey(key) { keyCount++; var row = jQuery(''); // number row.append('' + keyCount + ''); //key row.append('' + key + ''); //waiting... row.append('' + myTexts.waiting + ' (' + waitingSeconds + '秒)...'); jQuery('tbody').prepend(row); } function tableUpdateKey(key, result, detail, subId, subName) { setUnusedKeys(key, result === myTexts.success, 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)) { rowObject.children()[2].remove(); // result if (result == myTexts.fail) rowObject.append('' + result + ''); else rowObject.append('' + result + ''); // detail rowObject.append('' + detail + ''); // sub if (subId === 0) { rowObject.append('——'); } else { rowObject.append('' + subId + ' ' + subName + ''); } 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 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.includes(myTexts.waiting)) { nowKey++; if (nowKey <= autoDivideNum) { var key = rowObject.children()[1].innerHTML.substring(6); key = key.substring(0, key.indexOf('')); rowObject.children()[2].innerHTML = '' + myTexts.redeeming + '...'; redeemKey(key); } else { flag = true; break; } } } if (!flag) { clearInterval(timer); } }, 1000 * waitingSeconds); } function redeem(keys){ if (keys.length <= 0) { return; } jQuery('#buttonRedeem').hide(); jQuery('#inputKey').attr('disabled', 'disabled'); var nowKey = 0; keys.forEach(function (key) { nowKey++; if (nowKey <= autoDivideNum) { tableInsertKey(key); redeemKey(key); } else { tableWaitKey(key); } }); if (nowKey > autoDivideNum) { startTimer(); } } function redeemKeys() { var keys = getKeysByRE(jQuery('#inputKey').val().trim()); redeem(keys); } function toggleUnusedKeyArea() { if (jQuery('#unusedKeyArea').is(':hidden')) { jQuery('#unusedKeyArea').show(); } else { jQuery('#unusedKeyArea').hide(); } } jQuery('#registerkey_examples_text').html( '' + '
    ' + '' + '' + '' + '

    '); jQuery('.registerkey_input_box_text').parent().append('
    '); /^https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=[\w\W]+/.test(url)&&(document.getElementById("inputKey").value=url.replace(/https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=/i,"")); jQuery('.registerkey_input_box_text').hide(); jQuery('#purchase_confirm_ssa').hide(); jQuery('#register_btn').parent().append('激活!' + '   ' + ''); jQuery('#register_btn').remove(); /^https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=[\w\W]+/.test(url)&&(redeem(getKeysByRE(url.replace(/https?:\/\/store\.steampowered\.com\/account\/registerkey\?key\=/i,"").trim()))); jQuery('#buttonRedeem').click(redeemKeys); toggleUnusedKeyArea(); function copyKey(){ var infoHtml=jQuery("#unusedKeys>li"); var stmcnInfo=""; if(infoHtml){ if(infoHtml.length==0){ return "没有未使用的key"; }else{ for (var i=0;i[\d]+?<\/code>/gim)[0]; code=code.replace(/<\/?code>/gim,""); var name=info.match(/<\/code>[\w\W]*?\)/gim)[0]; name=name.replace(/<\/code>|\)/gim,""); name=name.replace(/(^\s*)|(\s*$)/g, ""); stmcnInfo = stmcnInfo + "[url=https://store.steampowered.com/account/registerkey?key=" + key + "]" + key+ "[/url] [url=https://steamdb.info/sub/" + code + "]" + name + "[/url] \n"; }else{ return "没有已拥有的key"; } } } }else{ return "没有未使用的key"; } return stmcnInfo; } css('table a {color: pink;}td {white-space: nowrap;overflow: hidden;}code {padding:2px 4px;font-size:90%;color:#c7254e;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;}'+ '.link-toast{position:absolute;padding:12px 24px;font-size:15px;border-radius:8px;white-space:nowrap;color:#fff;-webkit-animation:h cubic-bezier(.22,.58,.12,.98) .4s;animation:h cubic-bezier(.22,.58,.12,.98) .4s;z-index:10000}'+ '.link-toast.info{background-color:#48bbf8;-webkit-box-shadow:0 .2em .1em .1em rgba(72,187,248,.2);box-shadow:0 .2em .1em .1em rgba(72,187,248,.2)}'+ '.link-toast.success{background-color:#47d279;-webkit-box-shadow:0 .2em .1em .1em rgba(71,210,121,.2);box-shadow:0 .2em .1em .1em rgba(71,210,121,.2)}'); jQuery("body").append(''+ ''); jQuery("#unusedKeyArea>b").after(''); function copySteamKey(){ var unk=copyKey(); if(unk=="没有未使用的key"){ jQuery("#copyInfo").html("没有未使用的key"); jQuery("#copyInfo").show(); setTimeout(function(){ jQuery("#copyInfo").fadeOut(); },2000); }else if(unk=="没有已拥有的key"){ jQuery("#copyInfo").html("没有已拥有的key"); jQuery("#copyInfo").show(); setTimeout(function(){ jQuery("#copyInfo").fadeOut(); },2000); }else{ copy(unk); jQuery("#suc").show(); setTimeout(function(){ jQuery("#suc").fadeOut(); },2000); } } jQuery("#copy").click(function(){ copySteamKey(); }); }else{//点击添加链接 var htmlEl; if(window.document.body){ window.document.body.onclick = function(event){ htmlEl = event.target;//鼠标每经过一个元素,就把该元素赋值给变量htmlEl if(htmlEl.tagName!=='A' && htmlEl.tagName!=='BUTTON' && htmlEl.getAttribute("type")!=='button' && htmlEl.tagName!=='TEXTAREA' && htmlEl.getAttribute("type")!=='text'){ var elCn = htmlEl.childNodes; var elNum = elCn.length; for(var i = 0;i${steamKey}`):ele.innerHTML.replace(steamKey,`${steamKey}`); } } //激活页面内所有key function redeemAllKey(){ var len=0; var keyList=""; var hasKey=[]; function arr(arr) { var result=[]; for(var i=0; i