Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var config = require('./config.js'),
- id = process.argv[process.argv.length-2],
- ip = process.argv[process.argv.length-1],
- redis = require('redis'),
- requestify = require('requestify'),
- Steam = require('steam-client'),
- SteamUser = require('steam-user'),
- SteamCommunity = require('steamcommunity'),
- SteamTotp = require('steam-totp'),
- TradeOfferManager = require('steam-tradeoffer-manager'),
- fs = require('fs');
- process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
- if(typeof config.accounts[id] == "undefined"){
- console.error('invalid id');
- process.exit(1);
- return;
- }
- console.log(`Starting bot #${id}`);
- var rClient = redis.createClient(config.connection.redis);
- var SteamClient = new Steam.CMClient(Steam.EConnectionProtocol.TCP);
- SteamClient.bind(ip);
- var client = new SteamUser(SteamClient);
- var manager = new TradeOfferManager({
- "steam": client,
- "domain": config.web.domain,
- "language": "ru",
- "cancelTime": 300000,
- "cancelOfferCount": 20,
- "cancelOfferCountMinAge": 60000,
- });
- var webSession = false;
- var community = new SteamCommunity();
- var logOnOptions = function(){
- return {
- "accountName": config.accounts[id].username,
- "password": config.accounts[id].password,
- "twoFactorCode": SteamTotp.getAuthCode(config.accounts[id].shared_secret),
- "rememberPassword": true,
- }
- };
- if (fs.existsSync(`./polldata/${id}.json`)) manager.pollData = JSON.parse(fs.readFileSync(`./polldata/${id}.json`));
- community.on('debug', function(data) {
- console.log(data);
- });
- if(!config.accounts[id].ban) client.logOn(logOnOptions());
- client.on('loggedOn', function() {
- console.log("Logged into Steam! ip: " + client.publicIP);
- console.log('Steam server: ' + SteamClient.remoteAddress);
- client.setPersona(SteamUser.Steam.EPersonaState.Online, "CSGF #" + id + " | " + config.accounts[id].username.toUpperCase());
- client.gamesPlayed(730);
- client.addFriend(config.admins[0], function(err, name){});
- });
- client.on('error', function(err) {
- var now = new Date();
- console.error(now + ' | ERR | ' + err.msg);
- console.error(err);
- });
- client.on('disconnected', function(eresult, msg) {
- var now = new Date();
- console.error(now + ' | DISCONNECTED | ' + msg);
- console.error(eresult, msg);
- });
- client.on('webSession', function(sessionID, cookies) {
- community.setCookies(cookies);
- manager.setCookies(cookies, function(err) {
- if (err) {
- console.error(err);
- process.exit(1);
- return;
- }
- console.log("Got API key: " + manager.apiKey);
- /*manager.getInventoryContents(config.settings.appid, 2, true, function(err, inventory) {
- if (err) {
- console.error('getInventoryContents: ' + err.message);
- checkErr(err.message);
- return;
- }
- console.log("Found " + inventory.length + " CS:GO items");
- });*/
- setTimeout(function(){
- webSession = true;
- console.log('webSession = ' + sessionID);
- }, 1000);
- });
- });
- var conf_proceed = false;
- var Confirmation = function(offer, ecount){
- if(conf_proceed){
- setTimeout(function(){Confirmation(offer, ecount)}, 10000);
- } else {
- conf_proceed = true;
- console.log(`Offer #${offer.id} requires confirmation`);
- community.acceptConfirmationForObject(config.accounts[id].identity_secret, offer.id, function(err) {
- if (err) {
- console.error('Confirming offer #' + offer.id + ' error: ' + err.msg);
- if(ecount < 5){
- setTimeout(function(){Confirmation(offer, ecount + 1)}, 10000);
- } else {
- offer.decline();
- }
- } else {
- console.log(`Offer #${offer.id} confirmed`);
- }
- conf_proceed = false;
- });
- }
- }
- manager.on('newOffer', function(offer) {
- console.log("New offer #" + offer.id + " from " + offer.partner.getSteamID64());
- if(config.admins.indexOf(offer.partner.getSteamID64()) != -1){
- offer.accept(true, function(err) {
- if (err) {
- console.error("Offer #" + offer.id + " unable to accept offer: " + err.message);
- checkErr(err.message);
- } else {
- Confirmation(offer, 0);
- console.log("Offer #" + offer.id + " accepted");
- }
- });
- }
- });
- manager.on('receivedOfferChanged', function(offer, oldState) {
- console.log(`Offer #${offer.id} changed: ${TradeOfferManager.ETradeOfferState[oldState]} -> ${TradeOfferManager.ETradeOfferState[offer.state]}`);
- parseOffer(offer);
- });
- manager.on('sentOfferChanged', function(offer, oldState) {
- console.log(`Offer #${offer.id} changed: ${TradeOfferManager.ETradeOfferState[oldState]} -> ${TradeOfferManager.ETradeOfferState[offer.state]} | ${oldState} -> ${offer.state}`);
- rClient.rpush(config.rchannels(id).complete, JSON.stringify({offer: offer}), function(err) {
- console.log(`Offer #${offer.id} added to complete list`);
- parseOffer(offer);
- });
- });
- manager.on('pollData', function(pollData) {
- fs.writeFile(`./polldata/${id}.json`, JSON.stringify(pollData), function() {});
- });
- function parseOffer(offer){
- if (offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
- offer.getReceivedItems(function(err, items) {
- if (err) {
- console.error(`Offer #${offer.id} Couldn't get received items: ${err.message}`);
- checkErr(err.message);
- rClient.rpush(config.rchannels(id).trecheck, JSON.stringify(offer), function(err) {
- console.log(`Offer #${offer.id} added to trecheck list`);
- });
- } else {
- if(items.length){
- var accepted = {
- account: offer.partner.getSteamID64(),
- id: offer.id,
- items: JSON.stringify(items),
- }
- rClient.rpush(config.rchannels(id).accepted, JSON.stringify(accepted), function(err) {
- console.log(`Offer #${offer.id} added to accepted list`);
- lastDepTime = Date.now();
- });
- }
- }
- });
- }
- }
- function sendtrade(itemsIdsFromMe, itemsIdsFromThem, trade, message, callback){
- var offer = manager.createOffer(trade);
- offer.getUserDetails(function(err, me, them) {
- if (err) {
- console.error("Unable to get users data: " + err.message);
- checkErr(err.message);
- callback(false, "Unable to get users data: " + err.message, 0);
- } else if (them.escrowDays > 0) {
- console.log("Partner don have escrow");
- callback(false, "Partner don have escrow", 0);
- } else {
- var itemsFromMe = [];
- for(var i = 0; i<itemsIdsFromMe.length;i++){
- itemsFromMe.push({
- assetid: itemsIdsFromMe[i].id,
- appid: itemsIdsFromMe[i].appid,
- contextid: 2,
- amount: 1
- });
- }
- offer.addMyItems(itemsFromMe);
- var itemsFromThem = [];
- for(var i = 0; i<itemsIdsFromThem.length;i++){
- itemsFromThem.push({
- assetid: itemsIdsFromThem[i].id,
- appid: itemsIdsFromThem[i].appid,
- contextid: 2,
- amount: 1
- });
- }
- offer.addTheirItems(itemsFromThem);
- offer.setMessage(message);
- offer.send(function(err, status) {
- if (err) {
- console.error(err.message);
- checkErr(err.message);
- callback(false, err.message, 0);
- } else if (status == 'pending') {
- Confirmation(offer, 0);
- callback(true, '', offer.id);
- } else {
- console.log(`Offer #${offer.id} sent successfully`);
- callback(true, '', offer.id);
- }
- });
- }
- });
- }
- var reCheckP = false,
- apCheckP = false,
- acCheckP = false,
- deCheckP = false,
- seCheckP = false,
- osCheckP = false,
- coCheckP = false,
- trCheckP = false,
- upCheckP = false,
- ciCheckP = false,
- Queue = setInterval(function(){queueProceed()}, 1000);
- lastDepTime = Date.now();
- function checkWorking(){
- if(config.accounts[id].ban) return;
- console.log('Checking activity! Last action: ' + (Date.now() - lastDepTime)/1000 + ' sec ago!');
- if(((Date.now() - lastDepTime)/1000) >= 3600 ){
- if(((Date.now() - lastDepTime)/1000) >= 3600 * 2){
- console.error('Unactive bot, Restarting');
- process.exit(1);
- }
- if(!reCheckP && !apCheckP && !acCheckP && !deCheckP && !seCheckP && !osCheckP && !coCheckP && !trCheckP && !upCheckP && !ciCheckP){
- console.error('Unactive bot, Relogining');
- webSession = false;
- client.relog();
- } else {
- console.log('reCheckP ' + reCheckP);
- console.log('apCheckP ' + apCheckP);
- console.log('acCheckP ' + acCheckP);
- console.log('deCheckP ' + deCheckP);
- console.log('seCheckP ' + seCheckP);
- console.log('osCheckP ' + osCheckP);
- console.log('coCheckP ' + coCheckP);
- console.log('trCheckP ' + trCheckP);
- console.log('upCheckP ' + upCheckP);
- console.log('ciCheckP ' + ciCheckP);
- }
- }
- }
- function checkErr(msg){
- if(msg == "Not Logged In"){
- webSession = false;
- client.relog();
- } else if(msg == 'Malformed response'){
- lastDepTime = Date.now() - 3650000;
- setTimeout(checkWorking, 10000);
- }
- }
- setInterval(function(){checkWorking()}, 300000);
- var queueProceed = function() {
- if(!webSession && !config.accounts[id].ban) return;
- rClient.llen(config.rchannels(id).osending, function(err, length) {
- if (length > 0 && !seCheckP) {
- seCheckP = true;
- rClient.lindex(config.rchannels(id).osending, 0, function(err, offerJson) {
- var offer = JSON.parse(offerJson);
- console.log("Sending offer# " + offer.id);
- rClient.lrem(config.rchannels(id).osending, 0, offerJson, function(err, data) {
- if(config.accounts[id].ban){
- rClient.rpush(config.rchannels(id).offrsent, JSON.stringify({id: offer.id, success: false, err: "Bot banned"}), function(err) {
- console.log('Error to send offer #' + offer.id);
- seCheckP = false;
- });
- } else {
- sendtrade(offer.itemsIdsFromMe, offer.itemsIdsFromThem, offer.trade, offer.message, function(success, err, newid) {
- if(success){
- rClient.rpush(config.rchannels(id).offrsent, JSON.stringify({id: offer.id, success: true, newid: newid}), function(err) {
- console.log('Offer #' + offer.id + ' added to offrsent list');
- lastDepTime = Date.now();
- });
- } else {
- rClient.rpush(config.rchannels(id).offrsent, JSON.stringify({id: offer.id, success: false, err: err}), function(err) {
- console.log('Error to send offer #' + offer.id);
- });
- }
- setTimeout(function(){
- seCheckP = false;
- }, 5000);
- });
- }
- });
- });
- }
- });
- rClient.llen(config.rchannels(id).offrsent, function(err, length) {
- if (length > 0 && !osCheckP) {
- osCheckP = true;
- console.log('Checking sent offers: ' + length);
- requestify.post(config.web.domain + '/api/checksent', {
- secretKey: config.web.secretKey,
- botid: id
- }).then(function(response) {
- osCheckP = false;
- }, function(response) {
- osCheckP = false;
- console.error('Error checking sent offers!');
- });
- }
- });
- rClient.llen(config.rchannels(id).received, function(err, length) {
- if (length > 0 && !reCheckP) {
- reCheckP = true;
- console.log('Checking received trades: ' + length);
- requestify.post(config.web.domain + '/api/checkreceived', {
- secretKey: config.web.secretKey,
- botid: id
- }).then(function(response) {
- reCheckP = false;
- }, function(response) {
- reCheckP = false;
- console.error('Error checking received trades!');
- });
- }
- });
- rClient.llen(config.rchannels(id).complete, function(err, length) {
- if (length > 0 && !coCheckP) {
- coCheckP = true;
- console.log('Checking complete trades: ' + length);
- requestify.post(config.web.domain + '/api/checkcomplete', {
- secretKey: config.web.secretKey,
- botid: id,
- }).then(function(response) {
- coCheckP = false;
- }, function(response) {
- coCheckP = false;
- console.error('Error checking received trades!');
- });
- }
- });
- rClient.llen(config.rchannels(id).approved, function(err, length) {
- if (length > 0 && !apCheckP) {
- apCheckP = true;
- rClient.lindex(config.rchannels(id).approved, 0, function(err, offerJson) {
- var toffer = JSON.parse(offerJson);
- console.log("Accepting offer: " + toffer.id);
- manager.getOffer(toffer.id, function(err, offer){
- if(err){
- console.log("Unable to get offer: " + toffer.id + " - " + err.message);
- rClient.lrem(config.rchannels(id).approved, 0, offerJson, function(err, data) {
- setTimeout(function(){
- apCheckP = false;
- }, 5000);
- });
- } else {
- offer.accept(true, function(err) {
- rClient.lrem(config.rchannels(id).approved, 0, offerJson, function(err, data) {
- setTimeout(function(){
- apCheckP = false;
- }, 5000);
- });
- if (err) {
- console.error("Unable to accept offer: " + err.message);
- checkErr(err.message);
- if(toffer.attempts < 3){
- toffer.attempts++;
- rClient.rpush(config.rchannels(id).approved, JSON.stringify(toffer), function(err) {
- console.log('Offer added to approved list')
- });
- }
- } else {
- console.log("Offer accepted");
- }
- });
- }
- });
- });
- }
- });
- rClient.llen(config.rchannels(id).accepted, function(err, length) {
- if (length > 0 && !acCheckP) {
- acCheckP = true;
- requestify.post(config.web.domain + '/api/checkaccepted', {
- secretKey: config.web.secretKey,
- botid: id
- }).then(function(response) {
- acCheckP = false;
- }, function(response) {
- acCheckP = false;
- console.error('Error checking accepted trades!');
- });
- }
- });
- rClient.llen(config.rchannels(id).declined, function(err, length) {
- if (length > 0 && !deCheckP) {
- deCheckP = true;
- rClient.lindex(config.rchannels(id).declined, 0, function(err, offerJson) {
- var oid = JSON.parse(offerJson);
- console.log("Declining offer: " + oid);
- manager.getOffer(oid, function(err, offer){
- if(err){
- console.log("Unable to get offer: " + oid + " - " + err.message);
- checkErr(err.message);
- rClient.lrem(config.rchannels(id).declined, 0, offerJson, function(err, data) {
- setTimeout(function(){
- deCheckP = false;
- }, 5000);
- });
- } else {
- offer.decline();
- rClient.lrem(config.rchannels(id).declined, 0, offerJson, function(err, data) {
- setTimeout(function(){
- deCheckP = false;
- }, 5000);
- });
- }
- });
- });
- }
- });
- rClient.llen(config.rchannels(id).trecheck, function(err, length) {
- if (length > 0 && !trCheckP) {
- trCheckP = true;
- rClient.lindex(config.rchannels(id).trecheck, 0, function(err, offerJson) {
- rClient.lrem(config.rchannels(id).trecheck, 0, offerJson, function(err, data) {
- var offer = JSON.parse(offerJson);
- console.log(`Offer #${offer.id} rechecking`);
- manager.getOffer(offer.id, function(err, offer){
- if(err){
- console.error("Couldn't get received items: " + err.message);
- checkErr(err.message);
- rClient.rpush(config.rchannels(id).trecheck, JSON.stringify(offer), function(err) {
- console.log('Offer added to trecheck list');
- });
- } else {
- parseOffer(offer);
- }
- });
- setTimeout(function(){
- trCheckP = false;
- }, 30000);
- });
- });
- }
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement