Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const
- SteamUser = require('steam-user'),
- Helper = require('./helpers.js'),
- si = require('steamid'),
- SteamCommunity = require('steamcommunity'),
- Inventory = require('./components/inventory.js'),
- CustomerHandler = require('./components/userhandler.js'),
- TradeOfferManager = require('steam-tradeoffer-manager'),
- socket = require( 'socket.io' ),
- express = require( 'express' ),
- http = require( 'http' ),
- app = express(),
- mysql = require('mysql'),
- server = http.createServer( app ),
- config=require('./data/config.json'),
- helper = new Helper(),
- SocketPort = 2052,
- SocketIp = "0.0.0.0", //104.207.147.170
- maxConnections = 3;
- require('events').EventEmitter.defaultMaxListeners = 20;
- let didLogin,
- LastLogin = {"client":0, "web":0},
- LastLoginTry = {"client":0, "web":0},
- Requests={ "sellrequests":{}, "buyrequests":{}, "sellingrequests":{} },
- intervals={},
- client = new SteamUser({'promptSteamGuardCode':false}),
- community = new SteamCommunity(),
- manager = new TradeOfferManager({ "steam": client, "language": "en", "community":community, "pollInterval": "10000", "cancelTime": "7200000" }),
- inventory = new Inventory(community, client, helper, config, mysql),
- customer = new CustomerHandler(client, helper),
- io = socket.listen( server ),
- sockets_connected = {},
- connections = {};
- helper.getJSON('poll.json', data => {if(Object.keys(data).length){manager.pollData=data;}});
- tryLogin();
- function tryLogin(){
- const
- type = client.client.loggedOn,
- lastl = !type ? LastLogin.client : LastLogin.web,
- lastlt = !type ? LastLoginTry.client : LastLoginTry.web,
- timeLimit = !type ? 1000*60 : 1000*5,
- tryLimit = !type ? 1000*2 : 1000*2,
- Now = helper.Now(),
- canTry = () => (Math.floor(Now - (lastlt+tryLimit)) > 0),
- canLogin = () => (Math.floor(Now - (lastl+timeLimit)) > 0),
- nextTry = () => {
- const val = Math.floor(Now - (lastlt+tryLimit));
- return val > 0 ? 1000 : (val)*-1;
- },
- nextLogin = () => {
- const val = Math.floor(Now - (lastl+timeLimit));
- return val > 0 ? 1000 : (val)*-1;
- };
- if(type){
- if( canTry() ){
- LastLoginTry.web = Now;
- if( canLogin() ){
- if(client.client.loggedOn){
- client.webLogOn();
- } else {
- clearTimeout(intervals['tryLoginTimeout']);
- intervals['tryLoginTimeout'] = setTimeout(tryLogin, 1000);
- }
- } else {
- helper.log(`Next weblogin in ${nextLogin()/1000} seconds.`);
- clearTimeout(intervals['web_timeout']);
- intervals['web_timeout'] = setTimeout(tryLogin, nextLogin());
- }
- } else {
- helper.debug(`Trying to weblogin again in ${nextTry()/1000} seconds.`);
- clearTimeout(intervals['web_timeout']);
- intervals['web_timeout'] = setTimeout(tryLogin, nextTry());
- }
- } else {
- if( canTry() ){
- LastLoginTry.client = Now;
- if( canLogin() ){
- login();
- } else {
- helper.log(`Next login in ${nextLogin()/1000/60} minutes.`);
- clearTimeout(intervals['d_timeout']);
- intervals['d_timeout'] = setTimeout(tryLogin, nextLogin());
- }
- } else {
- helper.debug(`Trying to login again in ${nextTry()/1000} seconds.`);
- clearTimeout(intervals['d_timeout']);
- intervals['d_timeout'] = setTimeout(tryLogin, nextTry());
- }
- }
- }
- function login(){
- if(!client.client.loggedOn){
- helper.log('Connecting to Steam..');
- if(didLogin){
- client.logOn(true);
- } else {
- helper.getLogOn(config.username, config.password, config.sharedse, logindata => { client.logOn(logindata); });
- }
- }
- }
- client.on('accountLimitations', (limited, communityBanned, locked) => {
- if(limited){
- helper.logError("This account is limited!");
- client.logOff();
- }
- else if(communityBanned){
- helper.logError("This account is banned from community!");
- client.logOff();
- }
- else if(locked){
- helper.logError("This account is locked!");
- client.logOff();
- }
- });
- client.on('loggedOn', () => {
- client.setPersona(SteamUser.EPersonaState.Online);
- didLogin = true;
- inventory.steamID64 = client.steamID.getSteamID64();
- helper.log("Conecting to SteamCommunity..");
- });
- client.on('steamGuard', (domain, callback) => { helper.getCode(config.sharedse, code => { callback(code); }); });
- client.on('webSession', (sessionID, newCookie) => { helper.debug("webLogOn");
- if(inventory.card_db){
- loadmanager(newCookie);
- } else {
- helper.log("Loading sets Database..");
- helper.updateTradingCardDb( data => { if(data){ inventory.card_db = data; loadmanager(newCookie);} });
- }
- });
- function validateSteamID(value){
- try {
- return new si(value).isValid();
- } catch (e) {
- return false;
- }
- }
- function loadmanager(newCookie){
- helper.log('Loading APIKey..');
- manager.setCookies(newCookie, err => {
- if(err){ helper.logError(err.message, "webSession"); return; }
- helper.log(`Got APIKey: ${manager.apiKey}`);
- inventory.apiKey = manager.apiKey;
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query(`UPDATE \`config\` SET \`api\` = '${manager.apiKey}'`, error => { if (error) throw error; });
- connection.end();
- community.startConfirmationChecker(20000, config.identity);
- inventory.Load(0, () => {
- helper.log(`Successfully loaded inventory, listenning to port ${SocketPort}`);
- server.listen(SocketPort, SocketIp);
- });
- clearInterval(intervals['loadmanager']);
- intervals['loadmanager'] = setInterval(() => {checkSteamLogged();}, 1000*60*4);
- });
- }
- client.on('disconnected', () => { helper.log("Bot Disconnected!"); });
- community.on('sessionExpired', () => {
- helper.debug('SessionExpired');
- tryLogin();
- });
- community.on('confirmationAccepted', (confirmation) => {
- helper.debug(`Accepted confirmation for #${confirmation.id}`);
- if (confirmation.type === 2) {
- helper.debug("Searching for details of #" + confirmation.creator);
- manager.getOffer(confirmation.creator, (error, offer) => {
- if (error) {
- helper.logError(error.message, 'confirmationAccepted');
- return;
- }
- if (offer.isOurOffer) {
- helper.logTrade(`Trade offer to ${offer.partner} has been confirmed!`);
- } else {
- helper.debug(`#${confirmation.creator} with confirmation id #${confirmation.id} isnt a trade offer sended by bot.`);
- }
- });
- }
- });
- function checkSteamLogged() { helper.debug("checkSteamLogged");
- community.loggedIn( (err, loggedIn) => {
- if (err) {
- helper.logError(err.message, 'checkSteamLogged');
- if(err.message.indexOf("socket hang up") > -1 || err.message.indexOf("ESOCKETTIMEDOUT") > -1){
- if(!client.steamID){
- tryLogin();
- } else {
- client.relog();
- }
- } else {
- clearTimeout(intervals['checkSteamLogged_err']);
- intervals['checkSteamLogged_err'] = setTimeout(checkSteamLogged, 1000*10);
- }
- } else if ( ! loggedIn ) {
- helper.debug("WebLogin check : NOT LOGGED IN !");
- client.setPersona(SteamUser.EPersonaState.Offline);
- tryLogin();
- } else {
- client.setPersona(SteamUser.EPersonaState.Online);
- }
- });
- }
- manager.on('pollData', pollData => { helper.storeData('poll.json', pollData, 1); });
- manager.on('pollFailure', () => { tryLogin(); });
- client.on('error', e => {
- helper.logError(e.message.replace("RateLimitExceeded", "Temporary login rate limit exceeded"), "Fatal error");
- if(!didLogin){
- LastLogin.client = helper.Now();
- }
- tryLogin();
- });
- manager.on('newOffer', offer => {
- const partner = offer.partner.getSteamID64();
- if(config.admin.indexOf(partner) > -1){
- helper.logTrade(`New offer from admin #${partner}`);
- offer.accept( (err, res) => {
- if(err) {
- helper.logTrade("Unable to accept admin offer: " + err.message);
- }
- else {
- if(res == "pending"){
- helper.logTrade("Accepting admin offer..");
- community.checkConfirmations();
- } else {
- helper.logTrade("Admin Offer accepeted!");
- }
- }
- });
- }
- });
- manager.on('receivedOfferChanged', (offer, oldState) => { helper.debug("receivedOfferChanged");
- helper.debug(`receivedOfferChanged Triggered #${offer.id}, state: ${offer.state}, oldState: ${oldState}`);
- if(offer.state == 3 && customer.finishedTrades[offer.id] == null){
- customer.finishedTrades[offer.id] = new Date().getTime();
- inventory.Load(1, () => {});
- }
- });
- manager.on('sentOfferChanged', (offer, oldState) => { helper.debug("receivedOfferChanged");
- helper.debug(`sentOfferChanged Triggered #${offer.id}, state: ${offer.state}, oldState: ${oldState}`);
- if(offer.state == 3 && customer.finishedTrades[offer.id] == null){
- customer.finishedTrades[offer.id] = new Date().getTime();
- inventory.Load(1, () => {});
- const
- connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name }),
- partner = offer.partner.getSteamID64();
- connection.connect();
- connection.query(`SELECT \`userid64\` FROM \`reps\` WHERE \`userid64\` = '${partner}' LIMIT 1`, (error, results) => {
- if(!results.length){
- const connection2 = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection2.connect();
- connection2.query(`UPDATE \`users\` SET \`canComment\` = '1' WHERE id='${partner}'`, error2 => {
- if (error2) {
- helper.logError(error2.message, 'Update Review Permission');
- }
- });
- connection2.end();
- }
- });
- connection.end();
- }
- });
- function setbuyrate(value, admin){ helper.debug("setsellrate");
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query(`UPDATE \`config\` SET \`buyrate\` = '${value}'`, (error, results) => {
- if (error) { helper.logError(error.message, 'setbuyrate'); customer.Message(config.admin, "Error in connect to database!"); }
- else if(results.changedRows > 0){
- customer.Message(admin, `Successfully changed Buy rate to ${value}!`);
- io.sockets.emit( 'message', {message:"Our buy rate has been changed!, please refresh the page :)", type:"warning"} );
- }
- });
- connection.end();
- }
- function setsellrate(value, admin){ helper.debug("setsellrate");
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query(`UPDATE \`config\` SET \`sellrate\` = '${value}'`, (error, results) => {
- if (error) { helper.logError(error.message, 'setbuyrate'); customer.Message(config.admin, "Error in connect to database!"); }
- else if(results.changedRows > 0){
- customer.Message(admin, `Successfully changed Sell rate to ${value}!`);
- io.sockets.emit( 'message', {message:"Our sell rate has been changed!, please refresh the page :)", type:"warning"} );
- }
- });
- connection.end();
- }
- client.on('friendMessage', (source, message) => { helper.debug("friendMessage");
- if(source == config.admin){
- message = message.toLowerCase();
- if(message.indexOf('!setbuyrate') > -1){ parseInputs(message, source, 0, input =>{ setbuyrate(input, source); }); }
- else if(message.indexOf('!setsellrate') > -1){ parseInputs(message, source, 0, input => { setsellrate(input, source); }); }
- else {
- customer.Message(source, `Available commands: !setbuyrate, !setsellrate`);
- }
- }
- });
- function parseInputs(message, target, min, callback, max){
- const qty=parseInt(message.split(" ")[1]),
- isNumber=!(isNaN(qty));
- if(isNumber){
- if(!(qty >= min)){ customer.Message(target, `The amount value should be higher than ${min-1}`); callback(0); }
- else { if(max && qty > max){ customer.Message(target, `The amount value should be lower than ${max+1}`); callback(0); } else { callback(qty); } }
- }
- else { customer.Message(target, `Try ${message.split(" ")[0]} [amount]`); callback(0); }
- }
- function removeFromArray(array, value){
- array.splice(array.indexOf(value), 1);
- }
- function realUsersOnline(){
- let result = 0;
- for(let ip in connections){
- if(connections[ip]){
- result++;
- }
- }
- return result;
- }
- io.sockets.on( 'connection', sclient => {
- const
- ip = sclient.handshake.headers['x-forwarded-for'],
- socketid = sclient.id;
- if (!sockets_connected[ip]) {
- sockets_connected[ip] = [];
- sockets_connected[ip].push(socketid);
- connections[ip] = 1;
- }
- else {
- connections[ip]++;
- sockets_connected[ip].push(socketid);
- }
- if (connections[ip] > maxConnections) {
- if (io.sockets.connected[sockets_connected[ip][0]]) {
- io.sockets.connected[sockets_connected[ip][0]].disconnect();
- }
- }
- helper.log('A new user has opened the website.');
- io.sockets.emit( 'usersonline', { u:realUsersOnline() } );
- sclient.on('disconnect', () => {
- connections[ip]--;
- removeFromArray(sockets_connected[ip], socketid);
- io.sockets.emit( 'usersonline', { u:realUsersOnline()} );
- helper.log('A user has closed the website.');
- });
- sclient.on( 'userbuying', data => { helper.debug("userbuying");
- userbuying(data, sclient);
- });
- sclient.on( 'userselling', data => { helper.debug("userselling");
- userselling(data, sclient);
- });
- sclient.on( 'sellpage', data => { helper.debug("sellpage");
- sellpage(data, sclient);
- });
- sclient.on( 'usersell', data => { helper.debug("usersell");
- usersell(data, sclient);
- });
- });
- function sellpage(data, sclient){
- let sets={}
- for(let set in inventory.AvailableSets){
- if(!sets[set]){
- sets[set] = inventory.AvailableSets[set].length;
- }
- }
- sclient.emit( 'botStock', sets );
- }
- function makeOffer(target, itemsFromMe, itemsFromThem, sclient){
- helper.log(`Creating offer for ${target}! Giving ${itemsFromMe.length} items, receiving ${itemsFromThem.length} items`);
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query("SELECT `url` FROM `users` WHERE id='"+target+"' LIMIT 1", (error, results) => {
- if(/https?:\/\/steamcommunity\.com\/tradeoffer\/new\/\?partner=[0-9]*&token=[a-zA-Z0-9_-]*/.test(results[0].url)){
- const
- offer = manager.createOffer(results[0].url),
- addMyItemsCount = offer.addMyItems(itemsFromMe),
- addTheirItemsCount = offer.addTheirItems(itemsFromThem);
- offer.getUserDetails( (err, me, them) => {
- if(err){
- if(err.message.toLowerCase().indexOf("is not available to trade. more information will be") > -1){
- sclient.emit( 'message', {message:"You're unavailable to trade, please try again later.", type:"warning"} );
- helper.logTrade(`#${target} is unavailable to trade`);
- } else {
- helper.logError(err.message, 'offer.getUserDetails');
- sclient.emit( 'message', {message: "For some reason i can't send you a trade offer, please try again later.", type:"danger"} );
- }
- return;
- }
- if(them.escrowDays){
- sclient.emit( 'message', {message: "I can't trade if you have trade hold!", type:"danger"} );
- } else {
- helper.debug(`Sending offer for #${target}`);
- offer.send( (err, status) => {
- helper.debug(`Offer #${offer.id} status: ${status}, err: ${err}`);
- if (err){ if(err.message.toLowerCase().indexOf("sent too many trade offers") > 1){
- sclient.emit( 'message', {message:"I have sent too many trade offers, or have too many outstanding trade offers with you. Please cancel some before request more.", type:"warning"} );
- } if(err.message.toLowerCase().indexOf("please try again later. (26)") > 1){
- helper.debug("Error 26", 'offer.send');
- sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
- }
- else {
- helper.logError(err.message, 'offer.send');
- sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
- } } else {
- manager.getOffer(offer.id, (err, myOffer) => {
- if(err){
- helper.logError(err.message, 'manager.getOffer');
- return;
- }
- if(addMyItemsCount != myOffer.itemsToGive.length){
- helper.logError('Cant add itemsFromMe, some item is missing in my inventory!', 'manager.getOffer');
- sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
- myOffer.cancel();
- } else if(addTheirItemsCount != myOffer.itemsToReceive.length){
- helper.logError('Cant add itemsFromThem, some item is missing in my inventory!', 'manager.getOffer');
- sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
- myOffer.cancel();
- } else if (status == 'pending') {
- community.checkConfirmations();
- sclient.emit( 'message', {message: "Trade offer sent!!", type:"success"} );
- helper.logTrade(`Successfully sent a trade offer for ${target}`);
- } else {
- sclient.emit( 'message', {message: "Trade offer sent!!", type:"success"} );
- helper.logTrade(`Successfully sent a trade offer for ${target}`);
- }
- });
- }
- });
- }
- });
- } else {
- sclient.emit( 'message', {message: "Please update your trade-url !", type:"danger"} );
- }
- });
- connection.end();
- }
- function sell(sid64, exp, badges, sclient){
- if(!validateSteamID(sid64)){
- sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
- return;
- }
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query("SELECT `sellrate` FROM `config` WHERE id='0'", (error, results) => {
- if (error) { helper.logError(error.message, 'sell'); client.emit( 'message', {message:"Error in connect to database!", type:"danger"} ); }
- else {
- sclient.emit( 'message', {message:"Sorting sets..", type:"info"} );
- const keys=Math.ceil(parseInt(exp)/(parseInt(results[0].sellrate)*100)),
- sets=Math.ceil(parseInt(exp)/100);
- inventory.getAvailableSetsForCustomer(badges, 5, sets, toSend => {
- if(toSend.length < sets){
- sclient.emit( 'message', {message:"Unfortunately i don't have enough sets for you, please try again later.", type:"danger"} );
- } else {
- helper.log(`Loading user #${sid64} inventory`);
- sclient.emit( 'message', {message:"Loading your inventory..", type:"info"} );
- inventory.return_CustomerCSGOKeys(sid64, (err, customer_keys) => {
- if (err){
- sclient.emit( 'message', {message:"There was an error on load your key inventory, please try again later.", type:"danger"} );
- } else {
- if(customer_keys.length < keys){
- sclient.emit( 'message', {message:"You need more keys available to trade for this request, come back later?", type:"danger"} );
- } else {
- inventory.getToOfferKeys(customer_keys, keys, 730, toReceive => {
- sclient.emit( 'message', {message:"Sending trade offer.", type:"info"} );
- makeOffer(sid64, [].concat.apply([], toSend), toReceive, sclient);
- });
- }
- }
- });
- }
- });
- }
- });
- connection.end();
- }
- function buy(sid64, customer_set_details, sclient){
- if(!validateSteamID(sid64)){
- sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
- return;
- }
- const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
- connection.connect();
- connection.query("SELECT `buyrate` FROM `config` WHERE id='0'", (error, results) => {
- if (error) {
- helper.logError(error.message, 'buy');
- client.emit( 'message', {message:"Error in connect to database!", type:"danger"} );
- }
- else {
- let totalsets=0;
- for (let key in customer_set_details){ totalsets+=parseInt(customer_set_details[key]); }
- const keys=parseInt(totalsets/results[0].buyrate);
- helper.log(`user #${sid64} have requested ${keys} keys for ${totalsets} sets`);
- if(inventory.haveCsKeys() < keys){
- helper.log(`bot don't have enough keys for user #${sid64}`);
- sclient.emit( 'message', {message:"Unfortunately i don't have enough keys for you, please try again later.", type:"danger"} );
- } else {
- sclient.emit( 'message', {message:"Sorting your sets..", type:"info"} );
- helper.log(`sorting user #${sid64} sets`);
- inventory.getCustomerSets(0, sid64, (err, customer_sets) => {
- if(err){
- if(err.message.toLowerCase().indexOf("duplicate") > -1){
- sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
- } else {
- helper.logError(err.message, 'loadInventory');
- }
- } else {
- let problem=0,
- toReceive=[],
- customer_stock=[];
- for(let appId in customer_sets){
- customer_stock.push({ appid:appId, qty:customer_sets[appId].length, name:inventory.card_db[appId][1] });
- }
- for(let appId in customer_set_details){
- if(customer_sets[appId]){
- if(customer_set_details[appId] > customer_sets[appId].length){
- problem++;
- } else {
- for(let i=0;i<customer_set_details[appId];i++){
- toReceive.push(customer_sets[appId][i]);
- }
- }
- } else {
- problem++;
- }
- }
- if(problem){
- helper.log(`user #${sid64} need to refresh your inventory`);
- sclient.emit( 'message', {message:"Something is wrong, please refresh your inventory!", type:"danger"} );
- } else {
- inventory.getToOffer_CS_Keys(keys, toSend => {
- sclient.emit( 'message', {message:"Sending trade offer.", type:"info"} );
- helper.log(`sending user #${sid64} trade offer`);
- makeOffer(sid64, toSend, [].concat.apply([], toReceive), sclient);
- });
- }
- }
- });
- }
- }
- });
- connection.end();
- }
- function userselling(data, sclient) {
- const Now = new Date().getTime();
- if(Requests.sellingrequests[data.userid64] && Math.floor(Now - Requests.sellingrequests[data.userid64]) < 2000){
- sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
- } else {
- Requests.sellingrequests[data.userid64] = new Date().getTime();
- buy(data.userid64, data.infos, sclient);
- }
- }
- function userbuying(data, sclient){
- const Now = new Date().getTime();
- if(Requests.buyrequests[data.userid64] && Math.floor(Now - Requests.buyrequests[data.userid64]) < 2000){
- sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
- } else {
- Requests.buyrequests[data.userid64] = new Date().getTime();
- if(data.xp){
- sell(data.id, data.xp, data.Badge_Info, sclient);
- }
- }
- }
- function usersell(data, sclient){
- if(!validateSteamID(data.userid64)){
- sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
- return;
- }
- const Now = new Date().getTime();
- if(Requests.sellrequests[data.userid64] && Math.floor(Now - Requests.sellrequests[data.userid64]) < 2000){
- sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
- } else {
- Requests.sellrequests[data.userid64] = new Date().getTime();
- helper.log("user #"+data.userid64+" have requested to load your inventory on sell tab");
- sclient.emit( 'message', {message:"<i class=\"fa fa-refresh fa-spin\"></i> Loading your inventory..", type:"info"} );
- inventory.getCustomerSets(0, data.userid64, (err, customer_sets) => {
- if(err){
- if(err.message.toLowerCase().indexOf("duplicate") > -1){
- sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
- } else {
- helper.logError(err.message, 'loadInventory');
- }
- } else {
- let customer_stock=[];
- for(let appId in customer_sets){
- const userset={ appid:appId, qty:customer_sets[appId].length, name:inventory.card_db[appId][1] };
- sclient.emit( 'userStockItem', userset );
- customer_stock.push(userset);
- }
- sclient.emit( 'userStock', customer_stock );
- sclient.emit( 'message', {message:"<strong>Done!</strong>, waiting for order request.", type:"success"} );
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement