Advertisement
Guest User

Untitled

a guest
Oct 31st, 2017
2,976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.75 KB | None | 0 0
  1. const
  2. SteamUser = require('steam-user'),
  3. Helper = require('./helpers.js'),
  4. si = require('steamid'),
  5. SteamCommunity = require('steamcommunity'),
  6. Inventory = require('./components/inventory.js'),
  7. CustomerHandler = require('./components/userhandler.js'),
  8. TradeOfferManager = require('steam-tradeoffer-manager'),
  9. socket = require( 'socket.io' ),
  10. express = require( 'express' ),
  11. http = require( 'http' ),
  12. app = express(),
  13. mysql = require('mysql'),
  14. server = http.createServer( app ),
  15. config=require('./data/config.json'),
  16. helper = new Helper(),
  17. SocketPort = 2052,
  18. SocketIp = "0.0.0.0", //104.207.147.170
  19. maxConnections = 3;
  20.  
  21. require('events').EventEmitter.defaultMaxListeners = 20;
  22.  
  23. let didLogin,
  24. LastLogin = {"client":0, "web":0},
  25. LastLoginTry = {"client":0, "web":0},
  26. Requests={ "sellrequests":{}, "buyrequests":{}, "sellingrequests":{} },
  27. intervals={},
  28. client = new SteamUser({'promptSteamGuardCode':false}),
  29. community = new SteamCommunity(),
  30. manager = new TradeOfferManager({ "steam": client, "language": "en", "community":community, "pollInterval": "10000", "cancelTime": "7200000" }),
  31. inventory = new Inventory(community, client, helper, config, mysql),
  32. customer = new CustomerHandler(client, helper),
  33. io = socket.listen( server ),
  34. sockets_connected = {},
  35. connections = {};
  36.  
  37. helper.getJSON('poll.json', data => {if(Object.keys(data).length){manager.pollData=data;}});
  38.  
  39. tryLogin();
  40.  
  41. function tryLogin(){
  42.  
  43. const
  44. type = client.client.loggedOn,
  45. lastl = !type ? LastLogin.client : LastLogin.web,
  46. lastlt = !type ? LastLoginTry.client : LastLoginTry.web,
  47. timeLimit = !type ? 1000*60 : 1000*5,
  48. tryLimit = !type ? 1000*2 : 1000*2,
  49. Now = helper.Now(),
  50. canTry = () => (Math.floor(Now - (lastlt+tryLimit)) > 0),
  51. canLogin = () => (Math.floor(Now - (lastl+timeLimit)) > 0),
  52. nextTry = () => {
  53. const val = Math.floor(Now - (lastlt+tryLimit));
  54. return val > 0 ? 1000 : (val)*-1;
  55. },
  56. nextLogin = () => {
  57. const val = Math.floor(Now - (lastl+timeLimit));
  58. return val > 0 ? 1000 : (val)*-1;
  59. };
  60.  
  61. if(type){
  62. if( canTry() ){
  63. LastLoginTry.web = Now;
  64. if( canLogin() ){
  65. if(client.client.loggedOn){
  66. client.webLogOn();
  67. } else {
  68. clearTimeout(intervals['tryLoginTimeout']);
  69. intervals['tryLoginTimeout'] = setTimeout(tryLogin, 1000);
  70. }
  71. } else {
  72. helper.log(`Next weblogin in ${nextLogin()/1000} seconds.`);
  73. clearTimeout(intervals['web_timeout']);
  74. intervals['web_timeout'] = setTimeout(tryLogin, nextLogin());
  75. }
  76. } else {
  77. helper.debug(`Trying to weblogin again in ${nextTry()/1000} seconds.`);
  78. clearTimeout(intervals['web_timeout']);
  79. intervals['web_timeout'] = setTimeout(tryLogin, nextTry());
  80. }
  81. } else {
  82. if( canTry() ){
  83. LastLoginTry.client = Now;
  84. if( canLogin() ){
  85. login();
  86. } else {
  87. helper.log(`Next login in ${nextLogin()/1000/60} minutes.`);
  88. clearTimeout(intervals['d_timeout']);
  89. intervals['d_timeout'] = setTimeout(tryLogin, nextLogin());
  90. }
  91. } else {
  92. helper.debug(`Trying to login again in ${nextTry()/1000} seconds.`);
  93. clearTimeout(intervals['d_timeout']);
  94. intervals['d_timeout'] = setTimeout(tryLogin, nextTry());
  95. }
  96. }
  97. }
  98.  
  99. function login(){
  100. if(!client.client.loggedOn){
  101. helper.log('Connecting to Steam..');
  102. if(didLogin){
  103. client.logOn(true);
  104. } else {
  105. helper.getLogOn(config.username, config.password, config.sharedse, logindata => { client.logOn(logindata); });
  106. }
  107. }
  108. }
  109.  
  110. client.on('accountLimitations', (limited, communityBanned, locked) => {
  111. if(limited){
  112. helper.logError("This account is limited!");
  113. client.logOff();
  114. }
  115. else if(communityBanned){
  116. helper.logError("This account is banned from community!");
  117. client.logOff();
  118. }
  119. else if(locked){
  120. helper.logError("This account is locked!");
  121. client.logOff();
  122. }
  123. });
  124.  
  125. client.on('loggedOn', () => {
  126. client.setPersona(SteamUser.EPersonaState.Online);
  127. didLogin = true;
  128. inventory.steamID64 = client.steamID.getSteamID64();
  129. helper.log("Conecting to SteamCommunity..");
  130. });
  131.  
  132. client.on('steamGuard', (domain, callback) => { helper.getCode(config.sharedse, code => { callback(code); }); });
  133.  
  134. client.on('webSession', (sessionID, newCookie) => { helper.debug("webLogOn");
  135. if(inventory.card_db){
  136. loadmanager(newCookie);
  137. } else {
  138. helper.log("Loading sets Database..");
  139. helper.updateTradingCardDb( data => { if(data){ inventory.card_db = data; loadmanager(newCookie);} });
  140. }
  141. });
  142.  
  143. function validateSteamID(value){
  144. try {
  145. return new si(value).isValid();
  146. } catch (e) {
  147. return false;
  148. }
  149. }
  150.  
  151. function loadmanager(newCookie){
  152. helper.log('Loading APIKey..');
  153. manager.setCookies(newCookie, err => {
  154. if(err){ helper.logError(err.message, "webSession"); return; }
  155. helper.log(`Got APIKey: ${manager.apiKey}`);
  156. inventory.apiKey = manager.apiKey;
  157. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  158. connection.connect();
  159. connection.query(`UPDATE \`config\` SET \`api\` = '${manager.apiKey}'`, error => { if (error) throw error; });
  160. connection.end();
  161. community.startConfirmationChecker(20000, config.identity);
  162. inventory.Load(0, () => {
  163. helper.log(`Successfully loaded inventory, listenning to port ${SocketPort}`);
  164. server.listen(SocketPort, SocketIp);
  165. });
  166. clearInterval(intervals['loadmanager']);
  167. intervals['loadmanager'] = setInterval(() => {checkSteamLogged();}, 1000*60*4);
  168. });
  169. }
  170.  
  171. client.on('disconnected', () => { helper.log("Bot Disconnected!"); });
  172.  
  173. community.on('sessionExpired', () => {
  174. helper.debug('SessionExpired');
  175. tryLogin();
  176. });
  177.  
  178. community.on('confirmationAccepted', (confirmation) => {
  179. helper.debug(`Accepted confirmation for #${confirmation.id}`);
  180. if (confirmation.type === 2) {
  181. helper.debug("Searching for details of #" + confirmation.creator);
  182. manager.getOffer(confirmation.creator, (error, offer) => {
  183. if (error) {
  184. helper.logError(error.message, 'confirmationAccepted');
  185. return;
  186. }
  187.  
  188. if (offer.isOurOffer) {
  189. helper.logTrade(`Trade offer to ${offer.partner} has been confirmed!`);
  190. } else {
  191. helper.debug(`#${confirmation.creator} with confirmation id #${confirmation.id} isnt a trade offer sended by bot.`);
  192. }
  193. });
  194. }
  195. });
  196.  
  197. function checkSteamLogged() { helper.debug("checkSteamLogged");
  198. community.loggedIn( (err, loggedIn) => {
  199. if (err) {
  200. helper.logError(err.message, 'checkSteamLogged');
  201. if(err.message.indexOf("socket hang up") > -1 || err.message.indexOf("ESOCKETTIMEDOUT") > -1){
  202. if(!client.steamID){
  203. tryLogin();
  204. } else {
  205. client.relog();
  206. }
  207. } else {
  208. clearTimeout(intervals['checkSteamLogged_err']);
  209. intervals['checkSteamLogged_err'] = setTimeout(checkSteamLogged, 1000*10);
  210.  
  211. }
  212. } else if ( ! loggedIn ) {
  213. helper.debug("WebLogin check : NOT LOGGED IN !");
  214. client.setPersona(SteamUser.EPersonaState.Offline);
  215. tryLogin();
  216. } else {
  217. client.setPersona(SteamUser.EPersonaState.Online);
  218. }
  219. });
  220. }
  221.  
  222. manager.on('pollData', pollData => { helper.storeData('poll.json', pollData, 1); });
  223.  
  224. manager.on('pollFailure', () => { tryLogin(); });
  225.  
  226. client.on('error', e => {
  227. helper.logError(e.message.replace("RateLimitExceeded", "Temporary login rate limit exceeded"), "Fatal error");
  228.  
  229. if(!didLogin){
  230. LastLogin.client = helper.Now();
  231. }
  232.  
  233. tryLogin();
  234. });
  235.  
  236. manager.on('newOffer', offer => {
  237. const partner = offer.partner.getSteamID64();
  238. if(config.admin.indexOf(partner) > -1){
  239. helper.logTrade(`New offer from admin #${partner}`);
  240. offer.accept( (err, res) => {
  241. if(err) {
  242. helper.logTrade("Unable to accept admin offer: " + err.message);
  243. }
  244. else {
  245. if(res == "pending"){
  246. helper.logTrade("Accepting admin offer..");
  247. community.checkConfirmations();
  248. } else {
  249. helper.logTrade("Admin Offer accepeted!");
  250. }
  251. }
  252. });
  253. }
  254. });
  255.  
  256. manager.on('receivedOfferChanged', (offer, oldState) => { helper.debug("receivedOfferChanged");
  257. helper.debug(`receivedOfferChanged Triggered #${offer.id}, state: ${offer.state}, oldState: ${oldState}`);
  258. if(offer.state == 3 && customer.finishedTrades[offer.id] == null){
  259. customer.finishedTrades[offer.id] = new Date().getTime();
  260. inventory.Load(1, () => {});
  261. }
  262. });
  263.  
  264. manager.on('sentOfferChanged', (offer, oldState) => { helper.debug("receivedOfferChanged");
  265. helper.debug(`sentOfferChanged Triggered #${offer.id}, state: ${offer.state}, oldState: ${oldState}`);
  266. if(offer.state == 3 && customer.finishedTrades[offer.id] == null){
  267. customer.finishedTrades[offer.id] = new Date().getTime();
  268.  
  269. inventory.Load(1, () => {});
  270.  
  271. const
  272. connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name }),
  273. partner = offer.partner.getSteamID64();
  274.  
  275. connection.connect();
  276.  
  277. connection.query(`SELECT \`userid64\` FROM \`reps\` WHERE \`userid64\` = '${partner}' LIMIT 1`, (error, results) => {
  278. if(!results.length){
  279. const connection2 = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  280. connection2.connect();
  281. connection2.query(`UPDATE \`users\` SET \`canComment\` = '1' WHERE id='${partner}'`, error2 => {
  282. if (error2) {
  283. helper.logError(error2.message, 'Update Review Permission');
  284. }
  285. });
  286. connection2.end();
  287. }
  288. });
  289. connection.end();
  290. }
  291. });
  292.  
  293. function setbuyrate(value, admin){ helper.debug("setsellrate");
  294. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  295. connection.connect();
  296. connection.query(`UPDATE \`config\` SET \`buyrate\` = '${value}'`, (error, results) => {
  297. if (error) { helper.logError(error.message, 'setbuyrate'); customer.Message(config.admin, "Error in connect to database!"); }
  298. else if(results.changedRows > 0){
  299. customer.Message(admin, `Successfully changed Buy rate to ${value}!`);
  300. io.sockets.emit( 'message', {message:"Our buy rate has been changed!, please refresh the page :)", type:"warning"} );
  301. }
  302. });
  303. connection.end();
  304. }
  305.  
  306. function setsellrate(value, admin){ helper.debug("setsellrate");
  307. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  308. connection.connect();
  309. connection.query(`UPDATE \`config\` SET \`sellrate\` = '${value}'`, (error, results) => {
  310. if (error) { helper.logError(error.message, 'setbuyrate'); customer.Message(config.admin, "Error in connect to database!"); }
  311. else if(results.changedRows > 0){
  312. customer.Message(admin, `Successfully changed Sell rate to ${value}!`);
  313. io.sockets.emit( 'message', {message:"Our sell rate has been changed!, please refresh the page :)", type:"warning"} );
  314. }
  315. });
  316. connection.end();
  317. }
  318.  
  319. client.on('friendMessage', (source, message) => { helper.debug("friendMessage");
  320. if(source == config.admin){
  321. message = message.toLowerCase();
  322.  
  323. if(message.indexOf('!setbuyrate') > -1){ parseInputs(message, source, 0, input =>{ setbuyrate(input, source); }); }
  324.  
  325. else if(message.indexOf('!setsellrate') > -1){ parseInputs(message, source, 0, input => { setsellrate(input, source); }); }
  326.  
  327. else {
  328. customer.Message(source, `Available commands: !setbuyrate, !setsellrate`);
  329. }
  330.  
  331. }
  332. });
  333.  
  334. function parseInputs(message, target, min, callback, max){
  335. const qty=parseInt(message.split(" ")[1]),
  336. isNumber=!(isNaN(qty));
  337. if(isNumber){
  338. if(!(qty >= min)){ customer.Message(target, `The amount value should be higher than ${min-1}`); callback(0); }
  339. else { if(max && qty > max){ customer.Message(target, `The amount value should be lower than ${max+1}`); callback(0); } else { callback(qty); } }
  340. }
  341. else { customer.Message(target, `Try ${message.split(" ")[0]} [amount]`); callback(0); }
  342. }
  343.  
  344. function removeFromArray(array, value){
  345. array.splice(array.indexOf(value), 1);
  346. }
  347.  
  348. function realUsersOnline(){
  349. let result = 0;
  350. for(let ip in connections){
  351. if(connections[ip]){
  352. result++;
  353. }
  354. }
  355. return result;
  356. }
  357.  
  358. io.sockets.on( 'connection', sclient => {
  359.  
  360. const
  361. ip = sclient.handshake.headers['x-forwarded-for'],
  362. socketid = sclient.id;
  363.  
  364. if (!sockets_connected[ip]) {
  365. sockets_connected[ip] = [];
  366. sockets_connected[ip].push(socketid);
  367. connections[ip] = 1;
  368. }
  369.  
  370. else {
  371. connections[ip]++;
  372. sockets_connected[ip].push(socketid);
  373. }
  374.  
  375. if (connections[ip] > maxConnections) {
  376. if (io.sockets.connected[sockets_connected[ip][0]]) {
  377. io.sockets.connected[sockets_connected[ip][0]].disconnect();
  378. }
  379. }
  380.  
  381. helper.log('A new user has opened the website.');
  382.  
  383. io.sockets.emit( 'usersonline', { u:realUsersOnline() } );
  384.  
  385. sclient.on('disconnect', () => {
  386. connections[ip]--;
  387. removeFromArray(sockets_connected[ip], socketid);
  388. io.sockets.emit( 'usersonline', { u:realUsersOnline()} );
  389. helper.log('A user has closed the website.');
  390. });
  391.  
  392. sclient.on( 'userbuying', data => { helper.debug("userbuying");
  393. userbuying(data, sclient);
  394. });
  395.  
  396. sclient.on( 'userselling', data => { helper.debug("userselling");
  397. userselling(data, sclient);
  398. });
  399.  
  400. sclient.on( 'sellpage', data => { helper.debug("sellpage");
  401. sellpage(data, sclient);
  402. });
  403.  
  404. sclient.on( 'usersell', data => { helper.debug("usersell");
  405. usersell(data, sclient);
  406. });
  407.  
  408. });
  409.  
  410. function sellpage(data, sclient){
  411. let sets={}
  412. for(let set in inventory.AvailableSets){
  413. if(!sets[set]){
  414. sets[set] = inventory.AvailableSets[set].length;
  415. }
  416. }
  417.  
  418. sclient.emit( 'botStock', sets );
  419. }
  420.  
  421. function makeOffer(target, itemsFromMe, itemsFromThem, sclient){
  422. helper.log(`Creating offer for ${target}! Giving ${itemsFromMe.length} items, receiving ${itemsFromThem.length} items`);
  423.  
  424. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  425. connection.connect();
  426.  
  427. connection.query("SELECT `url` FROM `users` WHERE id='"+target+"' LIMIT 1", (error, results) => {
  428. if(/https?:\/\/steamcommunity\.com\/tradeoffer\/new\/\?partner=[0-9]*&token=[a-zA-Z0-9_-]*/.test(results[0].url)){
  429. const
  430. offer = manager.createOffer(results[0].url),
  431. addMyItemsCount = offer.addMyItems(itemsFromMe),
  432. addTheirItemsCount = offer.addTheirItems(itemsFromThem);
  433.  
  434. offer.getUserDetails( (err, me, them) => {
  435. if(err){
  436. if(err.message.toLowerCase().indexOf("is not available to trade. more information will be") > -1){
  437. sclient.emit( 'message', {message:"You're unavailable to trade, please try again later.", type:"warning"} );
  438. helper.logTrade(`#${target} is unavailable to trade`);
  439. } else {
  440. helper.logError(err.message, 'offer.getUserDetails');
  441. sclient.emit( 'message', {message: "For some reason i can't send you a trade offer, please try again later.", type:"danger"} );
  442. }
  443. return;
  444. }
  445. if(them.escrowDays){
  446. sclient.emit( 'message', {message: "I can't trade if you have trade hold!", type:"danger"} );
  447. } else {
  448. helper.debug(`Sending offer for #${target}`);
  449. offer.send( (err, status) => {
  450. helper.debug(`Offer #${offer.id} status: ${status}, err: ${err}`);
  451. if (err){ if(err.message.toLowerCase().indexOf("sent too many trade offers") > 1){
  452. 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"} );
  453. } if(err.message.toLowerCase().indexOf("please try again later. (26)") > 1){
  454. helper.debug("Error 26", 'offer.send');
  455. sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
  456. }
  457. else {
  458. helper.logError(err.message, 'offer.send');
  459. sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
  460. } } else {
  461. manager.getOffer(offer.id, (err, myOffer) => {
  462. if(err){
  463. helper.logError(err.message, 'manager.getOffer');
  464. return;
  465. }
  466. if(addMyItemsCount != myOffer.itemsToGive.length){
  467. helper.logError('Cant add itemsFromMe, some item is missing in my inventory!', 'manager.getOffer');
  468. sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
  469. myOffer.cancel();
  470. } else if(addTheirItemsCount != myOffer.itemsToReceive.length){
  471. helper.logError('Cant add itemsFromThem, some item is missing in my inventory!', 'manager.getOffer');
  472. sclient.emit( 'message', {message: "Some error has occurred, please try again ?", type:"danger"} );
  473. myOffer.cancel();
  474. } else if (status == 'pending') {
  475. community.checkConfirmations();
  476. sclient.emit( 'message', {message: "Trade offer sent!!", type:"success"} );
  477. helper.logTrade(`Successfully sent a trade offer for ${target}`);
  478. } else {
  479. sclient.emit( 'message', {message: "Trade offer sent!!", type:"success"} );
  480. helper.logTrade(`Successfully sent a trade offer for ${target}`);
  481. }
  482. });
  483. }
  484. });
  485. }
  486. });
  487. } else {
  488. sclient.emit( 'message', {message: "Please update your trade-url !", type:"danger"} );
  489. }
  490. });
  491.  
  492. connection.end();
  493. }
  494.  
  495. function sell(sid64, exp, badges, sclient){
  496.  
  497. if(!validateSteamID(sid64)){
  498. sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
  499. return;
  500. }
  501.  
  502. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  503. connection.connect();
  504.  
  505. connection.query("SELECT `sellrate` FROM `config` WHERE id='0'", (error, results) => {
  506. if (error) { helper.logError(error.message, 'sell'); client.emit( 'message', {message:"Error in connect to database!", type:"danger"} ); }
  507. else {
  508.  
  509. sclient.emit( 'message', {message:"Sorting sets..", type:"info"} );
  510.  
  511. const keys=Math.ceil(parseInt(exp)/(parseInt(results[0].sellrate)*100)),
  512. sets=Math.ceil(parseInt(exp)/100);
  513.  
  514. inventory.getAvailableSetsForCustomer(badges, 5, sets, toSend => {
  515.  
  516. if(toSend.length < sets){
  517. sclient.emit( 'message', {message:"Unfortunately i don't have enough sets for you, please try again later.", type:"danger"} );
  518. } else {
  519. helper.log(`Loading user #${sid64} inventory`);
  520. sclient.emit( 'message', {message:"Loading your inventory..", type:"info"} );
  521.  
  522. inventory.return_CustomerCSGOKeys(sid64, (err, customer_keys) => {
  523. if (err){
  524. sclient.emit( 'message', {message:"There was an error on load your key inventory, please try again later.", type:"danger"} );
  525. } else {
  526. if(customer_keys.length < keys){
  527. sclient.emit( 'message', {message:"You need more keys available to trade for this request, come back later?", type:"danger"} );
  528. } else {
  529. inventory.getToOfferKeys(customer_keys, keys, 730, toReceive => {
  530. sclient.emit( 'message', {message:"Sending trade offer.", type:"info"} );
  531. makeOffer(sid64, [].concat.apply([], toSend), toReceive, sclient);
  532. });
  533. }
  534. }
  535. });
  536. }
  537. });
  538. }
  539. });
  540.  
  541. connection.end();
  542. }
  543.  
  544.  
  545. function buy(sid64, customer_set_details, sclient){
  546.  
  547. if(!validateSteamID(sid64)){
  548. sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
  549. return;
  550. }
  551.  
  552. const connection = mysql.createConnection({ host: config.db_host, user: config.db_user, password: config.db_pw, database: config.db_name });
  553. connection.connect();
  554.  
  555. connection.query("SELECT `buyrate` FROM `config` WHERE id='0'", (error, results) => {
  556. if (error) {
  557. helper.logError(error.message, 'buy');
  558. client.emit( 'message', {message:"Error in connect to database!", type:"danger"} );
  559. }
  560. else {
  561. let totalsets=0;
  562. for (let key in customer_set_details){ totalsets+=parseInt(customer_set_details[key]); }
  563. const keys=parseInt(totalsets/results[0].buyrate);
  564.  
  565. helper.log(`user #${sid64} have requested ${keys} keys for ${totalsets} sets`);
  566.  
  567. if(inventory.haveCsKeys() < keys){
  568. helper.log(`bot don't have enough keys for user #${sid64}`);
  569.  
  570. sclient.emit( 'message', {message:"Unfortunately i don't have enough keys for you, please try again later.", type:"danger"} );
  571. } else {
  572. sclient.emit( 'message', {message:"Sorting your sets..", type:"info"} );
  573. helper.log(`sorting user #${sid64} sets`);
  574.  
  575. inventory.getCustomerSets(0, sid64, (err, customer_sets) => {
  576. if(err){
  577. if(err.message.toLowerCase().indexOf("duplicate") > -1){
  578. sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
  579. } else {
  580. helper.logError(err.message, 'loadInventory');
  581. }
  582. } else {
  583.  
  584. let problem=0,
  585. toReceive=[],
  586. customer_stock=[];
  587.  
  588. for(let appId in customer_sets){
  589. customer_stock.push({ appid:appId, qty:customer_sets[appId].length, name:inventory.card_db[appId][1] });
  590. }
  591.  
  592. for(let appId in customer_set_details){
  593. if(customer_sets[appId]){
  594. if(customer_set_details[appId] > customer_sets[appId].length){
  595. problem++;
  596. } else {
  597. for(let i=0;i<customer_set_details[appId];i++){
  598. toReceive.push(customer_sets[appId][i]);
  599. }
  600. }
  601. } else {
  602. problem++;
  603. }
  604. }
  605.  
  606. if(problem){
  607. helper.log(`user #${sid64} need to refresh your inventory`);
  608. sclient.emit( 'message', {message:"Something is wrong, please refresh your inventory!", type:"danger"} );
  609. } else {
  610. inventory.getToOffer_CS_Keys(keys, toSend => {
  611. sclient.emit( 'message', {message:"Sending trade offer.", type:"info"} );
  612. helper.log(`sending user #${sid64} trade offer`);
  613. makeOffer(sid64, toSend, [].concat.apply([], toReceive), sclient);
  614. });
  615. }
  616.  
  617. }
  618. });
  619. }
  620. }
  621. });
  622.  
  623. connection.end();
  624. }
  625.  
  626. function userselling(data, sclient) {
  627. const Now = new Date().getTime();
  628. if(Requests.sellingrequests[data.userid64] && Math.floor(Now - Requests.sellingrequests[data.userid64]) < 2000){
  629. sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
  630. } else {
  631. Requests.sellingrequests[data.userid64] = new Date().getTime();
  632. buy(data.userid64, data.infos, sclient);
  633. }
  634. }
  635.  
  636. function userbuying(data, sclient){
  637. const Now = new Date().getTime();
  638. if(Requests.buyrequests[data.userid64] && Math.floor(Now - Requests.buyrequests[data.userid64]) < 2000){
  639. sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
  640. } else {
  641. Requests.buyrequests[data.userid64] = new Date().getTime();
  642. if(data.xp){
  643. sell(data.id, data.xp, data.Badge_Info, sclient);
  644. }
  645. }
  646. }
  647.  
  648. function usersell(data, sclient){
  649.  
  650. if(!validateSteamID(data.userid64)){
  651. sclient.emit( 'message', {message:"Wrong SteamID!", type:"danger"} );
  652. return;
  653. }
  654.  
  655. const Now = new Date().getTime();
  656.  
  657. if(Requests.sellrequests[data.userid64] && Math.floor(Now - Requests.sellrequests[data.userid64]) < 2000){
  658. sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
  659. } else {
  660. Requests.sellrequests[data.userid64] = new Date().getTime();
  661. helper.log("user #"+data.userid64+" have requested to load your inventory on sell tab");
  662. sclient.emit( 'message', {message:"<i class=\"fa fa-refresh fa-spin\"></i> Loading your inventory..", type:"info"} );
  663.  
  664. inventory.getCustomerSets(0, data.userid64, (err, customer_sets) => {
  665. if(err){
  666. if(err.message.toLowerCase().indexOf("duplicate") > -1){
  667. sclient.emit( 'message', {message:"You have already make this request a few seconds ago, please wait some more.", type:"danger"} );
  668. } else {
  669. helper.logError(err.message, 'loadInventory');
  670. }
  671. } else {
  672. let customer_stock=[];
  673. for(let appId in customer_sets){
  674. const userset={ appid:appId, qty:customer_sets[appId].length, name:inventory.card_db[appId][1] };
  675. sclient.emit( 'userStockItem', userset );
  676. customer_stock.push(userset);
  677. }
  678. sclient.emit( 'userStock', customer_stock );
  679. sclient.emit( 'message', {message:"<strong>Done!</strong>, waiting for order request.", type:"success"} );
  680. }
  681. });
  682. }
  683. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement