SHARE
TWEET

Undefined Fix (Just change your password!)

a guest Jun 15th, 2017 100 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: 'YOUR-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.  
  38.     for (var i = 0; i < assetids.length; i++) {
  39.         if (assetids[i] == "") continue;
  40.         senditems.push({
  41.             appid: 730,
  42.             contextid: 2,
  43.             assetid: assetids[i]
  44.         });
  45.     }
  46.     var code = makecode();
  47.     console.log(partner, token, checksum, assetids, senditems);
  48.     if ( assetids.length == 0){
  49.         logger.error('Error sending trade');
  50.         res.json({
  51.             success: false,
  52.             error: "Invalid assetid length."
  53.         });
  54.     }else if ((token == undefined) || (token == '')) {
  55.         logger.error('Error sending trade');
  56.         res.json({
  57.             success: false,
  58.             error: "Missing Trade token."
  59.         });
  60.     } else {
  61.     offers.makeOffer({
  62.         partnerAccountId: partner,
  63.         accessToken: token,
  64.         itemsFromThem: senditems,
  65.         itemsFromMe: [],
  66.         message: 'Code: ' + code
  67.     }, function (err, r) {
  68.         if (err) {
  69.             logger.error('Error sending trade');
  70.             logger.debug(err);
  71.             res.json({
  72.                 success: false,
  73.                 error: err.toString()
  74.             });
  75.         } else {
  76.             offers.loadPartnerInventory({
  77.                 partnerSteamId: steamid,
  78.                 tradeOfferId: r.tradeofferid,
  79.                 appId: 730,
  80.                 contextId: 2,
  81.                 language: 'russian'
  82.             }, function (err, rr) {
  83.                 if (err) {
  84.                     logger.debug(err);
  85.                     res.json({
  86.                         success: false,
  87.                         error: err.toString()
  88.                     });
  89.                 } else {
  90.                     var names = [];
  91.                     for (var i = 0; i < senditems.length; i++) {
  92.                         for (var a = 0; a < rr.length; a++) {
  93.                             if ((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  94.                                 names.push({market_hash_name: rr[a].market_hash_name, icon_url: rr[a].icon_url});
  95.                                 rr[a].ss = 1;
  96.                                 continue;
  97.                             }
  98.                         }
  99.                     }
  100.                     res.json({
  101.                         success: true,
  102.                         code: code,
  103.                         amount: checksum,
  104.                         tid: r.tradeofferid,
  105.                         items: names
  106.                     });
  107.                 }
  108.             });
  109.         }
  110.     });
  111. }
  112. });
  113.  
  114. app.get('/sendTradeMe/', function (req, res) {
  115.     var names = req.query['names'];
  116.     names = names.split(',');
  117.     var partner = req.query['partner'];
  118.     var token = req.query['token'];
  119.     var checksum = req.query['checksum'];
  120.      if ((token == undefined) || (token == '')) {
  121.         logger.error('Error sending trade');
  122.         res.json({
  123.             success: false,
  124.             error: "Missing Trade token."
  125.         });
  126.     } else {
  127.     offers.loadMyInventory({
  128.         appId: 730,
  129.         contextId: 2
  130.     }, function (err, items) {
  131.         if (err) {
  132.             logger.error('Error sending trade');
  133.             logger.debug(err);
  134.             res.json({
  135.                 success: false,
  136.                 error: err.toString()
  137.             });
  138.         } else {
  139.             var senditems = [];
  140.             for (var i = 0; i < names.length; i++) {
  141.                 for (var a = 0; a < items.length; a++) {
  142.                     if ((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  143.                         senditems.push({
  144.                             appid: 730,
  145.                             contextid: 2,
  146.                             assetid: items[a].id
  147.                         });
  148.                         if (senditems.length == names.length - 1) break;
  149.                         items[a].ss = 1;
  150.                         continue;
  151.                     }
  152.                     if (senditems.length == names.length - 1) break;
  153.                 }
  154.             }
  155.  
  156.             var code = makecode();
  157.             console.log(partner, token, checksum, names, senditems);
  158.             offers.makeOffer({
  159.                 partnerAccountId: partner,
  160.                 accessToken: token,
  161.                 itemsFromThem: [],
  162.                 itemsFromMe: senditems,
  163.                 message: 'Code: ' + code
  164.             }, function (err, r) {
  165.                 if (err) {
  166.                     logger.error('Error sending trade');
  167.                     logger.debug(err);
  168.                     res.json({
  169.                         success: false,
  170.                         error: err.toString()
  171.                     });
  172.                 } else {
  173.                     res.json({
  174.                         success: true,
  175.                         code: code,
  176.                         amount: -checksum,
  177.                         tid: r.tradeofferid,
  178.                         state: 2
  179.                     });
  180.                 }
  181.             });
  182.         }
  183.     });
  184. }
  185. });
  186.  
  187. app.get('/sendTradeMe/', function (req, res) {
  188.     var names = req.query['names'];
  189.     names = names.split(',');
  190.     var partner = req.query['partner'];
  191.     var token = req.query['token'];
  192.     var checksum = req.query['checksum'];
  193.     offers.loadMyInventory({
  194.         appId: 730,
  195.         contextId: 2
  196.     }, function(err, items) {
  197.         if(err) {
  198.             logger.error('Error sending trade');
  199.             logger.debug(err);
  200.             res.json({
  201.                 success: false,
  202.                 error: err.toString()
  203.             });        
  204.         } else {
  205.             var senditems = [];
  206.             for(var i = 0; i < names.length; i++) {
  207.                 for(var a = 0; a < items.length; a++) {
  208.                     if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  209.                         senditems.push({
  210.                             appid: 730,
  211.                             contextid: 2,
  212.                             assetid: items[a].id
  213.                         });
  214.                         if(senditems.length == names.length-1) break;
  215.                         items[a].ss = 1;
  216.                         continue;
  217.                     }
  218.                     if(senditems.length == names.length-1) break;
  219.                 }
  220.             };
  221.             var code = makecode();
  222.             console.log(partner, token, checksum, names, senditems);
  223.             offers.makeOffer({
  224.                 partnerAccountId: partner,
  225.                 accessToken: token,
  226.                 itemsFromThem: [],
  227.                 itemsFromMe: senditems,
  228.                 message: 'Code: '+code
  229.             }, function(err, r) {
  230.                 if(err) {
  231.                     logger.error('Error sending trade');
  232.                     logger.debug(err);
  233.                     res.json({
  234.                         success: false,
  235.                         error: err.toString()
  236.                     });
  237.                 } else {
  238.                     res.json({
  239.                         success: true,
  240.                         code: code,
  241.                         amount: -checksum,
  242.                         tid: r.tradeofferid,
  243.                         state: 2
  244.                     });
  245.                 }
  246.             });
  247.         }
  248.     });
  249. });
  250.  
  251. app.get('/checkTrade/', function (req, res) {
  252.     var tid = req.query['tid'];
  253.     offers.getOffer({
  254.         tradeofferid: tid
  255.     }, function(err, trade) {
  256.         if(err) {
  257.             logger.error('Error checking trade');
  258.             logger.debug(err);
  259.             res.json({
  260.                 success: false,
  261.                 error: err.toString()
  262.             });
  263.         } else {
  264.             logger.debug(trade);
  265.             if(trade.response.offer.trade_offer_state == 3) {
  266.                 res.json({
  267.                     success: true,
  268.                     action: 'accept',
  269.                     result: 'Coins have been added to your balance'
  270.                 });
  271.             } else if(trade.response.offer.trade_offer_state == 7) {
  272.                 res.json({
  273.                     success: true,
  274.                     result: 'You are declined trade',
  275.                     action: 'cross'
  276.                 });
  277.             } else {
  278.                 res.json({
  279.                     success: false,
  280.                     error: 'You are not accept trade'
  281.                 });
  282.             }
  283.         }
  284.     });
  285. });
  286.  
  287. function cancelTrade(offerid) {
  288.     offers.declineOffer({
  289.         tradeOfferId: offerid
  290.     }, function(err, log) {
  291.         if (err) {
  292.             logger.error('Не смогли отменить трейд #'+offerid);
  293.             logger.debug(err);
  294.             return;
  295.         }
  296.         logger.debug(log);
  297.         logger.trace('Offer #'+offerid+' canceled');
  298.     });
  299. }
  300.  
  301. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  302.     if((err) || (!res[0])) {
  303.         logger.error('Cant find account');
  304.         process.exit(0);
  305.         return;
  306.     }
  307.     account = res[0];
  308.     app.listen(4231+account.id);
  309.     logger.trace('We got account info');
  310.     account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  311.     account.auth = false;
  312.     logger.debug(account);
  313.     community.login(account, login);
  314. });
  315.  
  316. community.on('confKeyNeeded', function(tag, callback) {
  317.     callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  318. });
  319.  
  320. community.on('newConfirmation', function(confirmation) {
  321.     var time = time();
  322.     var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  323.     confirmation.respond(time, key, true, function(err) {
  324.         if(err) {
  325.             logger.error('Error on mobile auth');
  326.             logger.debug(err);
  327.             return;
  328.         }
  329.         logger.trace('Trade sucesfully confirmed');
  330.     });
  331. });
  332.  
  333. function query(sql, callback) {
  334.     if (typeof callback === 'undefined') {
  335.         callback = function() {};
  336.     }
  337.     pool.getConnection(function(err, connection) {
  338.         if(err) return callback(err);
  339.         logger.info('DB connection ID: '+connection.threadId);
  340.         connection.query(sql, function(err, rows) {
  341.             if(err) return callback(err);
  342.             connection.release();
  343.             return callback(null, rows);
  344.         });
  345.     });
  346. }
  347.  
  348. function login(err, sessionID, cookies, steamguard) {
  349.     if(err) {
  350.         logger.error('Auth error');
  351.         logger.debug(err);
  352.         if(err.message == "SteamGuardMobile") {
  353.             account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  354.             logger.warn('Error in auth: '+account.twoFactorCode);
  355.             setTimeout(function() {
  356.                 community.login(account, login);
  357.             }, 5000);
  358.             return;
  359.         }
  360.         process.exit(0);
  361.     }
  362.     logger.trace('Sucesfully auth');
  363.     account.sessionID = sessionID;
  364.     account.cookies = cookies;
  365.     community.getWebApiKey('csgobananas.com', webApiKey);
  366.     community.startConfirmationChecker(10000, account.identity_secret);
  367. }
  368.  
  369. function webApiKey(err, key) {
  370.     if(err) {
  371.         logger.error('Cant make apikey')
  372.         logger.debug(err);
  373.         process.exit(0);
  374.         return;
  375.     }
  376.     account.key = key;
  377.     logger.trace('API key bot '+account.accountName+' '+account.key);
  378.     offersSetup();
  379.     community.loggedIn(checkLoggedIn);
  380. }
  381.  
  382. function offersSetup() {
  383.     logger.trace('Loaded steam-tradeoffers');
  384.     offers.setup({
  385.         sessionID: account.sessionID,
  386.         webCookie: account.cookies,
  387.         APIKey: account.key
  388.     });
  389. }
  390.  
  391. function checkLoggedIn(err, loggedIn, familyView) {
  392.     if((err) || (!loggedIn)) {
  393.         logger.error('We arent logged in')
  394.         process.exit(0);
  395.     } else {
  396.         logger.trace('Logged in');
  397.         account.auth = true;
  398.     }
  399. }
  400.  
  401. function makecode() {
  402.     var text = "";
  403.     var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  404.  
  405.     for(var i=0; i < 5; i++)
  406.         text += possible.charAt(Math.floor(Math.random() * possible.length));
  407.  
  408.     return text;
  409. }
  410.  
  411. function time() {
  412.     return parseInt(new Date().getTime()/1000)
  413. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top