Guest User

Untitled

a guest
Jun 15th, 2016
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var SteamCommunity = require('steamcommunity');
  2. var SteamTotp = require('steam-totp');
  3. var mysql = require('mysql');
  4. var log4js = require('log4js');
  5. var SteamTradeOffers = require('steam-tradeoffers');
  6. var async = require('async');
  7.  
  8. var pool  = mysql.createPool({
  9.     connectionLimit : 10,
  10.     database: 'csgo',
  11.     host: 'localhost',
  12.     user: 'root',
  13.     password: ''
  14. });
  15.  
  16. var community = new SteamCommunity();
  17. var offers = new SteamTradeOffers();
  18. log4js.configure({
  19.     appenders: [
  20.         { type: 'console' },
  21.         { type: 'file', filename: 'logs/bot_'+process.argv[2]+'.log' }
  22.     ]
  23. });
  24. var logger = log4js.getLogger();
  25.  
  26. var express = require('express');
  27. var app = express();
  28.  
  29. app.get('/sendTrade/', function (req, res) {
  30.     var assetids = req.query['assetids'];
  31.     assetids = assetids.split(',');
  32.     var partner = req.query['partner'];
  33.     var token = req.query['token'];
  34.     var checksum = req.query['checksum'];
  35.     var steamid = req.query['steamid'];
  36.     var senditems = [];
  37.     for(var i = 0; i < assetids.length; i++) {
  38.         if(assetids[i] == "") continue;
  39.         senditems.push({
  40.             appid: 730,
  41.             contextid: 2,
  42.             assetid: assetids[i]
  43.         });
  44.     }
  45.     var code = makecode();
  46.     console.log(partner, token, checksum, assetids, senditems);
  47.     offers.makeOffer({
  48.         partnerAccountId: partner,
  49.         accessToken: token,
  50.         itemsFromThem: senditems,
  51.         itemsFromMe: [],
  52.         message: 'Code: '+code
  53.     }, function(err, r) {
  54.         if(err) {
  55.             logger.error('Error sending trade');
  56.             logger.debug(err);
  57.             res.json({
  58.                 success: false,
  59.                 error: err.toString()
  60.             });
  61.         } else {
  62.             offers.loadPartnerInventory({
  63.                 partnerSteamId: steamid,
  64.                 tradeOfferId: r.tradeofferid,
  65.                 appId: 730,
  66.                 contextId: 2,
  67.                 language: 'russian'
  68.             }, function(err, rr) {
  69.                 if(err) {
  70.                     logger.debug(err);
  71.                     res.json({
  72.                         success: false,
  73.                         error: err.toString()
  74.                     });
  75.                 } else {
  76.                     var names = [];
  77.                     for(var i = 0; i < senditems.length; i++) {
  78.                         for(var a = 0; a < rr.length; a++) {
  79.                             if((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  80.                                 names.push({market_hash_name: rr[a].market_hash_name, icon_url: rr[a].icon_url});
  81.                                 rr[a].ss = 1;
  82.                                 continue;
  83.                             }
  84.                         }
  85.                     }
  86.                     res.json({
  87.                         success: true,
  88.                         code: code,
  89.                         amount: checksum,
  90.                         tid: r.tradeofferid,
  91.                         items: names
  92.                     });
  93.                 }
  94.             });
  95.         }
  96.     });
  97. });
  98.  
  99. app.get('/sendTradeMe/', function (req, res) {
  100.     var names = req.query['names'];
  101.     names = names.split(',');
  102.     var partner = req.query['partner'];
  103.     var token = req.query['token'];
  104.     var checksum = req.query['checksum'];
  105.     offers.loadMyInventory({
  106.         appId: 730,
  107.         contextId: 2
  108.     }, function(err, items) {
  109.         if(err) {
  110.             logger.error('Error sending trade');
  111.             logger.debug(err);
  112.             res.json({
  113.                 success: false,
  114.                 error: err.toString()
  115.             });        
  116.         } else {
  117.             var senditems = [];
  118.             for(var i = 0; i < names.length; i++) {
  119.                 for(var a = 0; a < items.length; a++) {
  120.                     if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  121.                         senditems.push({
  122.                             appid: 730,
  123.                             contextid: 2,
  124.                             assetid: items[a].id
  125.                         });
  126.                         if(senditems.length == names.length-1) break;
  127.                         items[a].ss = 1;
  128.                         continue;
  129.                     }
  130.                     if(senditems.length == names.length-1) break;
  131.                 }
  132.             };
  133.             var code = makecode();
  134.             console.log(partner, token, checksum, names, senditems);
  135.             offers.makeOffer({
  136.                 partnerAccountId: partner,
  137.                 accessToken: token,
  138.                 itemsFromThem: [],
  139.                 itemsFromMe: senditems,
  140.                 message: 'Code: '+code
  141.             }, function(err, r) {
  142.                 if(err) {
  143.                     logger.error('Error sending trade');
  144.                     logger.debug(err);
  145.                     res.json({
  146.                         success: false,
  147.                         error: err.toString()
  148.                     });
  149.                 } else {
  150.                     res.json({
  151.                         success: true,
  152.                         code: code,
  153.                         amount: -checksum,
  154.                         tid: r.tradeofferid,
  155.                         state: 2
  156.                     });
  157.                 }
  158.             });
  159.         }
  160.     });
  161. });
  162.  
  163. app.get('/checkTrade/', function (req, res) {
  164.     var tid = req.query['tid'];
  165.     offers.getOffer({
  166.         tradeofferid: tid
  167.     }, function(err, trade) {
  168.         if(err) {
  169.             logger.error('Error checking trade');
  170.             logger.debug(err);
  171.             res.json({
  172.                 success: false,
  173.                 error: err.toString()
  174.             });
  175.         } else {
  176.             logger.debug(trade);
  177.             if(trade.response.offer.trade_offer_state == 3) {
  178.                 res.json({
  179.                     success: true,
  180.                     action: 'accept',
  181.                     result: 'Coins have been added to your balance'
  182.                 });
  183.             } else if(trade.response.offer.trade_offer_state == 7) {
  184.                 res.json({
  185.                     success: true,
  186.                     result: 'You are declined trade',
  187.                     action: 'cross'
  188.                 });
  189.             } else {
  190.                 res.json({
  191.                     success: false,
  192.                     error: 'You are not accept trade'
  193.                 });
  194.             }
  195.         }
  196.     });
  197. });
  198.  
  199. function cancelTrade(offerid) {
  200.     offers.declineOffer({
  201.         tradeOfferId: offerid
  202.     }, function(err, log) {
  203.         if (err) {
  204.             logger.error('Не смогли отменить трейд #'+offerid);
  205.             logger.debug(err);
  206.             return;
  207.         }
  208.         logger.debug(log);
  209.         logger.trace('Offer #'+offerid+' canceled');
  210.     });
  211. }
  212.  
  213. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  214.     if((err) || (!res[0])) {
  215.         logger.error('Cant find account');
  216.         process.exit(0);
  217.         return;
  218.     }
  219.     account = res[0];
  220.     app.listen(3000+account.id);
  221.     logger.trace('We got account info');
  222.     account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  223.     account.auth = false;
  224.     logger.debug(account);
  225.     community.login(account, login);
  226. });
  227.  
  228. community.on('confKeyNeeded', function(tag, callback) {
  229.     callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  230. });
  231.  
  232. community.on('newConfirmation', function(confirmation) {
  233.     var time = time();
  234.     var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  235.     confirmation.respond(time, key, true, function(err) {
  236.         if(err) {
  237.             logger.error('Error on mobile auth');
  238.             logger.debug(err);
  239.             return;
  240.         }
  241.         logger.trace('Trade sucesfully confirmed');
  242.     });
  243. });
  244.  
  245. function query(sql, callback) {
  246.     if (typeof callback === 'undefined') {
  247.         callback = function() {};
  248.     }
  249.     pool.getConnection(function(err, connection) {
  250.         if(err) return callback(err);
  251.         logger.info('DB connection ID: '+connection.threadId);
  252.         connection.query(sql, function(err, rows) {
  253.             if(err) return callback(err);
  254.             connection.release();
  255.             return callback(null, rows);
  256.         });
  257.     });
  258. }
  259.  
  260. function login(err, sessionID, cookies, steamguard) {
  261.     if(err) {
  262.         logger.error('Auth error');
  263.         logger.debug(err);
  264.         if(err.message == "SteamGuardMobile") {
  265.             account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  266.             logger.warn('Error in auth: '+account.twoFactorCode);
  267.             setTimeout(function() {
  268.                 community.login(account, login);
  269.             }, 5000);
  270.             return;
  271.         }
  272.         process.exit(0);
  273.     }
  274.     logger.trace('Sucesfully auth');
  275.     account.sessionID = sessionID;
  276.     account.cookies = cookies;
  277.     community.getWebApiKey('csgobananas.com', webApiKey);
  278.     community.startConfirmationChecker(10000, account.identity_secret);
  279. }
  280.  
  281. function webApiKey(err, key) {
  282.     if(err) {
  283.         logger.error('Cant make apikey')
  284.         logger.debug(err);
  285.         process.exit(0);
  286.         return;
  287.     }
  288.     account.key = key;
  289.     logger.trace('API key bot '+account.accountName+' '+account.key);
  290.     offersSetup();
  291.     community.loggedIn(checkLoggedIn);
  292. }
  293.  
  294. function offersSetup() {
  295.     logger.trace('Loaded steam-tradeoffers');
  296.     offers.setup({
  297.         sessionID: account.sessionID,
  298.         webCookie: account.cookies,
  299.         APIKey: account.key
  300.     });
  301. }
  302.  
  303. function checkLoggedIn(err, loggedIn, familyView) {
  304.     if((err) || (!loggedIn)) {
  305.         logger.error('We arent logged in')
  306.         process.exit(0);
  307.     } else {
  308.         logger.trace('Logged in');
  309.         account.auth = true;
  310.     }
  311. }
  312.  
  313. function makecode() {
  314.     var text = "";
  315.     var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  316.  
  317.     for(var i=0; i < 5; i++)
  318.         text += possible.charAt(Math.floor(Math.random() * possible.length));
  319.  
  320.     return text;
  321. }
  322.  
  323. function time() {
  324.     return parseInt(new Date().getTime()/1000)
  325. }
Add Comment
Please, Sign In to add comment