Advertisement
Guest User

Untitled

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