Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var mysql = require('mysql');
- var SteamUser = require('steam-user');
- var TradeOfferManager = require('steam-tradeoffer-manager');
- var SteamTotp = require('steam-totp');
- var SteamCommunity = require('steamcommunity');
- var fs = require('fs');
- var request = require('request');
- var config = require('./config.json');
- var CryptoJS = require("crypto-js");
- var log4js = require('log4js');
- var express = require('express');
- var app = express();
- var community = new SteamCommunity();
- var client = new SteamUser();
- var manager = new TradeOfferManager({
- steam: client,
- domain: 'localhost',
- language: 'en'
- });
- var server = require('http').createServer();
- var io = require('socket.io')(server);
- server.listen(2052);
- updateLog();
- function updateLog() {
- log4js.configure({
- appenders: {
- out:{ type: 'console' },
- app:{ type: 'file', filename: 'logs/bot/bot'+time()+'.log' }
- },
- categories: {
- default: { appenders: [ 'out', 'app' ], level: 'all' }
- }
- });
- setTimeout(function(){
- updateLog();
- }, 24 * 3600 * 1000);
- }
- var logger = log4js.getLogger();
- var pool = mysql.createPool({
- database: config.database["database"],
- host: config.database["host"],
- user: config.database["user"],
- password: config.database["password"]
- });
- process.on('uncaughtException', function (err) {
- logger.trace('Strange error');
- logger.debug(err);
- });
- //GAME INFO
- var AppID = config.optionsBot.AppID;
- var ContextID = config.optionsBot.ContextID;
- var proxies = config.proxies;
- var delayPrice = config.optionsBot.delayPrice;//minutes
- var minItemDeposit = config.optionsBot.minItemDeposit;//$
- var minDeposit = config.optionsBot.minDeposit; //$
- var minWithdraw = config.optionsBot.minWithdraw;//$
- var offers = {};
- var deposits = {};
- var withdraws = {};
- var invUserD = {};
- var invUserW = {};
- var waitDeposit = {};
- var waitWithdraw = {};
- var timeBetween = config.optionsBot.timeBetween; //minutes between deposits and withdraws
- //Polling Steam and Logging On
- client.logOn({
- accountName: config.bots.username,
- password: config.bots.password,
- twoFactorCode: SteamTotp.generateAuthCode(config.bots.sharedSecret)
- });
- //CONNECT
- var users = {};
- io.on('connection', function(socket) {
- var user = false;
- socket.on('hash', function(m) {
- pool.query('SELECT `steamid`, `name`, `avatar`, `tradeLink`, `balance`, `banTrade`, `rank` FROM users WHERE `hash` = ' + pool.escape(m.hash), function(err, row) {
- if((err) || (!row.length)){
- return socket.disconnect();
- }else{
- user = row[0];
- user.type = m.type;
- socket.join(user.steamid);
- users[user.steamid] = {
- steamid: user.steamid,
- avatar: user.avatar,
- name: user.name,
- tradeLink: user.tradeLink,
- socket: socket
- }
- socket.emit('message', {
- type: 'hello',
- balance: user.balance,
- withdraw: config.optionsBot.withdrawEnable
- });
- if(m.type == 'deposit'){
- getMyInv(user, socket);
- if(deposits[user.steamid] !== undefined && deposits[user.steamid]['active']){
- if(offers[deposits[user.steamid]['id']] !== undefined){
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'sent',
- code: offers[deposits[user.steamid]['id']]['code'],
- id: deposits[user.steamid]['id'],
- bot: deposits[user.steamid]['bot']
- });
- }
- }
- } else if(m.type == 'withdraw'){
- getBotInv(user, socket);
- if(withdraws[user.steamid] !== undefined && withdraws[user.steamid]['active']){
- if(offers[withdraws[user.steamid]['id']] !== undefined){
- if(offers[withdraws[user.steamid]['id']]['confirmed']){
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'sent',
- code: offers[withdraws[user.steamid]['id']]['code'],
- id: withdraws[user.steamid]['id'],
- bot: withdraws[user.steamid]['bot']
- });
- }else{
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'confirm',
- code: offers[withdraws[user.steamid]['id']]['code'],
- id: withdraws[user.steamid]['id'],
- bot: withdraws[user.steamid]['bot']
- });
- }
- }
- }
- }
- }
- });
- });
- socket.on('message', function(m) {
- if(!user) return;
- if(m.type == 'userInv'){
- if(user.type == 'deposit'){
- return getMyInv(user, socket);
- } else if(user.type == 'withdraw'){
- return getBotInv(user, socket);
- }
- return;
- }
- if(user.banTrade == 1){
- socket.emit('message', {
- type: 'error',
- enable: false,
- error: 'Error: You are banned to trade!'
- });
- return;
- }
- if(user.rank == 8 || user.rank == 5) {
- // YOUTUBER OR STREAMER
- socket.emit('message', {
- type: 'error',
- enable: false,
- error: 'Error: You dont have permission to trade because you have test coins!'
- });
- return;
- }
- if(m.type == 'deposit') return deposit(m.items, user, socket);
- if(m.type == 'withdraw') return withdraw(m.items, user, socket);
- });
- socket.on('disconnect', function(m) {
- delete users[user.steamid];
- });
- });
- //GET BALANCE
- function getBalance(steamid) {
- pool.query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(steamid), function(err, row) {
- if((err) || (!row.length)) {
- logger.error('Failed to load your balance');
- logger.debug(err);
- return;
- }
- io.sockets.in(steamid).emit('message', {
- type: 'balance',
- balance: row[0].balance
- });
- });
- }
- //GETTING PRICES
- var priceUrl = 'https://api.csgofast.com/price/all';
- function getPriceList() {
- request(priceUrl, function(dataAndEvents, r, actual) {
- ok = JSON.parse(actual);
- if (200 != r.statusCode) {
- if (fs.existsSync("/var/Bot/jackpot/prices.json")) {
- ok = JSON.parse(fs.readFileSync("/var/Bot/prices.json"));
- logger.warn('[BOT] Loading Prices - Server sided prices loaded!');
- }
- } else {
- fs.writeFileSync("/var/Bot/prices.json", actual);
- logger.warn('[BOT] Loading Prices - API prices loaded!');
- }
- });
- }
- getPriceList();
- setInterval(getPriceList, delayPrice * 60 * 1000);
- //GET ITEM PRICE
- function getPriceItem(name){
- var priceItem = 0;
- if (name) {
- var prices = require('./prices.json');
- priceItem = parseInt(prices[name] * 1000);
- }
- return priceItem;
- }
- //GET ALL ITEMS
- var itemsWithdraw = {};
- getItems();
- function getItems(){
- pool.query('SELECT * FROM `items`', function(err, items) {
- if(err) {
- logger.error(err);
- return;
- }
- items.forEach(function(item){
- itemsWithdraw[item.itm_id] = {
- name: item.name,
- status: item.status
- }
- });
- logger.debug('[BOT] Items withdraw loaded!');
- });
- }
- //DEPOSIT
- function deposit(items, user, socket){
- socket.emit('message', {
- type: 'alert',
- alert: 'Preparing trade offer please wait...'
- });
- if(waitDeposit[user.steamid] !== undefined && waitDeposit[user.steamid]['time'] - time() > 0){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to wait '+timeBetween+' minutes between deposits!'
- });
- return;
- }
- if(user.type != 'deposit'){
- socket.emit('message', {
- type: 'error',
- error: 'Error: Invalid page!'
- });
- return;
- }
- waitDeposit[user.steamid] = {
- time: (time() + timeBetween * 60)
- }
- if(!user.tradeLink){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to set trade link!'
- });
- return;
- }
- if(deposits[user.steamid] !== undefined && deposits[user.steamid]['active']){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You have already a offer active!'
- });
- return;
- }
- if(items.length <= 0){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to deposit minimum 1 item!'
- });
- return;
- }
- var reqOpts = {
- url: 'http://steamcommunity.com/inventory/' + encodeURIComponent(user.steamid) + '/730/'+ '2?l=eng&count=5000'
- };
- var totalItems = [];
- var totalPrice = 0;
- request(reqOpts, function(err, response, body) {
- if(err) {
- logger.error(err);
- return;
- }
- if(response && response.statusCode == 200){
- var body = JSON.parse(body);
- var assets = body['assets'];
- var descriptions = body['descriptions'];
- if(!assets) return;
- //GET ITEMS
- assets.forEach(function(valuey, y) {
- descriptions.forEach(function(valuez, z) {
- if(valuey['classid'] == valuez['classid'] && valuey['instanceid'] == valuez['instanceid']){
- var isTradable = valuez['tradable'];
- if(isTradable == 1){
- if(/(Souvenir)/.exec(valuez['market_hash_name'])) return;
- if(getPriceItem(valuez['market_hash_name']) >= minItemDeposit * 1000){
- items.forEach(function(item){
- if(valuey['assetid'] == item){
- totalItems.push({
- id: valuez['classid']+'_'+valuez['instanceid'],
- name: valuez['market_hash_name'],
- image: valuez['icon_url']
- });
- totalPrice += getPriceItem(valuez['market_hash_name']);
- }
- });
- }
- }
- }
- });
- });
- //VERIFY
- if(totalItems.length != items.length){
- socket.emit('message', {
- type: 'error',
- error: 'Error: Invalids items in your offer. Please refresh your inventory!'
- });
- return;
- }
- if(totalPrice < minDeposit * 1000){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to deposit minimum '+minDeposit+'$!'
- });
- return;
- }
- var create = manager.createOffer(user.steamid, user.tradeLink.split('token=')[1]);
- items.forEach(function(item){
- create.addTheirItem({
- "appid": AppID,
- "contextid": ContextID,
- "assetid": item
- });
- });
- //SEND OFFER
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'process',
- code: code,
- id: create.id,
- bot: config.bots.botname
- });
- var code = makeCode();
- create.setMessage('CSGOKnight | Deposit | +'+totalPrice+' coins | Code '+code);
- create.send(function(err, status) {
- if(err){
- socket.emit('message', {
- type: 'error',
- error: 'Error: There was an error sending your trade offer. Please try again later.'
- });
- logger.error(err);
- return;
- }else{
- logger.debug('[BOT] Offer #' + create.id + " is " + status + " >> Deposit");
- offers[create.id] = {
- type: 'deposit',
- steamid: user.steamid,
- items: totalItems,
- total: totalPrice,
- status: status,
- code: code,
- confirmed: true
- };
- deposits[user.steamid] = {
- active: true,
- id: create.id,
- bot: config.bots.botname
- }
- //INSERT TRADE
- pool.query('INSERT INTO `trades` SET `type` = '+pool.escape('deposit')+', `user` = '+pool.escape(user.steamid)+', `tradeId` = '+pool.escape(create.id)+', `items` = '+pool.escape(items.join('/'))+', `amount` = '+parseInt(totalPrice)+', `code` = '+pool.escape(code)+', `time` = '+pool.escape(time())+', `status` = '+pool.escape(status), function(err) {
- if(err) {
- logger.error(err);
- return;
- }
- });
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'sent',
- code: code,
- id: create.id,
- bot: config.bots.botname
- });
- socket.emit('message', {
- type: 'success',
- success: 'Your deposit offer has been sent. Check offers tab from profile for more informations.'
- });
- }
- });
- }
- });
- }
- //WITHDRAW
- function withdraw(items, user, socket){
- if(config.optionsBot.withdrawEnable == false){
- socket.emit('message', {
- type: 'error',
- error: 'Error: The withdraw is unavailable at this moment. Try again later!'
- });
- return;
- }
- socket.emit('message', {
- type: 'alert',
- alert: 'Preparing trade offer please wait...'
- });
- if(waitWithdraw[user.steamid] !== undefined && waitWithdraw[user.steamid]['time'] - time() > 0){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to wait '+timeBetween+' minutes between withdraws!'
- });
- return;
- }
- if(user.type != 'withdraw'){
- socket.emit('message', {
- type: 'error',
- error: 'Error: Invalid page!'
- });
- return;
- }
- waitWithdraw[user.steamid] = {
- time: (time() + timeBetween * 60)
- }
- if(!user.tradeLink){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to set trade link!'
- });
- return;
- }
- if(withdraws[user.steamid] !== undefined && withdraws[user.steamid]['active']){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You have already a offer active!'
- });
- return;
- }
- if(items.length <= 0){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to withdraw minimum 1 item!'
- });
- return;
- }
- var totalItems = [];
- var totalPrice = 0;
- manager.loadInventory(AppID, ContextID, true, function(err0, myItems) {
- if(err0) {
- logger.error(err0);
- return;
- }
- //GET ITEMS
- myItems.forEach(function(item){
- var isTradable = item['tradable'];
- if(isTradable == 1){
- items.forEach(function(assetid){
- if(item['assetid'] == assetid){
- var itm_id = item['classid']+'_'+item['instanceid'];
- if(itemsWithdraw[itm_id] !== undefined){
- if(itemsWithdraw[itm_id]['status'] == 1){
- socket.emit('message', {
- type: 'error',
- error: 'Error: The item '+item['market_hash_name']+' is already in a offer. Please try again later!'
- });
- return;
- }
- totalItems.push({
- id: item['classid']+'_'+item['instanceid'],
- name: item['market_hash_name'],
- image: item['icon_url']
- });
- totalPrice += getPriceItem(item['market_hash_name']);
- }
- }
- });
- }
- });
- //VERIFY
- if(totalItems.length != items.length){
- socket.emit('message', {
- type: 'error',
- error: 'Error: Invalids items in your offer. Please refresh your inventory!'
- });
- return;
- }
- if(totalPrice < minWithdraw * 1000){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to withdraw minimum '+minWithdraw+'$!'
- });
- return;
- }
- pool.query('SELECT `balance`, `countDeposits`, `available` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err1, row1) {
- if((err1) || (!row1.length)) {
- logger.error('Failed to find DB');
- logger.debug(err1);
- socket.emit('message', {
- type: 'error',
- error: 'You are not DB'
- });
- return;
- }
- if(row1[0].countDeposits <= 0){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to deposit first minimum '+minDeposit+'$!'
- });
- return;
- }
- if(row1[0].available < totalPrice){
- socket.emit('message', {
- type: 'error',
- error: 'Error: You need to have withdraw available '+totalPrice+' coins. Need '+(totalPrice - row1[0].available)+'!'
- });
- return;
- }
- if(row1[0].balance >= totalPrice) {
- //EDIT BALANCE
- pool.query('UPDATE `users` SET `balance` = `balance` - '+parseInt(totalPrice)+', `available` = `available` - '+parseInt(totalPrice)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
- if(err2) {
- logger.error('Error in withdraw');
- logger.debug(err2);
- socket.emit('message', {
- type: 'error',
- error: 'You dont have enough points'
- });
- return;
- }
- var create = manager.createOffer(user.steamid, user.tradeLink.split('token=')[1]);
- items.forEach(function(item){
- create.addMyItem({
- "appid": AppID,
- "contextid": ContextID,
- "assetid": item
- });
- });
- //CREATE OFFER
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'process',
- code: code,
- id: create.id,
- bot: config.bots.botname
- });
- var code = makeCode();
- create.setMessage('CSGOKnight | Withdraw | -'+totalPrice+' coins | Code '+code);
- create.send(function(err3, status) {
- if(err3){
- socket.emit('message', {
- type: 'error',
- error: 'Error: There was an error sending your trade offer. Please try again later.'
- });
- logger.error(err);
- return;
- }else{
- logger.debug('[BOT] Offer #' + create.id + " is " + status + " << Withdraw");
- offers[create.id] = {
- type: 'withdraw',
- steamid: user.steamid,
- items: totalItems,
- total: totalPrice,
- status: status,
- code: code,
- confirmed: false
- };
- withdraws[user.steamid] = {
- active: true,
- id: create.id,
- bot: config.bots.botname
- }
- //INSERT TRADE
- pool.query('INSERT INTO `trades` SET `type` = '+pool.escape('withdraw')+', `user` = '+pool.escape(user.steamid)+', `tradeId` = '+pool.escape(create.id)+', `items` = '+pool.escape(items.join('/'))+', `amount` = '+parseInt(totalPrice)+', `code` = '+pool.escape(code)+', `time` = '+pool.escape(time())+', `status` = '+pool.escape(status), function(err4) {
- if(err4) {
- logger.error(err4);
- return;
- }
- });
- //INSERT ITEMS
- totalItems.forEach(function(item){
- pool.query('UPDATE `items` SET `status` = 1 WHERE `itm_id` = '+pool.escape(item.id), function(err5) {
- if(err5) {
- logger.error(err5);
- return;
- }
- });
- itemsWithdraw[item.id]['status'] = 1;
- });
- socket.emit('message', {
- type: 'checkOffer',
- mtype: 'confirm',
- code: code,
- id: create.id,
- bot: config.bots.botname
- });
- getBalance(user.steamid);
- socket.emit('message', {
- type: 'success',
- success: 'Your withdraw offer has been sent but need bot confirmation. Wait few moments!'
- });
- community.checkConfirmations();
- }
- });
- });
- } else {
- socket.emit('message', {
- type: 'error',
- error: 'You dont have any money'
- });
- }
- });
- });
- }
- //Offer handling
- function acceptOffer(offer) {
- offer.accept(function(err) {
- if (err) logger.error('Unable to accept offer: ' + err);
- community.checkConfirmations();
- logger.debug('[BOT] Offer #' + offer.id + " is accepted" );
- });
- }
- function declineOffer(offer) {
- offer.decline(function(err) {
- if (err) return logger.error('Unable to decline offer: ' + err);
- logger.debug('[BOT] Offer #' + offer.id + " is declined" );
- });
- }
- //
- client.on('loggedOn', function(details, parental) {
- logger.warn("[BOT] Signed in!");
- client.setPersona(SteamUser.Steam.EPersonaState.Online);
- });
- client.on('webSession', function(sessionID, cookies) {
- manager.setCookies(cookies);
- community.setCookies(cookies);
- community.startConfirmationChecker(config.optionsBot.confirmationInterval, config.bots.identitySecret);
- logger.warn("[BOT] Session cookies set!");
- });
- manager.on('sentOfferChanged', function(offer) {
- if(offer.state == 3){
- if(offers.hasOwnProperty(offer.id)){
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'success',
- success: 'The trade offer has been accepted.'
- });
- if(offers[offer.id]['type'] == 'deposit' && offers[offer.id]['status'] == 'sent'){
- if(offer.itemsToGive.length == 0 && offer.itemsToReceive.length > 0 ){
- //EDIT TRADE
- pool.query('UPDATE `trades` SET `status` = '+pool.escape('accepted')+' WHERE `tradeId` = '+pool.escape(offer.id), function(err1) {
- if(err1) {
- logger.error(err1);
- return;
- }
- offers[offer.id]['status'] = 'accepted';
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'checkOffer',
- mtype: 'accepted',
- code: offers[offer.id]['code'],
- id: offer.id,
- bot: deposits[offers[offer.id]['steamid']]['bot']
- });
- //EDIT ITEMS
- offers[offer.id]['items'].forEach(function(item){
- pool.query('INSERT INTO `items` SET `tradeD` = '+pool.escape(offer.id)+', `name` = '+pool.escape(item.name)+', `img` = '+pool.escape(item.image)+', `itm_id` = '+pool.escape(item.id)+', `time` = '+pool.escape(time()), function(err2) {
- if(err2) {
- logger.error(err2);
- return;
- }
- });
- itemsWithdraw[item.id] = {
- name: item.name,
- status: 0
- }
- });
- //EDIT BALANCE
- pool.query('UPDATE `users` SET `balance` = `balance` + '+parseInt(offers[offer.id]['total'])+', `countDeposits` = `countDeposits` + 1, `totalDeposits` = `totalDeposits` + '+parseInt(offers[offer.id]['total'])+' WHERE `steamid` = '+pool.escape(offers[offer.id]['steamid']), function(err3) {
- if(err3) {
- logger.error(err3);
- return;
- }
- getBalance(offers[offer.id]['steamid']);
- if(deposits[offers[offer.id]['steamid']] !== undefined){
- deposits[offers[offer.id]['steamid']]['active'] = false;
- }
- logger.debug('[BOT] Offer #' + offer.id + " is accepted >> Deposit");
- });
- });
- }
- } else if(offers[offer.id]['type'] == 'withdraw' && offers[offer.id]['status'] == 'pending'){
- if(offer.itemsToGive.length > 0 && offer.itemsToReceive.length == 0 ){
- //EDIT TRADE
- pool.query('UPDATE `trades` SET `status` = '+pool.escape('accepted')+' WHERE `tradeId` = '+pool.escape(offer.id), function(err1) {
- if(err1) {
- logger.error(err1);
- return;
- }
- offers[offer.id]['status'] = 'accepted';
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'checkOffer',
- mtype: 'accepted',
- code: offers[offer.id]['code'],
- id: offer.id,
- bot: withdraws[offers[offer.id]['steamid']]['bot']
- });
- //DELETE ITEMS
- offers[offer.id]['items'].forEach(function(item){
- pool.query('DELETE FROM `items` WHERE `itm_id` = '+pool.escape(item.id), function(err2) {
- if(err2) {
- logger.error(err2);
- return;
- }
- });
- delete itemsWithdraw[item.id];
- });
- if(withdraws[offers[offer.id]['steamid']] !== undefined){
- withdraws[offers[offer.id]['steamid']]['active'] = false;
- }
- logger.debug('[BOT] Offer #' + offer.id + " is accepted << Withdraw");
- });
- }
- }
- }
- } else if(offer.state != 2){
- if(offers.hasOwnProperty(offer.id)){
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'error',
- error: 'The trade offer has been rejected.'
- });
- offer.decline();
- if(offers[offer.id]['type'] == 'deposit' && offers[offer.id]['status'] == 'sent'){
- //EDIT TRADE
- pool.query('UPDATE `trades` SET `status` = '+pool.escape('declined')+' WHERE `tradeId` = '+pool.escape(offer.id), function(err1) {
- if(err1) {
- logger.error(err1);
- return;
- }
- offers[offer.id]['status'] = 'declined';
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'checkOffer',
- mtype: 'declined',
- code: offers[offer.id]['code'],
- id: offer.id,
- bot: deposits[offers[offer.id]['steamid']]['bot']
- });
- if(deposits[offers[offer.id]['steamid']] !== undefined){
- deposits[offers[offer.id]['steamid']]['active'] = false;
- }
- logger.debug('[BOT] Offer #' + offer.id + " is declined >> Deposit");
- });
- } else if(offers[offer.id]['type'] == 'withdraw' && offers[offer.id]['status'] == 'pending'){
- //EDIT TRADE
- pool.query('UPDATE `trades` SET `status` = '+pool.escape('declined')+' WHERE `tradeId` = '+pool.escape(offer.id), function(err1) {
- if(err1) {
- logger.error(err1);
- return;
- }
- offers[offer.id]['status'] = 'declined';
- io.sockets.in(offers[offer.id]['steamid']).emit('message', {
- type: 'checkOffer',
- mtype: 'declined',
- code: offers[offer.id]['code'],
- id: offer.id,
- bot: withdraws[offers[offer.id]['steamid']]['bot']
- });
- //EDIT BALANCE
- pool.query('UPDATE `users` SET `balance` = `balance` + '+parseInt(offers[offer.id]['total'])+', `available` = `available` + '+parseInt(offers[offer.id]['total'])+' WHERE `steamid` = '+pool.escape(offers[offer.id]['steamid']), function(err2) {
- if(err2) {
- logger.error(err2);
- return;
- }
- getBalance(offers[offer.id]['steamid']);
- offers[offer.id]['items'].forEach(function(item){
- pool.query('UPDATE `items` SET `status` = 0 WHERE `itm_id` = '+pool.escape(item.id), function(err3) {
- if(err3) {
- logger.error(err3);
- return;
- }
- });
- itemsWithdraw[item.id]['status'] = 0;
- });
- if(withdraws[offers[offer.id]['steamid']] !== undefined){
- withdraws[offers[offer.id]['steamid']]['active'] = false;
- }
- logger.debug('[BOT] Offer #' + offer.id + " is declined << Withdraw");
- });
- });
- }
- }
- }
- });
- manager.on('newOffer', function(offer) {
- declineOffer(offer);
- });
- community.on("confirmationAccepted", function(trade) {
- logger.debug("[BOT] Successfully confirmed the offer #"+ trade.creator);
- if(offers[trade.creator] !== undefined){
- offers[trade.creator]['confirmed'] = true;
- io.sockets.in(offers[trade.creator]['steamid']).emit('message', {
- type: 'checkOffer',
- mtype: 'sent',
- code: offers[trade.creator]['code'],
- id: trade.creator,
- bot: config.bots.botname
- });
- io.sockets.in(offers[trade.creator]['steamid']).emit('message', {
- type: 'success',
- success: 'Your withdraw offer has been sent. Check offers tab from profile for more informations.'
- });
- }
- });
- community.on("confKeyNeeded", function(deepDataAndEvents, updateFunc) {
- logger.warn("[BOT] Need confKey");
- var time = Math.floor(Date.now() / 1000);
- updateFunc(null, time, SteamTotp.getConfirmationKey(config.bots.identitySecret, time, deepDataAndEvents));
- });
- community.on("sessionExpired", function(err) {
- logger.error('[BOT] Session expired, logging in...');
- community.stopConfirmationChecker();
- client.webLogOn();
- });
- //
- //Refresh polldata.json
- manager.on('pollData', function(pollData) {
- fs.writeFile('polldata.json', JSON.stringify(pollData));
- });
- if (fs.existsSync('polldata.json')) {
- manager.pollData = JSON.parse(fs.readFileSync('polldata.json'));
- }
- //
- //GET USER INV
- function getMyInv(user, socket){
- if(invUserD[user.steamid] !== undefined && invUserD[user.steamid]['time'] - time() > 0){
- socket.emit('message', {
- type: 'alert',
- alert: 'Inventory loaded from cache!'
- });
- socket.emit('message', {
- type: 'waitInv',
- time: (invUserD[user.steamid]['time'] - time())
- });
- socket.emit('message', {
- type: 'userInv',
- items: invUserD[user.steamid]['items']
- });
- return;
- }
- var reqOpts = {
- url: 'http://steamcommunity.com/inventory/' + encodeURIComponent(user.steamid) + '/' + AppID + '/' + ContextID + '?l=eng&count=5000'
- };
- request(reqOpts, function(err, response, body) {
- if(err) {
- logger.error(err);
- return;
- }
- if(response && response.statusCode == 200){
- var body = JSON.parse(body);
- var assets = body['assets'];
- var descriptions = body['descriptions'];
- if(!assets) return;
- var totalItems = [];
- assets.forEach(function(valuey, y) {
- descriptions.forEach(function(valuez, z) {
- if(valuey['classid'] == valuez['classid'] && valuey['instanceid'] == valuez['instanceid']){
- var isTradable = valuez['tradable'];
- if(isTradable == 1){
- if(/(Souvenir)/.exec(valuez['market_hash_name'])) return;
- if(getPriceItem(valuez['market_hash_name']) >= minItemDeposit * 1000){
- //Link Inspect Item
- var view = '';
- if(valuez['actions'] !== undefined){
- view = valuez['actions'][0].link;
- view = view.replace("%owner_steamid%", user.steamid);
- view = view.replace("%assetid%", valuey['assetid']);
- }
- //Color Item
- var color = '';
- if(valuez['tags'][4] !== undefined) color = valuez['tags'][4].color;
- //Stickers Item
- var stickers = [];
- var date = valuez['descriptions'];
- date.forEach(function(itm){
- if(itm.value !== undefined){
- var allStickers = itm.value;
- if(/(sticker)/.exec(allStickers)) {
- var allStickers = allStickers.split('src="');
- delete allStickers[0];
- var names = allStickers[allStickers.length - 1].split('<br>Sticker: ')[1].split('</center>')[0];
- names = names.split(', ');
- var i = 0;
- allStickers.forEach(function(sticker){
- stickers.push({
- 'image': sticker.split('"')[0],
- 'name': names[i]
- });
- i++;
- });
- }
- }
- })
- totalItems.push({
- 'id': valuey['assetid'],
- 'name': valuez['market_hash_name'],
- 'price': getPriceItem(valuez['market_hash_name']),
- 'image': valuez['icon_url'],
- 'view': view,
- 'color': color,
- 'stickers': stickers
- });
- }
- }
- }
- });
- });
- socket.emit('message', {
- type: 'userInv',
- items: totalItems
- });
- if(totalItems.length > 0){
- socket.emit('message', {
- type: 'alert',
- alert: 'Inventory loaded!'
- });
- }else{
- socket.emit('message', {
- type: 'error',
- error: 'No items in inventory!'
- });
- }
- invUserD[user.steamid] = {
- time: (time() + 60),
- items: totalItems
- }
- socket.emit('message', {
- type: 'waitInv',
- time: 60
- });
- }
- });
- }
- //GET BOT INV
- function getBotInv(user, socket){
- if(invUserW[user.steamid] !== undefined && invUserW[user.steamid]['time'] - time() > 0){
- socket.emit('message', {
- type: 'alert',
- alert: 'Inventory loaded from cache!'
- });
- socket.emit('message', {
- type: 'waitInv',
- time: (invUserW[user.steamid]['time'] - time())
- });
- socket.emit('message', {
- type: 'userInv',
- items: invUserW[user.steamid]['items']
- });
- return;
- }
- manager.loadInventory(AppID, ContextID, true, function(err, myItems) {
- var totalItems = [];
- myItems.forEach(function(item){
- var isTradable = item['tradable'];
- if(isTradable == 1){
- var itm_id = item['classid']+'_'+item['instanceid'];
- if(itemsWithdraw[itm_id] !== undefined){
- if(itemsWithdraw[itm_id]['status'] == 0){
- //Link Inspect Item
- var view = '';
- if(item['actions'] !== undefined){
- view = item['actions'][0].link;
- view = view.replace("%owner_steamid%", user.steamid);
- view = view.replace("%assetid%", item['assetid']);
- }
- //Color Item
- var color = '';
- if(item['tags'][4] !== undefined) color = item['tags'][4].color;
- //Stickers Item
- var stickers = [];
- var date = item['descriptions'];
- date.forEach(function(itm){
- if(itm.value !== undefined){
- var allStickers = itm.value;
- if(/(sticker)/.exec(allStickers)) {
- var allStickers = allStickers.split('src="');
- delete allStickers[0];
- var names = allStickers[allStickers.length - 1].split('<br>Sticker: ')[1].split('</center>')[0];
- names = names.split(', ');
- var i = 0;
- allStickers.forEach(function(sticker){
- stickers.push({
- 'image': sticker.split('"')[0],
- 'name': names[i]
- });
- i++;
- });
- }
- }
- })
- totalItems.push({
- 'id': item['assetid'],
- 'name': item['market_hash_name'],
- 'price': getPriceItem(item['market_hash_name']),
- 'image': item['icon_url'],
- 'view': view,
- 'color': color,
- 'stickers': stickers
- });
- }
- }
- }
- });
- socket.emit('message', {
- type: 'userInv',
- items: totalItems
- });
- if(totalItems.length > 0){
- socket.emit('message', {
- type: 'alert',
- alert: 'Inventory loaded!'
- });
- }else{
- socket.emit('message', {
- type: 'error',
- error: 'No items in inventory!'
- });
- }
- invUserW[user.steamid] = {
- time: (time() + 60),
- items: totalItems
- }
- socket.emit('message', {
- type: 'waitInv',
- time: 60
- });
- });
- }
- //
- function time(){
- return parseInt(new Date().getTime()/1000);
- }
- function makeCode() {
- var text = "";
- var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
- for(var i=0; i < 6; i++)
- text += possible.charAt(Math.floor(Math.random() * possible.length));
- return text;
- }
- function getProxy(){
- return "http://" + proxies[random(0,proxies.length-1)];
- }
- function random(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- }
- function query(sql, callback) {
- if (typeof callback === 'undefined') {
- callback = function() {};
- }
- pool.getConnection(function(err, connection) {
- if(err) return callback(err);
- connection.query(sql, function(err, rows) {
- if(err) return callback(err);
- connection.release();
- return callback(null, rows);
- });
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement