'use strict'; //////////////////////////////////////////////////////////////// var backend_integration = require("./backend_integration") var trade_checker_imp = require("./trade_checker") var backend = new backend_integration(); var trade_checker = new trade_checker_imp(); const VERSION = require("./version"); console.log(`Build date: ${VERSION}`); async function sync(timeout) { let sleep = function sleep (howLong) { return new Promise(function (resolve) { setTimeout(() => {resolve()}, howLong) }) } while (true) { try { await backend.pulse().then(() => { if (backend.up) { backend.getPrices(trade_checker); } }); } catch (e) { console.log(e); } finally { if (!backend.up) {console.log(`wait ${timeout} seconds after destroy, where pulse failed`)} await sleep(timeout * 1000); if (!backend.up) {process.exit(228);} } } } sync(60); ///////////////////////////////////////////////////////////////// var SteamUser = require('steam-user'); var SteamCommunity = require('steamcommunity'); var SteamTradeOfferManager = require('steam-tradeoffer-manager'); var SteamTOTP = require('steam-totp'); ///////////////////////////////////////////////////////////////// var client = new SteamUser(); var community = new SteamCommunity(); var manager = new SteamTradeOfferManager({ steam: client, language: 'en' }); console.log('connecting to steam account...'); const config = require("./auth_data/auth.json") client.logOn({ accountName: config.login, password: config.password, twoFactorCode: SteamTOTP.getAuthCode(config.shared_secret) }); ///////////////////////////////////////////////////////////////// client.on('loggedOn', function(details, parental) { console.log('SteamID64 :', client.steamID.getSteamID64()); client.setPersona(SteamUser.EPersonaState.Online); }); client.on('webSession', function(sessionID, cookies) { manager.setCookies(cookies, function(err) { if (err) { console.log(err); process.exit(1); // Fatal error since we couldn't get our API key return; } console.log("Web session created!"); }); community.setCookies(cookies); }); client.on('error', function(error) { console.log('connection error\n'); console.log(error); }); //////////////////////////////////////////////////////////////////// function calculate(offer) { if (offer.state !== SteamTradeOfferManager.ETradeOfferState.Active) { console.log(`[${offer.id}] trade have not active stats`) return false; } if (offer.itemsToGive.length>0) { console.log(`[${offer.id}] partner wanna get bot items, decine trade`); return false; } if (offer.itemsToReceive.length>50) { console.log(`[${offer.id}] cannot accept trade with more 50 items`) return false; } const seconds = trade_checker.Items2Seconds(offer.itemsToReceive); if (seconds === 0) { console.log(`[${offer.id}] cannot accept trade not valid items`) return false; } return seconds > 0; } manager.on('newOffer', function(offer) { console.log(`[${offer.id}] Incoming trade from ${offer.partner.getSteamID64()}`); if (calculate(offer)) { console.log(`[${offer.id}] Try accept trade`); offer.accept(false, function(error, status) {}); } else { console.log(`[${offer.id}] Try decline trade`); offer.decline(function(error, status) {}) } }) manager.on('receivedOfferChanged', function(offer, oldState) { console.log(`[${offer.id}] changed: ${SteamTradeOfferManager.ETradeOfferState[oldState]} -> ${SteamTradeOfferManager.ETradeOfferState[offer.state]}`); if (offer.state === SteamTradeOfferManager.ETradeOfferState.Accepted) { offer.getExchangeDetails((err, status, tradeInitTime, receivedItems, sentItems) => { const seconds = trade_checker.Items2Seconds(receivedItems); if (seconds > 0) { const extra = `keys=${trade_checker.mannco_key(receivedItems)};metal=${trade_checker.pure_metal(receivedItems)};`; backend.vip(offer.partner.getSteamID64(), seconds, extra, offer.id); } else { console.log(`[${offer.id}] Trade accepted, but vip not gived!`); } }) } });