ig redeem

激活ig key

当前为 2017-09-02 提交的版本,查看 最新版本

  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.2.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. //添加样式
  18. {
  19. let 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%;}';
  20. let 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;}';
  21. let 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;}';
  22. GM_addStyle(modalstyle + bgstyle + gameStyle);
  23. }
  24.  
  25. //添加状态框
  26. {
  27. let 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>';
  28. let bg = '<div class="blackbg"></div>';
  29. $('body').append(modal, bg);
  30.  
  31. $('#closemodal').on('click', function() {
  32. $('.redeem-moadal,.blackbg').removeClass('open');
  33. $(this).removeClass('open');
  34. });
  35. }
  36.  
  37. //添加相关dom组件
  38. {
  39. $.each($('.game-key-string'), (i, e) => {
  40. let btn = '<button class="redeemsteamkey input-block-level margin text_align_center keys" style="margin-top:20px;">激活</button>';
  41. $(e).find('.span-key>div:last-child').append(btn);
  42. });
  43. let 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>';
  44. let 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>';
  45.  
  46. let 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>';
  47. $('#steam-key-games').after(sessioninput);
  48. $('#sessioninput').after(mulbtn, allbtn);
  49.  
  50. $('.game-key-string').on('click', function() {
  51. let that = $(this);
  52. $(this).removeClass('failed');
  53. if (!that.hasClass('act')) {
  54. that.addClass('act');
  55. } else {
  56. that.removeClass('act');
  57. }
  58. });
  59. }
  60.  
  61.  
  62. //获取session id
  63. let sessionid = null;
  64. $('#g_sessionID').on('input', function() {
  65. sessionid = $(this).val();
  66. });
  67. $('.getsessionid').off().on('click', function() {
  68. $('#g_sessionID').val('');
  69. let that = $(this);
  70. that.html('正在获取...');
  71. GM_xmlhttpRequest({
  72. method: 'GET',
  73. url: 'https://store.steampowered.com',
  74. onload: response => {
  75. let res = response.responseText;
  76. let ifss = res.includes('g_sessionID');
  77. if (ifss) {
  78. let start = res.indexOf('g_sessionID') + 15;
  79. let end = start + 24;
  80. let ssid = res.substring(start, end);
  81. console.log(ssid)
  82. sessionid = ssid;
  83. $('#g_sessionID').val(ssid);
  84. that.html('获取成功!');
  85. $('.getsessionid').hover(function() {
  86. $(this).html('重新获取');
  87. });
  88. }
  89. },
  90. onerror: () => {
  91. alert('获取出错!');
  92. $('.getsessionid').html('重新获取');
  93. }
  94. });
  95. });
  96.  
  97. //单激活
  98. $('.redeemsteamkey').on('click', function() {
  99. let that = $(this);
  100. redeem('s', that);
  101. });
  102.  
  103. //批量激活
  104. $('#redeemselectedsteamkey').on('click', function() {
  105. redeem('m', null, $('.act'));
  106. });
  107. //全部
  108. $('#redeemallsteamkey').on('click', function() {
  109. redeem('m', null, $('.game-key-string'));
  110. });
  111.  
  112.  
  113. //激活
  114. function redeem(type, that, selector) {
  115. let mark = {
  116. ifsuccess: 0, //异步成功标识
  117. successful: 0, //成功数
  118. failed: 0 //失败数
  119. };
  120. //type参数为判断是否是批量激活,m为多激活,s为单激活
  121. if (type == "m") {
  122. let keys = [];
  123. let position = [];
  124. let i = 1; //循环定时器以及position数组,从1开始,第0次直接执行不通过loop函数
  125. let all = selector.length;
  126. $.each(selector, (i, e) => {
  127. let key = $(e).find('input.input-block-level').val();
  128. let posi = $(e).index();
  129. position.push(posi);
  130. keys.push(key);
  131. });
  132. if (!sessionid) {
  133. alert('请输入你的Session ID!');
  134. } else if (keys.length) {
  135. $('.rdone').html('');
  136. $('#rs,#rf').html(0);
  137. $('.redeem-moadal,.blackbg').addClass('open');
  138. $('#ra').html(all);
  139. redeemResquest(keys[0], sessionid, mark, all, position[0]);
  140. loopRequest(keys, sessionid, mark, all, position, i);
  141. } else {
  142. alert('请先选择要激活的游戏!');
  143. }
  144. } else {
  145. let key = that.parent().find('input.input-block-level').val();
  146. let posi = that.parents('.game-key-string').index();
  147. if (!sessionid) {
  148. return alert('请输入你的Session ID!');
  149. }
  150. redeemResquest(key, sessionid, mark, 1, posi).then((mark) => {
  151. if (mark.successful)
  152. alert('激活成功!');
  153. else
  154. alert('激活失败!');
  155. }).catch((error) => {
  156. alert(`出错了!错误原因:${error}`);
  157. });
  158. }
  159. }
  160.  
  161. //多激活延迟
  162. function loopRequest(keys, sessionid, mark, all, p, i) {
  163. setTimeout(function() {
  164. if (i > (keys.length - 1)) {
  165. return;
  166. }
  167. redeemResquest(keys[i], sessionid, mark, all, p[i]);
  168. i++;
  169. loopRequest(keys, sessionid, mark, all, p, i);
  170. }, 10000);
  171. }
  172.  
  173. //激活请求 all参数用来保存请求总数 p参数用来确定哪一个div.game-key-string激活失败并加failed类
  174. function redeemResquest(key, sessionid, mark, all, p) {
  175. return new Promise((resolve, reject) => {
  176. GM_xmlhttpRequest({
  177. method: 'GET',
  178. url: `https://store.steampowered.com/account/ajaxregisterkey/?product_key=${key}&sessionid=${sessionid}`,
  179. onload: response => {
  180. result = JSON.parse(response.responseText);
  181. if (result.success == 1) {
  182. mark.successful += 1;
  183. $('#rs').html(mark.successful);
  184. } else {
  185. mark.failed += 1;
  186. $('#rf').html(mark.failed);
  187. if (p || p === 0) {
  188. $('.game-key-string').eq(p).addClass('failed');
  189. }
  190. }
  191. mark.ifsuccess += 1;
  192. if (mark.ifsuccess == all) {
  193. $('#closemodal').addClass('open');
  194. $('.rdone').html('激活完成!');
  195. }
  196. resolve(mark);
  197. },
  198. onerror: () => {
  199. reject(error);
  200. }
  201. });
  202. });
  203. }
  204.  
  205. })(jQuery);