ig redeem

激活ig key

  1. // ==UserScript==
  2. // @name ig redeem
  3. // @namespace steam
  4. // @author 伟大鱼塘
  5. // @description 激活ig key
  6. // @include https://www.indiegala.com/
  7. // @match https://www.indiegala.com/game?*
  8. // @match https://www.indiegala.com/gift?*
  9. // @version 0.3.0
  10. // @require https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
  11. // @grant GM_xmlhttpRequest
  12. // @grant GM_addStyle
  13. // ==/UserScript==
  14.  
  15. (function($) {
  16.  
  17. let flag = false;
  18.  
  19. function circle() {
  20. timer = setTimeout(function() {
  21. var l = $('.game-keys-title').length;
  22. if (l > 0) {
  23. clearTimeout(timer);
  24. init();
  25. } else {
  26. circle();
  27. }
  28. }, 500);
  29. }
  30.  
  31. $('#gift-validation-btn').click(() => {
  32. circle();
  33. });
  34.  
  35. function init() {
  36. //添加样式
  37. {
  38. const modalstyle = '.redeem-moadal {visibility:hidden;opacity:0;transition: all .4s ease-out 0s;position:fixed;width:300px;height:210px;left:50%;top:50%;transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%);background:#fff;z-index:5000;border-radius:15px;text-align:center;} .redeem-moadal p {line-height:1.8;color:#666;letter-spacing:0.5px;} .redeem-moadal p i{font-style:normal;color:#ccc;} #closemodal {visibility;hidden;opacity:0;border: 1px solid rgba(0, 0, 0, 0.3);padding:5px;width:100%;}';
  39. const bgstyle = '.blackbg {visibility:hidden;opacity:0;transition: all .4s ease-out 0s;position:fixed;left:0;top:0;height:100%;width:100%;background:rgba(0,0,0,.5);z-index:4000;} .redeem-moadal.open,.blackbg.open,#closemodal.open {visibility:visible;opacity:1;}';
  40. const gameStyle = '.game-key-string {height:115px;transition: all .4s ease-out 0s;} .act {background-color:rgba(89, 204, 103,.2) !important;} .failed {background-color:rgba(229, 68, 90,.4) !important;} button {transition: all .4s ease-out 0s;} .redeemsteamkey:hover,.getsessionid:hover {color:#fff !important;background-color:rgba(0, 0, 0, 0.3) !important;} #redeemselectedsteamkey:hover {background:rgba(155, 89, 182,1) !important;} #redeemallsteamkey:hover {background:rgba(88, 94, 100,1) !important;}';
  41. GM_addStyle(modalstyle + bgstyle + gameStyle);
  42. }
  43.  
  44. //添加状态框
  45. {
  46. const modal = '<div class="redeem-moadal"><div style="padding-top:30px;"><p>激活总数:<i id="ra">0</i></p><p>激活成功数:<i id="rs" style="color:#80CF35;">0</i></p><p>激活失败数:<i id="rf" style="color:#DD4141;">0</i></p><p class="rdone"><p></div><div style="padding:15px"><button id="closemodal" type="button">关闭窗口</button></div></div>';
  47. const bg = '<div class="blackbg"></div>';
  48. $('body').append(modal, bg);
  49.  
  50. $('#closemodal').on('click', function() {
  51. $('.redeem-moadal,.blackbg').removeClass('open');
  52. $(this).removeClass('open');
  53. });
  54. }
  55.  
  56. //添加相关dom组件
  57. {
  58. $.each($('.game-key-string'), (i, e) => {
  59. const btn = '<button class="redeemsteamkey input-block-level margin text_align_center keys" style="margin-top:20px;">激活</button>';
  60. $(e).find('.span-key>div:last-child').append(btn);
  61. });
  62. const mulbtn = '<button id="redeemselectedsteamkey" style="display:block;color:#fff;background:rgba(155, 89, 182,0.7);text-align:center;padding:10px;width:60%;margin:auto;border-radius:10px;">激活选中游戏</button>';
  63. const allbtn = '<button id="redeemallsteamkey" style="display:block;color:#fff;background:rgba(88, 94, 100,0.7);text-align:center;padding:10px;width:60%;margin:auto;margin-top:20px;border-radius:10px;">激活全部游戏</button>';
  64.  
  65. const sessioninput = '<div id="sessioninput" style="height: 115px;margin:0 25px;"><div class="span-title"><h4 class="title_game"><a target="_blank" class="game-steam-url"> <b>你的Session ID</b></a></h4></div><div class="span-key steam-btn"><div class="option"><input id="g_sessionID" class="input-block-level margin text_align_center keys" type="text" value="" style="margin:0 ;"></div><button class="getsessionid input-block-level margin text_align_center keys" style="margin-top:20px;">获取sessionid</button></div></div>';
  66. $('#steam-key-games').after(sessioninput);
  67. $('#sessioninput').after(mulbtn, allbtn);
  68.  
  69. $('.game-key-string').on('click', function() {
  70. let that = $(this);
  71. $(this).removeClass('failed');
  72. if (!that.hasClass('act')) {
  73. that.addClass('act');
  74. } else {
  75. that.removeClass('act');
  76. }
  77. });
  78. }
  79.  
  80.  
  81. //获取session id
  82. let sessionid = null;
  83. $('#g_sessionID').on('input', function() {
  84. sessionid = $(this).val();
  85. });
  86. $('.getsessionid').off().on('click', function() {
  87. getSessionID();
  88. });
  89. getSessionID();
  90.  
  91. //单激活
  92. $('.redeemsteamkey').on('click', function() {
  93. let that = $(this);
  94. redeem('s', that);
  95. });
  96.  
  97. //批量激活
  98. $('#redeemselectedsteamkey').on('click', function() {
  99. redeem('m', null, $('.act'));
  100. });
  101. //全部
  102. $('#redeemallsteamkey').on('click', function() {
  103. redeem('m', null, $('.game-key-string'));
  104. });
  105.  
  106.  
  107. //激活
  108. function redeem(type, that, selector) {
  109. let mark = {
  110. ifsuccess: 0, //异步成功标识
  111. successful: 0, //成功数
  112. failed: 0 //失败数
  113. };
  114. //type参数为判断是否是批量激活,m为多激活,s为单激活
  115. if (type == "m") {
  116. let keys = [];
  117. let position = [];
  118. let i = 1; //循环定时器以及position数组,从1开始,第0次直接执行不通过loop函数
  119. let all = selector.length;
  120. $.each(selector, (i, e) => {
  121. let key = $(e).find('input.input-block-level').val();
  122. let posi = $(e).index();
  123. position.push(posi);
  124. keys.push(key);
  125. });
  126. if (!sessionid) {
  127. alert('请输入你的Session ID!');
  128. } else if (keys.length) {
  129. $('.rdone').html('');
  130. $('#rs,#rf').html(0);
  131. $('.redeem-moadal,.blackbg').addClass('open');
  132. $('#ra').html(all);
  133. redeemResquest(keys[0], sessionid, mark, all, position[0]);
  134. loopRequest(keys, sessionid, mark, all, position, i);
  135. } else {
  136. alert('请先选择要激活的游戏!');
  137. }
  138. } else {
  139. let key = that.parent().find('input.input-block-level').val();
  140. let posi = that.parents('.game-key-string').index();
  141. if (!sessionid) {
  142. return alert('请输入你的Session ID!');
  143. }
  144. redeemResquest(key, sessionid, mark, 1, posi).then((mark) => {
  145. if (mark.successful)
  146. alert('激活成功!');
  147. else
  148. alert('激活失败!');
  149. }).catch((error) => {
  150. alert(`出错了!错误原因:${error}`);
  151. });
  152. }
  153. }
  154.  
  155. //多激活延迟
  156. function loopRequest(keys, sessionid, mark, all, p, i) {
  157. setTimeout(function() {
  158. if (i > (keys.length - 1)) {
  159. return;
  160. }
  161. redeemResquest(keys[i], sessionid, mark, all, p[i]);
  162. i++;
  163. loopRequest(keys, sessionid, mark, all, p, i);
  164. }, 10000);
  165. }
  166.  
  167. //激活请求 all参数用来保存请求总数 p参数用来确定哪一个div.game-key-string激活失败并加failed类
  168. function redeemResquest(key, sessionid, mark, all, p) {
  169. return new Promise((resolve, reject) => {
  170. GM_xmlhttpRequest({
  171. method: 'GET',
  172. url: `https://store.steampowered.com/account/ajaxregisterkey/?product_key=${key}&sessionid=${sessionid}`,
  173. onload: response => {
  174. result = JSON.parse(response.responseText);
  175. if (result.success == 1) {
  176. mark.successful += 1;
  177. $('#rs').html(mark.successful);
  178. } else {
  179. mark.failed += 1;
  180. $('#rf').html(mark.failed);
  181. if (p || p === 0) {
  182. $('.game-key-string').eq(p).addClass('failed');
  183. }
  184. }
  185. mark.ifsuccess += 1;
  186. if (mark.ifsuccess == all) {
  187. $('#closemodal').addClass('open');
  188. $('.rdone').html('激活完成!');
  189. }
  190. resolve(mark);
  191. },
  192. onerror: () => {
  193. reject(error);
  194. }
  195. });
  196. });
  197. }
  198.  
  199. //获取session ID
  200. function getSessionID() {
  201. $('#g_sessionID').val('');
  202. $('.getsessionid').html('正在获取...');
  203. GM_xmlhttpRequest({
  204. method: 'GET',
  205. url: 'https://store.steampowered.com',
  206. onload: response => {
  207. let res = response.responseText;
  208. let ifss = res.includes('g_sessionID');
  209. if (ifss) {
  210. let start = res.indexOf('g_sessionID') + 15;
  211. let end = start + 24;
  212. let ssid = res.substring(start, end);
  213. sessionid = ssid;
  214. $('#g_sessionID').val(ssid);
  215. $('.getsessionid').html('获取成功!');
  216. $('.getsessionid').hover(function() {
  217. $(this).html('重新获取');
  218. });
  219. }
  220. },
  221. onerror: () => {
  222. alert('获取出错!');
  223. $('.getsessionid').html('重新获取');
  224. }
  225. });
  226. }
  227. }
  228.  
  229. })(jQuery);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址