Advertisement
Guest User

Untitled

a guest
Dec 20th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.06 KB | None | 0 0
  1. const request = require('request-promise');
  2. const twoFactor = require('node-2fa');
  3.  
  4. //
  5. // Config
  6.  
  7. const config = {
  8. apiKey: '0918c59659032b0290aea8851ac751',
  9. twoFactorSecret: 'CWRYF4YAZVESTAUN',
  10. opskinsid: '5679090', // Opskins User ID
  11. betTimes: -1, // -1 For no limit
  12. betMin: '5', // 1 Min
  13. betMax: '10',
  14. betMinTime: 160,
  15. betMaxTime: 200
  16. }
  17.  
  18. //
  19.  
  20. if (config.apiKey == '') throw new Error('Api-Key missing!');
  21. if (config.twoFactorSecret == '') throw new Error('Two-Factor missing!');
  22. if (config.opskinsid == '') throw new Error('Opskinsid missing!');
  23.  
  24. var oprequest = request.defaults({
  25. auth: {
  26. user: config.apiKey,
  27. password: '',
  28. sendImmediately: true
  29. }
  30. });
  31.  
  32.  
  33. process.on('uncaughtException', function (err) {
  34. console.log("Error...");
  35. console.error(err);
  36. });
  37.  
  38.  
  39. //
  40. // WAX Inventory
  41.  
  42. async function GetUserInventory(opskinsId, appId = 1, page = 1, mergeItems = []) {
  43. try {
  44. const data = await oprequest({
  45. method: 'GET',
  46. url: `https://api-trade.opskins.com/ITrade/GetUserInventory/v1/`,
  47. qs: {
  48. uid: opskinsId,
  49. app_id: appId,
  50. per_page: 500,
  51. page
  52. },
  53. json: true
  54. });
  55.  
  56. if (data.status !== 1) {
  57. throw new Error(data.message);
  58. }
  59.  
  60. mergeItems = mergeItems.concat(data.response.items);
  61. if (page + 1 > data.total_pages) {
  62. return mergeItems;
  63. }
  64.  
  65. return GetUserInventory(opskinsId, appId, page + 1, mergeItems);
  66. } catch (err) {
  67. throw new Error((err.error && err.error.message ? err.error.message : err.message ? err.message : 'Opskins service is unreachable.'));
  68. }
  69. }
  70.  
  71. var appIds = [
  72. 1, // VGO
  73. 13, // Gift Cards
  74. 15, // Game Items
  75. 16, // Digital Items
  76. 17, // G-Fuel
  77. 18, // Fan Gear
  78. 19, // Shoes
  79. 20, // Apparels
  80. 21, // Electronics
  81. 22, // Games
  82. ];
  83.  
  84. async function WAXInventory(opskinsId) {
  85. let inventory = [];
  86. let inventoryValue = 0;
  87. for (var i = 0; i < appIds.length; i++) {
  88. let appId = appIds[i];
  89. let items = await GetUserInventory(opskinsId, appId);
  90. for (var j = 0; j < items.length; j++) {
  91. let item = items[j];
  92. inventoryValue += item.suggested_price;
  93. inventory.push({
  94. id: item.id,
  95. name: item.name,
  96. price: item.suggested_price/100
  97. });
  98. }
  99. }
  100. inventoryValue = inventoryValue/100;
  101. return [inventory, inventoryValue];
  102. }
  103.  
  104.  
  105.  
  106.  
  107. let pollTrades = {
  108. offers: [],
  109. timer: null
  110. };
  111.  
  112. let betCount = 0;
  113. let randomTimes = 0;
  114.  
  115. async function GetOfferTrades(offerId) {
  116. var res = await oprequest({
  117. method: 'GET',
  118. url: `https://api-trade.opskins.com/ITrade/GetOffer/v1/`,
  119. qs: {
  120. offer_id: offerId
  121. },
  122. json: true
  123. });
  124.  
  125. return res.response.offer || null;
  126. }
  127.  
  128. async function doPoolTrades() {
  129. if (pollTrades.offers.length) {
  130. for (var i = pollTrades.offers.length - 1; i >= 0; i--) {
  131. let trade = pollTrades.offers[i];
  132. try {
  133. let offer = await GetOfferTrades(trade.tradeid);
  134. if (!offer || !offer.state) throw new Error('Failed to load offer.');
  135. if (trade.last_state != offer.state) {
  136. if (offer.state === 3) {
  137. console.log('Deposit offer has been accepted.');
  138. } else {
  139. console.log('Deposit offer has been rejected.');
  140. }
  141. StartBet();
  142. }
  143.  
  144. trade.last_state = offer.state;
  145.  
  146. if (offer.state !== 2) {
  147. pollTrades.offers.splice(i, 1);
  148. }
  149. } catch (err) {
  150. console.log("doPoolTrades", "Trade pool error for offer "+trade.tradeid+" Error: " + err.message);
  151. }
  152. }
  153. }
  154. pollTrades.timer = setTimeout(doPoolTrades.bind(this), 2000);
  155. }
  156.  
  157. doPoolTrades();
  158.  
  159. // Shit function
  160. function Randomitems(inventory) {
  161. if (randomTimes >= 50) throw new Error('Failed to get random items to bet.');
  162.  
  163. let betMin = parseFloat(config.betMin);
  164. let betMax = parseFloat(config.betMax);
  165.  
  166. let gotValue = 0;
  167. let gotItems = [];
  168.  
  169. while(true) {
  170. var item = inventory[Math.floor(Math.random()*inventory.length)];
  171. if (gotItems.indexOf(item.id) != -1) continue;
  172.  
  173.  
  174. if (item.price > betMax || item.price + gotValue > betMax || gotItems.length >= 20) {
  175. randomTimes++;
  176. return Randomitems(inventory);
  177. }
  178.  
  179. gotValue += item.price;
  180. gotItems.push(item.id);
  181.  
  182. if (gotValue >= betMin) return [gotItems, gotValue];
  183. }
  184.  
  185. }
  186.  
  187. async function DepositOffer(items, value) {
  188. console.log('Creating deposit offer for '+items.length+' items valuated at $'+value.toFixed(2)+'.');
  189. try {
  190. var data = await oprequest({
  191. method: 'POST',
  192. url: `https://api-trade.opskins.com/ITrade/SendOffer/v1/`,
  193. form: {
  194. uid: '5698156',
  195. token: 'zrI76U4A',
  196. items_to_send: items.join(','),
  197. twofactor_code: twoFactor.generateToken(config.twoFactorSecret).token
  198. },
  199. json: true
  200. });
  201.  
  202. pollTrades.offers.push({
  203. tradeid: data.response.offer.id,
  204. last_state: data.response.offer.state
  205. });
  206.  
  207. betCount++;
  208. console.log('Deposit offer created.');
  209. } catch (err) {
  210.  
  211. console.log(err.message)
  212. console.log('Failed to create deposit offer. Retrying in 5sec...');
  213. setTimeout(function() {
  214. StartBet();
  215. }, 5000);
  216. }
  217. }
  218.  
  219. console.log('\x1b[36mBot sted: Min deposit: $'+config.betMin+', Max deposit: $'+config.betMax+', Min time: '+config.betMinTime+'sec, Max time: '+config.betMaxTime+'sec.' ,'\x1b[0m');
  220.  
  221. let startBalance = -1;
  222. let currentBet = 0;
  223.  
  224.  
  225. async function StartBet() {
  226. if (config.betTimes != -1 && betCount >= config.betTimes) throw new Error('Bet limit reached');
  227.  
  228.  
  229. var [ inventory, value ] = await WAXInventory(config.opskinsid);
  230. console.log('Loaded user inventory: items: '+inventory.length+', value: $'+value.toFixed(2)+'.');
  231.  
  232. if (value < parseFloat(config.betMin)) throw new Error('Not enough value in inventory to make bet.');
  233.  
  234. if (startBalance == -1) startBalance = value;
  235. currentBet++;
  236. console.log('\x1b[32mCurrent bet ' + currentBet + '. Profit: '+(value - startBalance).toFixed(2)+'.' ,'\x1b[0m');
  237.  
  238.  
  239. let timeout = Math.floor(Math.random()*(config.betMaxTime-config.betMinTime+1)+config.betMinTime);
  240.  
  241. console.log('Next bet in ' + timeout + ' secoonds.');
  242.  
  243. setTimeout(function() {
  244. randomTimes = 0;
  245. var [items, value] = Randomitems(inventory);
  246. DepositOffer(items, value);
  247. }, timeout * 1000);
  248. }
  249.  
  250. StartBet();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement