Advertisement
cocaineee

Fixed bot fastvictory

Feb 12th, 2017
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var fs = require('fs');
  2. var crypto = require('crypto');
  3. var console = process.console;
  4. var config  = require('./config.js');
  5. var Steam = require('steam');
  6. var SteamWebLogOn = require('steam-weblogon');
  7. var getSteamAPIKey = require('steam-web-api-key');
  8. var SteamTradeOffers = require('steam-tradeoffers');
  9. var redisClient, io, requestify;
  10. var SteamTotp = require('steam-totp');
  11. var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
  12. module.exports.init = function(redis, ioSocket, requestifyCore) {
  13.     io = ioSocket;
  14.     redisClient = redis.createClient();
  15.     requestify = requestifyCore;
  16. }
  17.  
  18. var logOnOptions = {
  19.     account_name: config.bot.username,
  20.     password: config.bot.password,
  21.   two_factor_code: SteamTotp.generateAuthCode(config.bot.shared_secret)
  22. };
  23. console.log('Кod SG '+SteamTotp.generateAuthCode(config.bot.shared_secret));
  24. function gucode(){
  25.   console.log('Kod SG '+SteamTotp.generateAuthCode(config.bot.shared_secret));
  26.   setTimeout(function(){ gucode() }, 30000)
  27. }
  28. gucode();
  29. var authCode = ''; // code received by email
  30.  
  31. try {
  32.     logOnOptions.sha_sentryfile = getSHA1(fs.readFileSync('sentry'));
  33. } catch (e) {
  34.  
  35.     if (authCode !== '') {
  36.         logOnOptions.auth_code = authCode;
  37.     }
  38. }
  39. function getSHA1(bytes) {
  40.     var shasum = crypto.createHash('sha1');
  41.     shasum.end(bytes);
  42.     return shasum.read();
  43. }
  44. // if we've saved a server list, use it
  45. /*
  46.  if (fs.existsSync('servers')) {
  47.  Steam.servers = JSON.parse(fs.readFileSync('servers'));
  48.  }*/
  49.  
  50. var steamClient = new Steam.SteamClient();
  51. var steamUser = new Steam.SteamUser(steamClient);
  52. var steamFriends = new Steam.SteamFriends(steamClient);
  53. var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
  54. var offers = new SteamTradeOffers();
  55.  
  56. var checkingOffers = [],
  57.     WebSession = false,
  58.     globalSession;
  59.  
  60. const redisChannels = {
  61.     checkItemsList: 'checkItems.list',
  62.     checkList:      'check.list',
  63.     checkedList:    'checked.list',
  64.     betsList:       'bets.list',
  65.     sendOffersList: 'send.offers.list',
  66.     tradeoffersList: 'tradeoffers.list',
  67.     declineList:    'decline.list',
  68.     usersQueue:     'usersQueue.list'
  69. }
  70.  
  71. function steamBotLogger(log){
  72.     console.tag('SteamBot').log(log);
  73. }
  74. steamClient.connect();
  75. steamClient.on('debug', steamBotLogger);
  76. steamClient.on('connected', function() {
  77.     steamUser.logOn(logOnOptions);
  78. });
  79.  
  80. steamClient.on('logOnResponse', function(logonResp) {
  81.     if (logonResp.eresult === Steam.EResult.OK) {
  82.         steamBotLogger('Logged in!');
  83.         steamFriends.setPersonaState(Steam.EPersonaState.Online);
  84.  
  85.         steamWebLogOn.webLogOn(function(sessionID, newCookie) {
  86.  
  87.       function trademobile(){
  88. var hash = require('crypto').createHash('sha1');
  89. hash.update(Math.random().toString());
  90. hash = hash.digest('hex');
  91. device_id = 'android:' + hash;
  92. var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
  93. {
  94.  steamid: config.bot.steamid,
  95. identity_secret: config.bot.identity_secret,
  96. device_id: this.device_id,
  97.     webCookie:  newCookie,
  98. });
  99. steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations)
  100. {
  101.     if (err)
  102.     {
  103.         console.tag('SteamBot').error(err);
  104.         return;
  105.     }
  106.    console.tag('ESCROW').log('ESCROW LENGHT: ' + confirmations.length + '');
  107.     if ( ! confirmations.length)
  108.     {
  109.         return;
  110.     }
  111.       steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result)
  112.     {
  113.         if (err)
  114.         {
  115.             console.tag('SteamBot').error(err);
  116.             return;
  117.         }
  118.         console.tag('ESCROW').log('ESCROW Result: ' + result);
  119.     }).bind(this));
  120. }).bind(this));
  121.   setTimeout(function(){ trademobile()}, 60000)
  122. }
  123. trademobile();
  124.             getSteamAPIKey({
  125.                 sessionID: sessionID,
  126.                 webCookie: newCookie
  127.             }, function(err, APIKey) {
  128.                 offers.setup({
  129.                     sessionID: sessionID,
  130.                     webCookie: newCookie,
  131.                     APIKey: APIKey
  132.                 }, function(err){
  133.                     WebSession = true;
  134.                     globalSession = sessionID;
  135.                     redisClient.lrange(redisChannels.tradeoffersList, 0, -1, function(err, offers){
  136.                         offers.forEach(function(offer) {
  137.                             checkingOffers.push(offer);
  138.                         });
  139.                         handleOffers();
  140.                     });
  141.                     steamBotLogger('Setup Offers!');
  142.                 });
  143.  
  144.             });
  145.         });
  146.     }
  147. });
  148.  
  149.  
  150.  
  151.  
  152. steamClient.on('servers', function(servers) {
  153.     fs.writeFile('servers', JSON.stringify(servers));
  154. });
  155.  
  156. steamUser.on('updateMachineAuth', function(sentry, callback) {
  157.     fs.writeFileSync('sentry', sentry.bytes);
  158.     callback({ sha_file: getSHA1(sentry.bytes) });
  159. });
  160.  
  161. function handleOffers() {
  162.     offers.getOffers({
  163.         get_received_offers: 1,
  164.         active_only: 1
  165.     }, function(error, body) {
  166.         if (
  167.             body
  168.             && body.response
  169.             && body.response.trade_offers_received
  170.         ) {
  171.             body.response.trade_offers_received.forEach(function(offer) {
  172.                 if (offer.trade_offer_state == 2) {
  173.                     if(is_checkingOfferExists(offer.tradeofferid)) return;
  174.  
  175.                     if(offer.items_to_give != null && config.admins.indexOf(offer.steamid_other) != -1) {
  176.                         console.tag('SteamBot', 'TradeOffer').log('OFERTA #' + offer.tradeofferid + ' Od Admina z ID ' + offer.steamid_other);
  177.                         offers.acceptOffer({tradeOfferId: offer.tradeofferid});
  178.                         return;
  179.                     }
  180.  
  181.           offers.getTradeHoldDuration({tradeOfferId : offer.tradeofferid}, function(err, response)
  182.           {
  183.                 console.log(offer.steamid_other);
  184.                 console.log(offer.accessToken);
  185.                 fs.writeFile('saved_response.txt', response, 'utf8');
  186.  
  187.                 if (response && response.their != 0)
  188.                 {
  189.                   console.tag('SteamBot', 'TradeOffer').log('Hold TradeOfferID: '+offer.tradeofferid+' days: '+response.their);
  190.  
  191.                   //declineOffersProcceed( offer.tradeofferid );
  192.  
  193.                   redisClient.multi([
  194.                       ['rpush', redisChannels.declineList, offer.tradeofferid],
  195.                       ['lrem', redisChannels.checkItemsList, 0, offer],
  196.                       ['lrem', redisChannels.checkItemsList, 0, offer],
  197.                       ['lrem', redisChannels.checkedList, 0, offer],
  198.                       ['lrem', redisChannels.checkedList, 0, offer]
  199.                   ])
  200.                   .exec(function (err, replies) {
  201.                   });
  202.  
  203.  
  204.                   requestify.post('http://'+config.domain+'/api/haventescrow', {secretKey: config.secretKey , steamid: offer.steamid_other});
  205.  
  206.                   return;
  207.                  }
  208.  
  209.             });
  210.                     if(offer.items_to_give != null) {
  211.                         offers.declineOffer({tradeOfferId: offer.tradeofferid});
  212.                         return;
  213.                     }
  214.                     if (offer.items_to_receive != null && offer.items_to_give == null) {
  215.                         checkingOffers.push(offer.tradeofferid);
  216.                         console.tag('SteamBot', 'TradeOffer').log('Nowa oferta nr #' + offer.tradeofferid + ' OD: ' + offer.steamid_other);
  217.                         redisClient.multi([
  218.                             ['rpush', redisChannels.tradeoffersList, offer.tradeofferid],
  219.                             ['rpush', redisChannels.checkItemsList, JSON.stringify(offer)],
  220.                             ['rpush', redisChannels.usersQueue, offer.steamid_other]
  221.                         ]).exec(function(){
  222.                             redisClient.lrange(redisChannels.usersQueue, 0, -1, function(err, queues) {
  223.                                 io.sockets.emit('queue', queues);
  224.                             });
  225.                         });
  226.                         return;
  227.                     }
  228.                 }
  229.             });
  230.         }
  231.     });
  232. }
  233.  
  234. steamUser.on('tradeOffers', function(number) {
  235.     if (number > 0) {
  236.         handleOffers();
  237.     }
  238. });
  239.  
  240.  
  241. var parseOffer = function(offer, offerJson){
  242.     offers.loadPartnerInventory({partnerSteamId: offer.steamid_other, appId: 730, contextId: 2, tradeOfferId: offer.tradeofferid, language: "russian"}, function(err, hitems) {
  243.         if (err) {
  244.             redisClient.multi([
  245.                 ['rpush', redisChannels.declineList, offer.tradeofferid],
  246.                 ['lrem', redisChannels.checkItemsList, 0, offerJson],
  247.                 ['lrem', redisChannels.checkItemsList, 0, offerJson],
  248.                 ['lrem', redisChannels.usersQueue, 1, offer.steamid_other]
  249.             ])
  250.                 .exec(function (err, replies) {
  251.                     parseItemsProcceed = false;
  252.                     return;
  253.                 });
  254.             return;
  255.         }
  256.         var items = offer.items_to_receive;
  257.         var items_to_check = [], num = 0;
  258.         for (var i = 0; i < items.length; i++) {
  259.             for (var j = 0; j < hitems.length; j++) {
  260.                 if (items[i].assetid == hitems[j].id) {
  261.                     items_to_check[num] = {
  262.                         appid:hitems[j].appid,
  263.                         name:hitems[j].market_name,
  264.                         market_hash_name:hitems[j].market_hash_name,
  265.                         classid:hitems[j].classid
  266.                     };
  267.                     var type = hitems[j].type;
  268.                     var rarity = '';
  269.                     var arr = type.split(',');
  270.                     if (arr.length == 2) type = arr[1].trim();
  271.                     if (arr.length == 3) type = arr[2].trim();
  272.                     if (arr.length && arr[0] == 'Nóż') type = '★';
  273.                     switch (type) {
  274.                         case 'Армейское качество':
  275.                             rarity = 'milspec';
  276.                             break;
  277.                             case 'высшего класса':
  278.                             rarity = 'milspec';
  279.                             break;
  280.                             case 'примечательного типа':
  281.                             rarity = 'milspec';
  282.                             break;
  283.                             case 'базового класса':
  284.                             rarity = 'common';
  285.                             break;
  286.                         case 'Запрещенное':
  287.                             rarity = 'restricted';
  288.                             break;
  289.                         case 'Засекреченное':
  290.                             rarity = 'classified';
  291.                             break;
  292.                            
  293.                             case 'экзотичного вида':
  294.                             rarity = 'classified';
  295.                             break;
  296.                         case 'Тайное':
  297.                             rarity = 'covert';
  298.                             break;
  299.                         case 'Ширпотреб':
  300.                             rarity = 'common';
  301.                             break;
  302.                         case 'Промышленное качество':
  303.                             rarity = 'common';
  304.                             break;
  305.                         case '★':
  306.                             rarity = 'rare';
  307.                             break;
  308.                     }
  309.                     items_to_check[num].rarity = rarity;
  310.                     num++;
  311.                     break;
  312.                 }
  313.             }
  314.         }
  315.         var value = {
  316.             offerid: offer.tradeofferid,
  317.             accountid: offer.steamid_other,
  318.             items: JSON.stringify(items_to_check)
  319.         };
  320.  
  321.         console.tag('SteamBot', 'Offer #' + value.offerid).log(value);
  322.  
  323.         redisClient.multi([
  324.             ['rpush', redisChannels.checkList, JSON.stringify(value)],
  325.             ['lrem', redisChannels.checkItemsList, 0, offerJson],
  326.             ['lrem', redisChannels.checkItemsList, 0, offerJson]
  327.         ])
  328.             .exec(function (err, replies) {
  329.                 parseItemsProcceed = false;
  330.             });
  331.  
  332.     });
  333. }
  334.  
  335. var checkOfferPrice = function(){
  336.     requestify.post('http://'+config.domain+'/api/checkOffer', {
  337.         secretKey: config.secretKey
  338.     })
  339.         .then(function(response) {
  340.             var answer = JSON.parse(response.body);
  341.  
  342.  
  343.             if(answer.success){
  344.                 checkProcceed = false;
  345.             }
  346.         },function(response){
  347.             console.tag('SteamBot').error('Something wrong with check offers. Retry...');
  348.             setTimeout(function(){checkOfferPrice()}, 5000);
  349.         });
  350.  
  351. }
  352.  
  353. var checkNewBet = function(){
  354.     requestify.post('http://'+config.domain+'/api/newBet', {
  355.         secretKey: config.secretKey
  356.     })
  357.         .then(function(response) {
  358.             var answer = JSON.parse(response.body);
  359.             if(answer.success){
  360.                 betsProcceed = false;
  361.             }
  362.         },function(response){
  363.             console.tag('SteamBot').error('Something wrong with send a new bet. Retry...');
  364.             setTimeout(function(){checkNewBet()}, 1000);
  365.         });
  366. }
  367.  
  368. var checkArrGlobal = [];
  369.  
  370. var sendTradeOffer = function(appId, partnerSteamId, accessToken, sendItems, message, game, offerJson){
  371.     try {
  372.         offers.loadMyInventory({
  373.             appId: appId,
  374.             contextId: 2
  375.         }, function (err, items) {
  376.             if(err) {
  377.                 console.log(err);
  378.                 sendProcceed = false;
  379.                 return;
  380.             }
  381.             var itemsFromMe = [],
  382.                 checkArr = [],
  383.                 num = 0;
  384.             var i = 0;
  385.             for (var i = 0; i < sendItems.length; i++) {
  386.                 for (var j = 0; j < items.length; j++) {
  387.                     if (items[j].tradable && (items[j].classid == sendItems[i])) {
  388.                         if ((checkArr.indexOf(items[j].id) == -1) && (checkArrGlobal.indexOf(items[j].id) == -1)) {
  389.                             checkArr[i] = items[j].id;
  390.                             itemsFromMe[num] = {
  391.                                 appid: 730,
  392.                                 contextid: 2,
  393.                                 amount: items[j].amount,
  394.                                 assetid: items[j].id
  395.                             };
  396.                             num++;
  397.                             break;
  398.                         }
  399.                     }
  400.                 }
  401.             }
  402.             if (num > 0) {
  403.                 offers.makeOffer({
  404.                     partnerSteamId: partnerSteamId,
  405.                     accessToken: accessToken,
  406.                     itemsFromMe: itemsFromMe,
  407.                     itemsFromThem: [],
  408.                     message: '#' + game + ''
  409.                 }, function (err, response) {
  410.                     if (err) {
  411.  
  412.                         console.tag('SteamBot', 'SendPrize').error('Nie mozna wyslac oferty:' + err.message);
  413.                         getErrorCode(err.message, function(errCode)
  414.                         {
  415.                             if (errCode == 15 || errCode == 50  || errCode == 25 || errCode == 16)
  416.                             {
  417.                                 redisClient.lrem(redisChannels.sendOffersList, 0, offerJson, function (err, data) {
  418.                                 setPrizeStatus(game, 2);
  419.                                 sendProcceed = false;
  420.                                 });
  421.                             }
  422.                             else if(errCode == 20)
  423.                             {
  424.                                
  425.                                 sendProcceed = false;
  426.                                
  427.                                 console.tag('SteamBot', 'SendPrize').log('Ponowna proba wyslania oferty');
  428.                                 redisClient.lindex(redisChannels.sendOffersList, 0,function (err, offerJson) {
  429.                                 offer = JSON.parse(offerJson);
  430.                                
  431.                                 sendTradeOffer(730, partnerSteamId, accessToken, sendItems, '', game, offerJson);
  432.                            
  433.                                 }); // err20 = wyslij ponownie
  434.                             }
  435.                             sendProcceed = false;
  436.                         });
  437.                         return;
  438.                     }
  439.                     checkArrGlobal = checkArrGlobal.concat(checkArr);
  440.                     console.log(checkArrGlobal);
  441.                     console.log(checkArr);
  442.                     redisClient.lrem(redisChannels.sendOffersList, 0, offerJson, function(err, data){
  443.                         setPrizeStatus(game, 1);
  444.                         sendProcceed = false;
  445.                     });
  446.                     console.tag('SteamBot', 'SendPrize').log('oferta z rundy #' + response.tradeofferid +' wysłana!');
  447.                 });
  448.             }else{
  449.                 console.tag('SteamBot', 'SendPrize').log('Items not found!');
  450.         redisClient.lrem(redisChannels.sendOffersList, 0, offerJson, function(err, data){
  451.                     setPrizeStatus(game, 1);
  452.                     sendProcceed = false;
  453.                 });
  454.             }
  455.         });
  456.  
  457.     }catch(ex){
  458.         console.tag('SteamBot').error('Error to send the bet');
  459.         setPrizeStatus(game, 2);
  460.         sendProcceed = false;
  461.     }
  462. };
  463.  
  464. var setPrizeStatus = function(game, status){
  465.     requestify.post('http://'+config.domain+'/api/setPrizeStatus', {
  466.         secretKey: config.secretKey,
  467.         game: game,
  468.         status: status
  469.     })
  470.         .then(function(response) {
  471.  
  472.         },function(response){
  473.             console.tag('SteamBot').log('Something wrong with set prize status. Retry...');
  474.             setTimeout(function(){setPrizeStatus()}, 10000);
  475.         });
  476. }
  477.  
  478. var is_checkingOfferExists = function(tradeofferid){
  479.     for(var i = 0, len = checkingOffers.length; i<len; ++i ){
  480.         var offer = checkingOffers[i];
  481.         if(offer == tradeofferid){
  482.             return true;
  483.             break;
  484.         }
  485.     }
  486.     return false;
  487. }
  488.  
  489. var checkedOffersProcceed = function(offerJson){
  490.     var offer = JSON.parse(offerJson);
  491.     if (offer.success) {
  492.         console.tag('SteamBot').log('Rozpoczynam akceptację: #' + offer.offerid);
  493.         offers.acceptOffer({tradeOfferId: offer.offerid}, function (err, body) {
  494.             if (!err) {
  495.                 redisClient.multi([
  496.                     ["lrem", redisChannels.tradeoffersList, 0, offer.offerid],
  497.                     ["lrem", redisChannels.tradeoffersList, 0, offer.offerid],
  498.                     ["lrem", redisChannels.usersQueue, 1, offer.steamid64],
  499.                     ["rpush", redisChannels.betsList, offerJson],
  500.                     ["lrem", redisChannels.checkedList, 0, offerJson],
  501.                     ["lrem", redisChannels.checkedList, 0, offerJson]
  502.                 ])
  503.                     .exec(function (err, replies) {
  504.                         redisClient.lrange(redisChannels.usersQueue, 0, -1, function(err, queues) {
  505.                             io.sockets.emit('queue', queues);
  506.                             console.tag('SteamBot').log("Wpłata zaakceptowana!");
  507.                             checkedProcceed = false;
  508.                         });
  509.                     });
  510.  
  511.             } else {
  512.                
  513.                 getErrorCode(err.message, function (errCode) {
  514.                
  515.                 console.tag('SteamBot').error('Nie można zaakceptować oferty #' + offer.offerid + '. Błąd: '+ errCode)
  516.                
  517.                 if (errCode != 28)
  518.                 {
  519.                    
  520.  declineOffersProcceed( offer.offerid );
  521.  
  522.  }
  523.  
  524.  else {
  525.      
  526.       checkedOffersProcceed( offer.offerid );
  527.  }
  528.  
  529.                
  530.                 //setTimeout(function () {
  531.                  //   checkedOffersProcceed(offerJson);
  532.               //  }, 1000);
  533. console.tag('SteamBot').error('Error. With accept tradeoffer #' + offer.offerid)
  534.                    
  535.                 offers.getOffer({tradeOfferId: offer.offerid}, function (err, body){
  536.                     if(body && body.response && body.response.offer){
  537.                         var offerCheck = body.response.offer;
  538.                         if(offerCheck.trade_offer_state == 2) {
  539.                             checkedProcceed = false;
  540.                             return;
  541.                         }
  542.                         if(offerCheck.trade_offer_state == 3){
  543.                             redisClient.multi([
  544.                                 ["lrem", redisChannels.tradeoffersList, 0, offer.offerid],
  545.                                 ["lrem", redisChannels.tradeoffersList, 0, offer.offerid],
  546.                                 ["lrem", redisChannels.usersQueue, 1, offer.steamid64],
  547.                                 ["rpush", redisChannels.betsList, offerJson],
  548.                                 ["lrem", redisChannels.checkedList, 0, offerJson]
  549.                             ])
  550.                                 .exec(function (err, replies) {
  551.                                     redisClient.lrange(redisChannels.usersQueue, 0, -1, function(err, queues) {
  552.                                         io.sockets.emit('queue', queues);
  553.                                         checkedProcceed = false;
  554.                                     });
  555.                                 });
  556.                         }else{
  557.                             redisClient.multi([
  558.                                 ["lrem", redisChannels.tradeoffersList, 0, offer.offerid],
  559.                                 ["lrem", redisChannels.usersQueue, 1, offer.steamid64],
  560.                                 ["lrem", redisChannels.checkedList, 0, offerJson],
  561.                                 ["lrem", redisChannels.checkedList, 0, offerJson]
  562.                             ])
  563.                                 .exec(function (err, replies) {
  564.                                     redisClient.lrange(redisChannels.usersQueue, 0, -1, function(err, queues) {
  565.                                         io.sockets.emit('queue', queues);
  566.                                         checkedProcceed = false;
  567.                                     });
  568.                                 });
  569.                         }
  570.                     }
  571.                 })
  572.                    });
  573.             }
  574.         });
  575.     }
  576. }
  577.  
  578. var declineOffersProcceed = function(offerid){
  579.     console.tag('SteamBot').log('Procceding decline: #' + offerid);
  580.     offers.declineOffer({tradeOfferId: offerid}, function (err, body) {
  581.         if (!err) {
  582.             console.tag('SteamBot').log('Offer #' + offerid + ' Decline!');
  583.             redisClient.lrem(redisChannels.declineList, 0, offerid);
  584.             declineProcceed = false;
  585.         } else {
  586.             console.tag('SteamBot').error('Error. With decline tradeoffer #' + offer.offerid)
  587.                 .tag('SteamBot').log(err);
  588.             declineProcceed = false;
  589.         }
  590.     });
  591. }
  592.  
  593.  
  594. steamFriends.on('friendMsg', function(steamID, message, type) {
  595.     if(type != Steam.EChatEntryType.ChatMsg) return;
  596.     if(message.indexOf("/items") == 0) {
  597.             offers.loadMyInventory({
  598.                 appId: 730,
  599.                 contextId: 2
  600.             }, function(err, items) {
  601.                 if(err) {
  602.                     steamFriends.sendMessage(steamID, 'Не могу загрузить свой инвентарь, попробуй ещё раз');
  603.                     steam.webLogOn(function(newCookie) {
  604.                         offers.setup({
  605.                             sessionID: currentSessionId,
  606.                             webCookie: newCookie
  607.                         }, function(err) {
  608.                             if (err) {
  609.                             }
  610.                         });
  611.                     });
  612.                     return;
  613.                 }
  614.                 var item=[],num=0;
  615.                 for (var i = 0; i < items.length; i++) {
  616.                     if (items[i].tradable) {
  617.                         item[num] = {
  618.                             appid: 730,
  619.                             contextid: 2,
  620.                             amount: items[i].amount,
  621.                             assetid: items[i].id
  622.                         }
  623.                         num++;
  624.                     }
  625.                 }
  626.                 if (num > 0) {
  627.                     offers.makeOffer ({
  628.                         partnerSteamId: steamID,
  629.                         itemsFromMe: item,
  630.                         itemsFromThem: [],
  631.                         message: ''
  632.                     }, function(err, response){
  633.                         if (err) {
  634.                             throw err;
  635.                         }
  636.                         steamFriends.sendMessage(steamID, 'Обмен отправлен!');
  637.                     });
  638.                 }
  639.             });
  640.         }
  641.     else if(message.indexOf("/item") == 0) {
  642.             var params = message.split(' ');
  643.             if(params.length == 1) return steamFriends.sendMessage(steamID, 'Формат: /item [название предмета]');
  644.             offers.loadMyInventory({
  645.                 appId: 730,
  646.                 contextId: 2
  647.             }, function(err, items) {
  648.                 if(err) {
  649.                     steamFriends.sendMessage(steamID, 'Не могу загрузить свой инвентарь, попробуй ещё раз');
  650.                     steam.webLogOn(function(newCookie) {
  651.                         offers.setup({
  652.                             sessionID: currentSessionId,
  653.                             webCookie: newCookie
  654.                         }, function(err) {
  655.                             if (err) {
  656.                             }
  657.                         });
  658.                     });
  659.                     return;
  660.                 }
  661.                 var item=0;
  662.                 for (var i = 0; i < items.length; i++) {
  663.                         if((items[i].market_name).indexOf(params[1]) != -1) {
  664.                             item = items[i].id;
  665.                             break;
  666.                         }
  667.                     }
  668.                 if (item != 0) {
  669.                     offers.makeOffer ({
  670.                         partnerSteamId: steamID,
  671.                         itemsFromMe: [
  672.                         {
  673.                             appid: 730,
  674.                             contextid: 2,
  675.                             amount: 1,
  676.                             assetid: item
  677.                         }
  678.                         ],
  679.                         itemsFromThem: [],
  680.                         message: ''
  681.                     }, function(err, response){
  682.                         if (err) {
  683.                             throw err;
  684.                         }
  685.                         steamFriends.sendMessage(steamID, 'Обмен отправлен!');
  686.                     });
  687.                 }
  688.             });
  689.         }
  690. });
  691.  
  692.  
  693. var queueProceed = function(){
  694.     redisClient.llen(redisChannels.checkList, function(err, length) {
  695.         if (length > 0 && !checkProcceed) {
  696.             console.tag('SteamBot','Queues').info('CheckOffers:' + length);
  697.             checkProcceed = true;
  698.             checkOfferPrice();
  699.         }
  700.     });
  701.     redisClient.llen(redisChannels.declineList, function(err, length) {
  702.         if(length > 0 && !declineProcceed && WebSession) {
  703.             console.tag('SteamBot','Queues').info('DeclineOffers:' + length);
  704.             declineProcceed = true;
  705.             redisClient.lindex(redisChannels.declineList, 0,function (err, offer) {
  706.                 declineOffersProcceed(offer);
  707.             });
  708.         }
  709.     });
  710.     redisClient.llen(redisChannels.checkedList, function(err, length) {
  711.         if(length > 0 && !checkedProcceed && WebSession) {
  712.             console.tag('SteamBot','Queues').info('CheckedOffers:' + length);
  713.             checkedProcceed = true;
  714.             redisClient.lindex(redisChannels.checkedList, 0,function (err, offer) {
  715.                 checkedOffersProcceed(offer);
  716.             });
  717.         }
  718.     });
  719.     redisClient.llen(redisChannels.betsList, function(err, length) {
  720.         if (length > 0 && !betsProcceed && !delayForNewGame) {
  721.             console.tag('SteamBot','Queues').info('Bets:' + length);
  722.             betsProcceed = true;
  723.             checkNewBet();
  724.         }
  725.     });
  726.     redisClient.llen(redisChannels.sendOffersList, function(err, length) {
  727.         if (length > 0 && !sendProcceed && WebSession) {
  728.          console.tag('SteamBot','Queues').info('Send winner offers:' + length);
  729.             sendProcceed = true;
  730.             redisClient.lindex(redisChannels.sendOffersList, 0,function (err, offerJson) {
  731.                 offer = JSON.parse(offerJson);
  732.                 sendTradeOffer(730, offer.steamid, offer.accessToken, offer.items, '', offer.game, offerJson);
  733.             });
  734.         }
  735.     });
  736.     redisClient.llen(redisChannels.checkItemsList, function(err, length) {
  737.         if (length > 0 && !parseItemsProcceed && WebSession) {
  738.             console.tag('SteamBot','Queues').info('Parse items:' + length);
  739.             parseItemsProcceed = true;
  740.             redisClient.lindex(redisChannels.checkItemsList, 0, function (err, offerJson) {
  741.                 offer = JSON.parse(offerJson);
  742.                 parseOffer(offer, offerJson);
  743.             });
  744.         }
  745.     });
  746. }
  747. var parseItemsProcceed = false;
  748. var checkProcceed = false;
  749. var checkedProcceed = false;
  750. var declineProcceed = false;
  751. var betsProcceed = false;
  752. var sendProcceed = false;
  753. var delayForNewGame = false;
  754. setInterval(queueProceed, 500);
  755.  
  756. module.exports.handleOffers = handleOffers;
  757. module.exports.delayForNewGame = function(value){
  758.     delayForNewGame = value;
  759. };
  760.  
  761.  
  762. function getErrorCode(err, callback){
  763.     var errCode = 0;
  764.     var match = err.match(/\(([^()]*)\)/);
  765.     if(match != null && match.length == 2) errCode = match[1];
  766.     callback(errCode);
  767. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement