Guest User

server.js

a guest
Mar 7th, 2018
587
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 145.77 KB | None | 0 0
  1. //{
  2. var config = require('./config');
  3. var fs = require('fs');
  4. /* var options = {
  5. key: fs.readFileSync('/etc/letsencrypt/live/csgosentinel.com/privkey.pem'),
  6. cert: fs.readFileSync('/etc/letsencrypt/live/csgosentinel.com/fullchain.pem'),
  7. requestCert: false,
  8. rejectUnauthorized: false
  9. };
  10. var html = '<html><head> <title>CSGOTurbo - websocket</title><link rel="stylesheet prefetch" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"><link rel="stylesheet prefetch" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css"><link rel="stylesheet" type="text/css" href="/css/WS/style1.css"><link rel="stylesheet" type="text/css" href="/css/WS/app1.css"><link rel="stylesheet" type="text/css" href="/css/WS/application.css"><link rel="stylesheet" type="text/css" href="/css/WS/csgosentinel.css"><link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css"><link rel="stylesheet" type="text/css" href="/css/WS/style.css"><link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css"> <style>html, body{height: 100%;}body{margin: 0; padding: 0; width: 100%; color: #B0BEC5; display: table; font-weight: 100; font-family: \'Lato\';}.container{text-align: center; display: table-cell; vertical-align: middle;}.content{text-align: center; display: inline-block;}.title{font-size: 72px; margin-bottom: 40px;}</style></head><body><div class="main-container"><center><div class="container"><div class="main-center"><div class="turbo "><div class="row" style="display:block;"><div class="col-md-1-3"><img style="margin-left: 0;padding-right: 0;" class="csgosentinel-logo animated" src="http://www.csgosentinel.com/img/official.png"></div></div></div></img><div id="clockdiv" class="countdown"><div class="row time-main" style="display: block;"><div class="col-md-1-5 time-main"><h1 class="time days">CSGOTurbo</h1><h6 class="time-t">IS A BEAUTY<h6></div></div></div><div class="footer" style="width: 100%;"><div class="data"><div class="social"><a href="https://twitter.com/realcsgosentinel" target="_blank"><i class="fa fa-twitter"></i></a><a href="http://steamcommunity.com/groups/goturbo" target="_blank"><i class="fa fa-steam"></i></a></div><div class="copyright">&copy; CSGOTURBO 2017</div><div class="legal"><a href="http://www.responsiblegambling.org/" target="_blank">Responsible Gambling</a></div></div></div></center></body></html>';
  11. var server = require('https').createServer(options, function(request, response) {
  12. response.writeHeader(200, {
  13. 'Access-Control-Allow-Origin': '*',
  14. "Content-Type": "text/html"
  15. });
  16. response.write(html);
  17. response.end();
  18. }); */
  19. var io = require('socket.io')(8443); //SITE init start
  20. var crypto = require('crypto');
  21. var request = require('request');
  22. var mysql = require('mysql');
  23. var sha256 = require('sha256');
  24. var math = require('mathjs');
  25. var randomstring = require("randomstring");
  26. var request = require('request');
  27. var connection = mysql.createConnection({
  28. host: config.host,
  29. user: config.user,
  30. password: config.password,
  31. database: config.db
  32. }); //SITE init end
  33.  
  34. //BOT init start
  35. var SteamCommunity = require('steamcommunity');
  36. var SteamID = SteamCommunity.SteamID;
  37. //var community = new SteamCommunity();
  38. var SteamUser = require('steam-user');
  39. var TradeOfferManager = require('steam-tradeoffer-manager');
  40. var SteamTotp = require('steam-totp');
  41. var log4js = require('log4js');
  42. const log4js_extend = require("log4js-extend");
  43. log4js.configure({
  44. appenders: {
  45. out: { type: 'console' },
  46. task: {
  47. type: 'dateFile',
  48. filename: 'logs/bot',
  49. pattern: '-yyyy-MM-dd.log',
  50. alwaysIncludePattern: true
  51. }
  52. },
  53. categories: {
  54. default: { appenders: [ 'out', 'task' ], level: 'all' }
  55. }
  56. });
  57. log4js_extend(log4js, {
  58. path: __dirname,
  59. format: "(@file:@line:@column)"
  60. });
  61. var logger = log4js.getLogger();
  62. //BOT init stop
  63.  
  64. //SITE SETTINGS
  65. var prices;
  66. var users = {};
  67. var chat_muted = false;
  68. var isSteamRIP = false;
  69. var pause = false;
  70. var lastrolls = [];
  71. var last_message = {};
  72. var usersBr = {};
  73. var chat_history = [];
  74. var currentBets = {
  75. 'red': [],
  76. 'green': [],
  77. 'black': []
  78. };
  79. var accept = 100;
  80. var wait = 50;
  81. var timer = -100;
  82. var currentRollid = 0;
  83. var winningNumber = 0;
  84. var actual_hash = "";
  85. var secret;
  86. var active = {
  87. roulette: true,
  88. jackpot: false,
  89. coinflip: false,
  90. dice: true,
  91. mines: true,
  92. crash: true,
  93. withdraw: false,
  94. deposit: true,
  95. };
  96.  
  97. var reservedrefcodes = fs.readFileSync(__dirname + '/reservedcodes.txt').toString().split("\r\n") || [];
  98.  
  99. updatePrices();
  100.  
  101. setInterval(function() {
  102. updatePrices()
  103. }, 21600000);
  104.  
  105. function updatePrices() {
  106. request('https://api.csgofast.com/price/all', function(error, response, body) {
  107. if (error || !response || response.statusCode != 200 || !body) {
  108. conosle.log("error loading prices");
  109. logger.debug('error:', error); // Print the error if one occurred
  110. logger.debug('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  111. logger.debug('body:', body); // Print the HTML for the Google homepage.
  112. } else {
  113. prices = JSON.parse(body);
  114. fs.writeFileSync(__dirname + '/prices.txt', body);
  115. }
  116. });
  117.  
  118. }
  119.  
  120. //COINFLIP
  121. var cfBets = [];
  122. var betUsers = {};
  123.  
  124. //JACKPOT
  125. var jpTime = 20; //POOL TIMELEFT YOU WANT IN SECONDS
  126.  
  127. var jpPool = 0;
  128. var jpTimeleft = -1;
  129. var jpAllow = true;
  130. var jpBets = [];
  131. var jpWinners = [];
  132. var jpUsers = {};
  133.  
  134. //CRASH
  135. var cstart_in = config.crash_time;
  136. var ccurrenthash = 'dog';
  137. var ccrashpoint = 0;
  138. var ctime = 0;
  139. var cgame = 0;
  140. var csecret = '';
  141. var cbets = [];
  142. var players_cashouts = {};
  143. var cgame_history = [];
  144. var cstatus = 'closed';
  145. var play_try = {};
  146. var startTime;
  147. var cdrop;
  148.  
  149. //DICE
  150. var user_dice_current = {};
  151. var dice_games = [];
  152.  
  153. //MINES
  154.  
  155. var user_mines_current = {};
  156. var mines_games = {};
  157. //}
  158.  
  159. //NEW LOGIN
  160. var user_login_codes = {};
  161.  
  162.  
  163. function crashPoint(serverSeed) {
  164. var hash = crypto.createHmac('sha256', serverSeed).digest('hex');
  165.  
  166. // In 1 of 25 games the game crashes instantly.
  167. if (divisible(hash, 10))
  168. return 0;
  169.  
  170. // Use the most significant 52-bit from the hash to calculate the crash point
  171. var h = parseInt(hash.slice(0, 52 / 4), 16);
  172. var e = Math.pow(2, 52);
  173.  
  174. return Math.floor((100 * e - h) / (e - h));
  175. }
  176.  
  177. function divisible(hash, mod) {
  178. // We will read in 4 hex at a time, but the first chunk might be a bit smaller
  179. // So ABCDEFGHIJ should be chunked like AB CDEF GHIJ
  180. var val = 0;
  181.  
  182. var o = hash.length % 4;
  183. for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) {
  184. val = ((val << 16) + parseInt(hash.substring(i, i + 4), 16)) % mod;
  185. }
  186.  
  187. return val === 0;
  188. }
  189.  
  190. function cstart_game() {
  191. ctime = 0;
  192. cdrop = crashPoint(generate(20));
  193. csecret = generate(20);
  194. ccurrenthash = sha256(cdrop + ":" + csecret);
  195. ccrashpoint = 0;
  196. cstart_in = config.crash_time;
  197. cbets = [];
  198. players_cashouts = {};
  199. cstatus = 'open';
  200. io.sockets.to('crash').emit('crash info', {
  201. hash: ccurrenthash,
  202. players: cbets,
  203. start_in: parseFloat(cstart_in)
  204. });
  205. var cstart_timeout = setInterval(function() {
  206. cstart_in = (cstart_in - 0.01).toFixed(3);
  207. if (cstart_in < 0.00) {
  208. clearInterval(cstart_timeout);
  209. cnew_game();
  210. }
  211. }, 10);
  212. }
  213.  
  214. function cnew_game() {
  215. ctime = Date.now();
  216. cgame++;
  217. cstatus = 'closed';
  218. logger.log("[CRASH] " + cgame + ": " + (cdrop / 100) + "" + " (DEBUG: " + cdrop + ")");
  219. startTime = new Date(Date.now() + 5000);
  220. io.sockets.to('crash').emit('crash start', {
  221. multiplier: 1,
  222. time: ctime,
  223. });
  224. var cgame_timeout = setInterval(function() {
  225. // ctime++;
  226. ccrashpoint = Math.floor(100 * growthFunc(ctime));
  227. doCashouts(ccrashpoint / 100);
  228. if (ccrashpoint >= cdrop) {
  229. cstatus = 'drop';
  230. clearInterval(cgame_timeout);
  231. clearInterval(cshowgame_timeout);
  232. cmultiplier = growthFunc(ctime);
  233. io.sockets.to('crash').emit('crash end', {
  234. bet: 0,
  235. hash: ccurrenthash,
  236. multiplier: cmultiplier,
  237. profit: 0,
  238. secret: csecret
  239. });
  240. crash_limit({
  241. bet: 0,
  242. hash: ccurrenthash,
  243. multiplier: cmultiplier,
  244. profit: 0,
  245. secret: csecret,
  246. time: new Date().getTime()
  247. });
  248. setTimeout(function() {
  249. cstart_game();
  250. }, 5000);
  251. }
  252. });
  253. var cshowgame_timeout = setInterval(function() {
  254. io.emit('crash tick', {
  255. multiplier: growthFunc(ctime)
  256. });
  257. }, 40);
  258. }
  259.  
  260. function crash_limit(wartosc) {
  261. if (cgame_history.length == 15) {
  262. cgame_history.shift();
  263. }
  264. cgame_history.push(wartosc);
  265. }
  266.  
  267. function growthFunc(ms) {
  268. var r = 0.00006;
  269. var time = Date.now() - ms;
  270. return Math.pow(Math.E, r * time);
  271. }
  272.  
  273. function doCashouts(at) {
  274. cbets.forEach(function(play) {
  275. if ((play.done) || (!players_cashouts[play.profile.steamid])) return;
  276. if (players_cashouts[play.profile.steamid] <= at && players_cashouts[play.profile.steamid] <= growthFunc(ctime)) {
  277. crashWithdraw({
  278. steamid: play.profile.steamid
  279. });
  280. }
  281. });
  282. }
  283.  
  284. cstart_game();
  285.  
  286. //BOT SETTINGS
  287. var admin = config.admin;
  288. //var botsteamid = config.botsteamid;
  289. //var identitysecret = config.identitysecret;
  290. //var sharedsecret = config.sharedsecret;
  291. var polling_interval = config.polling_interval;
  292. //BOT ACCOUNT DETALIS
  293. var site_bots = {};
  294. config.bots.forEach(function(bot){
  295.  
  296. var community = new SteamCommunity();
  297.  
  298. /*var details = {
  299. "accountName": bot.username,
  300. "password": bot.password,
  301. "twoFactorCode": SteamTotp.generateAuthCode(bot.sharedsecret)
  302. };*/
  303. var client = new SteamUser();
  304.  
  305. var manager = new TradeOfferManager({
  306. "steam": client,
  307. "community": community,
  308. "domain": config.manager_domain,
  309. "language": config.manager_lang
  310. });
  311.  
  312. if (fs.existsSync('polldata.json')) {
  313. manager.pollData = JSON.parse(fs.readFileSync('polldata.json'));
  314. }
  315.  
  316. client.logOn({
  317. "accountName": bot.username,
  318. "password": bot.password,
  319. "twoFactorCode": SteamTotp.generateAuthCode(bot.sharedsecret)
  320. }, function(err, sessionID, cookies, steamguard) {
  321. if(err) {
  322. logger.error("logon error");
  323. logger.debug(err);
  324. }
  325. }); //bot login
  326.  
  327. //{
  328. client.on("loggedOn", function(dataAndEvents) {
  329. logger.info("[BOT] Signed in!");
  330. client.setPersona(SteamUser.Steam.EPersonaState.LookingToTrade);
  331. });
  332.  
  333. client.on("webSession", function(sessionID, cookies) {
  334. manager.setCookies(cookies, function(err) {
  335. if (err) {
  336. return logger.debug("Error setting cookies/cache: " + err), void process.exit(1);
  337. }
  338. // community.startConfirmationChecker(polling_interval, bot.identitysecret);
  339. });
  340. community.setCookies(cookies);
  341. logger.info("[BOT] Session cookies set!");
  342. });
  343. manager.on("sentOfferChanged", function(data, oldState) {
  344. logger.info("[BOT] Status of the trade offer #" + data.id + " from user: " + data.partner + " changed to: " + data.state + " from: " + oldState);
  345. var string_state = {
  346. 1: 'Invalid',
  347. 2: 'Active',
  348. 3: 'Accepted',
  349. 4: 'Countered',
  350. 5: 'Expired',
  351. 6: 'Canceled',
  352. 7: 'Declined',
  353. 8: 'InvalidItems',
  354. 9: 'Needs Confirmation',
  355. 10: 'Canceled',
  356. 11: 'In Escrow'
  357. };
  358. if (users[data.partner]) {
  359. users[data.partner].socket.forEach(function(asocket) {
  360. if (io.sockets.connected[asocket])
  361. io.sockets.connected[asocket].emit('notify', '', 'offerStateChange', [data.id, string_state[oldState], string_state[data.state]]);
  362. });
  363. }
  364.  
  365. handelOffer(data, bot);
  366.  
  367. });
  368.  
  369. manager.on('pollData', function(pollData) {
  370. fs.writeFile('polldata.json', JSON.stringify(pollData), function() {});
  371. });
  372.  
  373. manager.on("newOffer", function(oferta) {
  374.  
  375. });
  376. community.on("sessionExpired", function(err) {
  377. if (err) logger.error(err);
  378. logger.debug('session expired, logging in...');
  379.  
  380.  
  381. if (client.steamID) {
  382. client.webLogOn();
  383. } else {
  384. client.logOn({
  385. "accountName": bot.username,
  386. "password": bot.password,
  387. "twoFactorCode": SteamTotp.generateAuthCode(bot.sharedsecret)
  388. }, function(err, sessionID, cookies, steamguard) {
  389. if(err) {
  390. logger.error("logon error");
  391. logger.debug(err);
  392. }
  393. });
  394. }
  395. });
  396. /* community.on("newConfirmation", function(d) {
  397. var time = Math.round(Date.now() / 1E3);
  398. var data = SteamTotp.getConfirmationKey(identitysecret, time, "allow");
  399. community.respondToConfirmation(d.id, d.key, time, data, true, function(error) {
  400. logger.debug("[BOT] Outgoing confirmation for the trade: " + d.key);
  401. if (error) {
  402. logger.debug("[BOT] Error while confirming the trade: " + error);
  403. client.webLogOn();
  404. }
  405. });
  406. });
  407. community.on("confKeyNeeded", function(deepDataAndEvents, updateFunc) {
  408. logger.debug("confKeyNeeded");
  409. var progressContexts = Math.floor(Date.now() / 1E3);
  410. updateFunc(null, progressContexts, SteamTotp.getConfirmationKey(identitysecret, progressContexts, deepDataAndEvents));
  411. });*/
  412. //}
  413. /*client.on("friendRelationship", function(sid, relationship){
  414. var steamid = sid.getSteamID64();
  415. if(relationship == SteamUser.EFriendRelationship.Friend){
  416. if(user_login_codes[steamid]){
  417. client.chatMessage(steamid, "To login please enter the code provided on the site");
  418. }
  419. }
  420. else if(relationship == SteamUser.EFriendRelationship.RequestRecipient){
  421. client.addFriend(steamid, function(err, name){
  422. if(err){
  423. logger.error("Error accepting user: " + steamid);
  424. logger.debug(err);
  425. }
  426. else{
  427. if(name){
  428. client.chatMessage(steamid, "To login please enter the code provided on the site");
  429. }
  430. else{
  431. logger.error("Werid error accepting user: " + steamid + ", no error returned but name also not returned");
  432. }
  433. }
  434. });
  435. }
  436. });
  437. client.on('friendMessage', function(sid, message) {
  438. var steamid = sid.getSteamID64();
  439. if(user_login_codes[steamid]){
  440. if(user_login_codes[steamid].code == message){
  441. if (io.sockets.connected[user_login_codes[steamid].socket]){
  442. client.chatMessage(steamid, "Correct code, you will now be logged in!");
  443. var token_time = time();
  444. var token = sha256(crypto.randomBytes(10) + token_time);
  445. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(steamid) + ' LIMIT 1', function(err, row) {
  446. if(err){
  447. logger.error("error checking if user exists");
  448. logger.debug(err);
  449. io.sockets.connected[user_login_codes[steamid].socket].emit("login failed");
  450. return;
  451. }
  452. else if(row.length < 1){
  453.  
  454. connection.query('INSERT INTO `users` (`steamid`, `token`, `token_time`) VALUES ('+connection.escape(steamid)+','+ connection.escape(token)+','+ connection.escape(token_time)+')', function(err2) {
  455. if(err2){
  456. logger.error("error creating user");
  457. logger.debug(err2);
  458. io.sockets.connected[user_login_codes[steamid].socket].emit("login failed");
  459. return;
  460. }
  461.  
  462. io.sockets.connected[user_login_codes[steamid].socket].emit("login token", {token: token, token_time: token_time, steamid: steamid});
  463. });
  464. }
  465. else{
  466. connection.query('UPDATE `users` SET `token` = ' + connection.escape(token) + ', `token_time` = ' + connection.escape(token_time) + ' WHERE `steamid` = ' + connection.escape(steamid), function(err) {
  467. if(err){
  468. logger.error("error updated token on login");
  469. logger.debug(err);
  470. io.sockets.connected[user_login_codes[steamid].socket].emit("login failed");
  471. }
  472. else{
  473. io.sockets.connected[user_login_codes[steamid].socket].emit("login token", {token: token, token_time: token_time, steamid: steamid});
  474. }
  475. });
  476. }
  477. });
  478. }
  479. else{
  480. client.chatMessage(steamid, "Correct code, but socket lost connect, please refresh the page and try again!");
  481. }
  482. client.removeFriend(steamid);
  483. }
  484. else{
  485. client.chatMessage(steamid, "Incorrect code, please try again");
  486. }
  487. }
  488. else{
  489. client.chatMessage(steamid, "It appears a code has not been generated for you, please try to login again");
  490. client.removeFriend(steamid);
  491. }
  492. });*/
  493.  
  494. site_bots[bot.steamid] = {manager: manager, client: client, community: community, identitysecret: bot.identitysecret};
  495. });
  496.  
  497. function handelOffer(data, bot){
  498. connection.query('SELECT * FROM `trade_history` WHERE `offer_id` = ' + data.id, function(err, rows) {
  499. if (err) {
  500. logger.debug('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  501. logger.debug(err);
  502. return;
  503. } else if (rows.length < 1) {
  504. return;
  505. } else {
  506. connection.query('UPDATE `trade_history` SET `offer_state` = ' + data.state + ' WHERE `offer_id` = ' + data.id, function(error) {
  507. if (error) {
  508. logger.debug('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  509. logger.debug(error);
  510. return;
  511. }
  512. });
  513. if (data.state == 3) {
  514. if (rows[0].action == 'deposit') {
  515. data.getReceivedItems(function(items_error, receiveditems) {
  516. if (items_error) {
  517. logger.error('IMPORTANT ERROR AT DEPOSIT getReceivedItems, USER: ' + rows[0].offer_partner);
  518. logger.debug(items_error);
  519. logger.debug("trying again")
  520. setTimeout(handelOffer, 5000, data);
  521. } else {
  522. receiveditems.forEach(function(itemToReceive) {
  523. connection.query('INSERT INTO `inventory` SET `id` = ' + connection.escape(itemToReceive.id) + ', `market_hash_name` = ' + connection.escape(itemToReceive.market_hash_name) + ', `classid` = ' + connection.escape(itemToReceive.classid) + ', `type` = ' + connection.escape(itemToReceive.type) + ', `bot_id` = ' + connection.escape(bot.steamid) + ', `in_trade` = \'0\'', function(errorXD) {
  524. if (errorXD) {
  525. logger.debug('FUCKING IMPORTANT ERROR OCCURED ON ITEM ID: ' + itemToReceive.id + " (" + itemToReceive.market_hash_name + ")");
  526. logger.debug(errorXD);
  527. }
  528. });
  529. });
  530. connection.query('UPDATE `users` SET `deposit_sum` = `deposit_sum` + ' + rows[0].worth / 1.1 + ', `wallet` = `wallet` + ' + rows[0].worth + ' WHERE `steamid` = ' + connection.escape(rows[0].offer_partner), function(error1) {
  531. if (error1) {
  532. logger.error('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT, user:' + data.partner);
  533. logger.debug(error1);
  534. return;
  535. } else {
  536. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(rows[0].offer_partner) + ', `change` = ' + connection.escape(rows[0].worth) + ', `reason` = \'Deposit\'', function(err2) {
  537. if (err2) {
  538. logger.error('database error at wallet_change');
  539. logger.debug(err2);
  540. }
  541. });
  542. if (users[data.partner]) {
  543. users[data.partner].socket.forEach(function(asocket) {
  544. if (io.sockets.connected[asocket]) {
  545. io.sockets.connected[asocket].emit('notify', 'success', 'depositOfferAccepted', [data.id, rows[0].worth]);
  546. io.sockets.connected[asocket].emit('balance change', rows[0].worth);
  547. }
  548. });
  549. }
  550. }
  551. });
  552. }
  553. });
  554. } else if (rows[0].action == 'withdraw') {
  555. if (data.itemsToGive) {
  556. data.itemsToGive.forEach(function(itemToGive) {
  557. connection.query('DELETE FROM `inventory` WHERE `id` = ' + itemToGive.id, function(errorAeh) {
  558. if (errorAeh) {
  559. logger.error('error while deleting items on item ID: ' + itemToGive.id + " (" + itemToGive.market_hash_name + ")");
  560. logger.debug(errorAeh);
  561. }
  562. });
  563. });
  564. if (users[data.partner]) {
  565. users[data.partner].socket.forEach(function(asocket) {
  566. if (io.sockets.connected[asocket]) {
  567. io.sockets.connected[asocket].emit('notify', 'success', 'withdrawOfferAccepted', [data.id]);
  568. }
  569. });
  570. }
  571. }
  572. }
  573. } else if ((data.state == 7) || (data.state == 5) || (data.state == 6) || (data.state == 1) || (data.state == 4) || (data.state == 8) || (data.state == 10)) {
  574. if (rows[0].action == 'withdraw') {
  575. if (data.itemsToGive) {
  576. data.itemsToGive.forEach(function(update_item) {
  577. connection.query('UPDATE `inventory` SET `in_trade` = \'0\'' + ' WHERE `id` = ' + connection.escape(update_item.assetid), function(err6) {
  578. if (err6) {
  579. logger.error('error at updating in trade items status. id:' + update_item.assetid);
  580. logger.debug(err6);
  581. }
  582. });
  583. });
  584. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + parseInt(rows[0].worth) + ',`withdraw_sum` = `withdraw_sum` - ' + parseInt(rows[0].worth) + ' WHERE `steamid` = ' + connection.escape(rows[0].offer_partner), function(err7) {
  585. if (err7) {
  586. logger.error('IMPORTANT error at updating in trade items status. steamid:' + rows[0].offer_partner);
  587. logger.debug(err7);
  588. }
  589. });
  590. if (users[data.partner]) {
  591. users[data.partner].socket.forEach(function(asocket) {
  592. if (io.sockets.connected[asocket]) {
  593. io.sockets.connected[asocket].emit('balance change', rows[0].worth);
  594. }
  595. });
  596. }
  597. }
  598. }
  599. }
  600. }
  601. });
  602. }
  603. /*
  604. var details = {
  605. "accountName": config.bot_username,
  606. "password": config.bot_password,
  607. "twoFactorCode": SteamTotp.generateAuthCode(sharedsecret)
  608. };
  609. //BOT CLIENT INIT
  610. var client = new SteamUser();
  611. //BOT MANAGER INIT
  612. var manager = new TradeOfferManager({
  613. "steam": client,
  614. "domain": config.manager_domain,
  615. "language": config.manager_lang,
  616. "cancelTime": config.manager_cancelTime
  617. });
  618. client.logOn(details); //bot login
  619. */
  620. connection.connect(); //db connect
  621.  
  622.  
  623. /* */
  624. /* SITE PART */
  625. /* */
  626.  
  627. load();
  628. checkTimer();
  629.  
  630. io.on('connection', function(socket) {
  631. var user = false;
  632. socket.on('init', function(init) {
  633. if (!init) return;
  634. if (init.game === 'roulette') socket.join('roulette');
  635. if (init.game === 'roulette') socket.emit('roulette round', timer / 10, currentBets, actual_hash, pause ? winningNumber : null);
  636. if (init.game === 'roulette') socket.emit('roulette history', lastrolls);
  637. if (init.game === 'coinflip') socket.join('coinflip');
  638. if (init.game === 'coinflip') socket.emit('coinflip history', cfBets);
  639. if (init.game === 'jackpot') socket.join('jackpot');
  640. if (init.game === 'jackpot') socket.emit('jackpot round', jpTimeleft, jpBets, jpWinners);
  641. if (init.game === 'crash') socket.join('crash');
  642. if (init.game === 'crash') socket.emit('crash info', {
  643. hash: ccurrenthash,
  644. players: cbets,
  645. start_in: cstart_in
  646. });
  647. if (init.game === 'crash') socket.emit('crash history', cgame_history);
  648. if (init.game === 'crash') socket.emit('crash settings', {
  649. maxBet: config.max_crash_bet,
  650. minBet: config.min_crash_bet
  651. });
  652. if (init.game === 'crash' && cstatus == 'closed') socket.emit('crash start', {
  653. multiplier: growthFunc(ctime),
  654. time: ctime,
  655. });
  656. if (init.game === 'crash' && init.logged) {
  657. var find = cbets.find(x => x.profile.steamid == init.steamid);
  658. if (find) {
  659. socket.emit('crash my bet', parseInt(find.bet));
  660. }
  661. }
  662. if (init.game === 'dice') socket.join('dice');
  663. if (init.game === 'dice') socket.emit('dice-history', dice_games.filter(function(game){return game.user != null;}))
  664. socket.emit('users online', Object.keys(users).length);
  665. socket.emit('chat', chat_history);
  666. socket.emit('connected');
  667. if (init.logged) {
  668. connection.query('SELECT * FROM `users` WHERE `steamid`=' + connection.escape(init.steamid) + ' AND `token_time`=' + connection.escape(init.time) + ' AND `token`=' + connection.escape(init.token) + ' LIMIT 1', function(err, rows) {
  669. if ((err) || (!rows.length)) {
  670. socket.disconnect();
  671. logger.debug('auth failed.');
  672. return;
  673. } else if (rows) {
  674. if (init.game === 'dice') socket.emit('dice-hash', {
  675. "hash": generateDiceGame(init.steamid)
  676. });
  677. if (rows[0].logged_in) return;
  678. if (rows[0].banned) return;
  679. connection.query('UPDATE `users` SET `logged_in` = 1 WHERE `steamid`=' + connection.escape(init.steamid) + ' AND `token_time`=' + connection.escape(init.time) + ' AND `token`=' + connection.escape(init.token) + ' LIMIT 1', function(err1, rows1) {
  680. if (err1) return logger.error(err1);
  681. user = rows[0];
  682. if (!users[rows[0].steamid]) {
  683. users[rows[0].steamid] = user;
  684. users[rows[0].steamid].socket = [];
  685. }
  686. users[rows[0].steamid]['socket'].push(socket.id);
  687. });
  688. } else {
  689. return;
  690. }
  691. });
  692. }
  693. });
  694. socket.on('disconnect', function() {
  695. var index = -1;
  696. if (users[user.steamid])
  697. index = users[user.steamid]['socket'].indexOf(socket.id);
  698. if (index > -1) {
  699. users[user.steamid]['socket'].splice(index, 1);
  700. }
  701. if (users[user.steamid]) {
  702. if (Object.keys(users[user.steamid]['socket']).length == 0) delete users[user.steamid];
  703. }
  704. connection.query('UPDATE `users` SET `logged_in` = 0 WHERE `steamid`=' + connection.escape(user.steamid) + ' LIMIT 1', function(err1, rows1) {
  705. if (err1) return;
  706. });
  707. });
  708. socket.on('trade token', function(token) {
  709. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  710. if (!token) return socket.emit('notify', 'error', 'tradeTokenFailed');
  711. if (typeof token != 'string') return socket.emit('notify', 'error', 'tradeTokenFailed');
  712. if (/^(.{4,8})$/.test(token)) {
  713. connection.query('UPDATE `users` SET `tradeurl` = ' + connection.escape(token) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err, row) {
  714. if (err) {
  715. socket.emit('notify', 'error', 'tradeTokenFailed');
  716. logger.debug(err);
  717. return;
  718. }
  719. socket.emit('notify', 'success', 'tradeTokenSuccess', [token]);
  720. });
  721. } else {
  722. socket.emit('notify', 'error', 'tradeTokenFailed');
  723. }
  724. });
  725. socket.on('request inventory', function(force) {
  726. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  727. if (!force) var force = false;
  728. if (typeof force != 'boolean') var force = false;
  729. if ((fs.existsSync('cache/' + user.steamid + '.txt')) && (force == false)) {
  730. var inventory = JSON.parse(fs.readFileSync('cache/' + user.steamid + '.txt'));
  731. socket.emit('inventory', {
  732. inventory: inventory.inventory,
  733. prices: inventory.prices,
  734. junk: inventory.junk
  735. });
  736. socket.emit('notify', '', 'loadInventoryCached');
  737. } else {
  738. var steamid_substr = '' + user.steamid;
  739. steamid_substr = steamid_substr.substr(7);
  740. steamid_substr = parseInt(steamid_substr);
  741. var tradelink = 'https://steamcommunity.com/tradeoffer/new/?partner=' + (steamid_substr - 7960265728);
  742.  
  743. var rand = site_bots[Object.keys(site_bots)[Math.floor(Math.random() * Object.keys(site_bots).length)]].manager;
  744. var app = rand.createOffer(tradelink);
  745. app.getPartnerInventoryContents('730', '2', function(get_err, inventory) {
  746. if (get_err) {
  747. logger.error('error occured on inventory request');
  748. logger.debug(get_err);
  749. socket.emit('notify', 'error', 'loadInventoryError');
  750. return;
  751. } else {
  752. var output_prices = [];
  753. for (key in inventory) {
  754. var junk = false;
  755. var obj = inventory[key];
  756. if (prices[obj['market_hash_name']])
  757. var a_price = prices[obj['market_hash_name']] * 900;
  758. else var a_price = 0;
  759. if (a_price < config.min_deposit) {
  760. //a_price = 0;
  761. junk = true;
  762. }
  763. output_prices.push({
  764. market_hash_name: obj['market_hash_name'],
  765. price: a_price,
  766. junk: junk
  767. })
  768. }
  769. fs.writeFile('cache/' + user.steamid + '.txt', JSON.stringify({
  770. inventory: inventory,
  771. prices: output_prices
  772. }), function(fserr) {
  773. if (fserr) {
  774. socket.emit('notify', 'error', 'loadSiteInventoryError');
  775. return logger.debug(fserr);
  776. }
  777. });
  778. socket.emit('inventory', {
  779. inventory: inventory,
  780. prices: output_prices
  781. });
  782. socket.emit('notify', 'success', 'loadInventorySuccess');
  783. }
  784. });
  785. }
  786. });
  787. socket.on('update ref', function(code) {
  788. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  789. if(code.length < 4) return socket.emit('notify', 'error', 'updateRefFailShort', [4]);
  790. if(code.length > 20) return socket.emit('notify', 'error', 'updateRefFailLong', [20]);
  791. if(reservedrefcodes.indexOf(code) != -1) return socket.emit('notify', 'error', 'reservedRefCode');
  792. connection.query('SELECT `code` FROM `users` WHERE `code` = ' + connection.escape(code.toUpperCase()) + ' LIMIT 1', function(codes_error, codes) {
  793. if (codes_error) {
  794. logger.error('failed to check for code');
  795. socket.emit('notify', 'error', 'updateRefFail');
  796. } else {
  797. if (codes.length > 0) {
  798. socket.emit('notify', 'error', 'updateRefAlreadyTaken');
  799. } else {
  800. connection.query('UPDATE `users` SET `code` = ' + connection.escape(code.toUpperCase()) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(codes_update_error) {
  801. if (codes_update_error) {
  802. logger.error(codes_update_error);
  803. return socket.emit('notify', 'error', 'updateRefFail');
  804. } else {
  805. socket.emit('notify', 'success', 'updateRefSuccess');
  806. }
  807. });
  808. }
  809. }
  810. });
  811. });
  812. socket.on('deposit items', function(items) {
  813. logger.debug(items);
  814. if (!active["deposit"]) return [socket.emit('notify', 'error', 'closed'), socket.emit('deposit error')];
  815. if (!user) return [socket.emit('notify', 'error', 'notLoggedIn'), socket.emit('deposit error')];
  816. if (items.length < 1) return [socket.emit('notify', 'error', 'depositNoItemsRequested'), socket.emit('deposit error')];
  817. if (Object.prototype.toString.call(items) !== '[object Array]') return [socket.emit('notify', 'error', 'depositNoItemsRequested'), socket.emit('deposit error')];
  818. if ((new Set(items)).size !== items.length) return [socket.emit('notify', 'error', 'depositDuplicate'), socket.emit('deposit error')]
  819. if (user.deposit_ban) return [socket.emit('notify', 'error', 'depositBanned'), socket.emit('deposit error')];
  820. if (isSteamRIP === false) {
  821. connection.query('SELECT `tradeurl`,`deposit_ban` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  822. if ((err) || (!row.length)) {
  823. logger.debug(err);
  824. socket.emit('notify', 'error', 'serverError');
  825. socket.emit('deposit error');
  826. return;
  827. }
  828. if (row[0].tradeurl.length < 3) return [socket.emit('notify', 'error', 'noTradeToken'), socket.emit('deposit error')];
  829. else if (row[0].deposit_ban == 1) return [socket.emit('notify', 'error', 'depositBanned'), socket.emit('deposit error')];
  830. else {
  831. connection.query('SELECT * FROM `trade_history` WHERE `offer_partner` = ' + connection.escape(user.steamid) + ' AND (`offer_state` = \'sent\' OR `offer_state` = \'pending\' OR `offer_state` = \'2\' OR `offer_state` = \'9\')', function(offer_err, offers) {
  832. if (offer_err) {
  833. logger.debug(offer_err);
  834. socket.emit('notify', 'error', 'serverError');
  835. socket.emit('deposit error');
  836. return;
  837. } else if (offers.length > 0) {
  838. socket.emit('notify', 'error', 'pendingOffer');
  839. socket.emit('deposit error');
  840. return;
  841. } else {
  842. var steamid_substr = '' + user.steamid;
  843. steamid_substr = steamid_substr.substr(7);
  844. steamid_substr = parseInt(steamid_substr);
  845. var tradelink = 'https://steamcommunity.com/tradeoffer/new/?partner=' + (steamid_substr - 7960265728) + '&token=' + row[0].tradeurl;
  846. var rand = site_bots[Object.keys(site_bots)[Math.floor(Math.random() * Object.keys(site_bots).length)]].manager;
  847. var app = rand.createOffer(tradelink);
  848. app.getPartnerInventoryContents('730', '2', function(get_err, inventory) {
  849. if (get_err) {
  850. logger.error('error occured while deposit');
  851. logger.debug(get_err);
  852. socket.emit('notify', 'error', 'depositFailed');
  853. socket.emit('deposit error');
  854. return;
  855. } else {
  856. var names = [];
  857. var hacker = false;
  858. items.forEach(function(item) {
  859. for (key in inventory) {
  860. var object = inventory[key];
  861. if (object.id == item) {
  862. if (prices[object.market_hash_name])
  863. var a_price = prices[object.market_hash_name] * 900;
  864. else var a_price = 0;
  865. if (a_price < config.min_deposit) {
  866. hacker = true;
  867. }
  868. names.push({
  869. market_hash_name: object.market_hash_name,
  870. id: parseInt(object.id),
  871. price: a_price
  872. });
  873. }
  874. }
  875. });
  876. var total_price = 0;
  877. var after_items = [];
  878. names.forEach(function(name) {
  879. total_price += name.price;
  880. after_items.push(name.id);
  881. });
  882. after_items.sort(function(a, b) {
  883. return a - b;
  884. });
  885. items.sort(function(a, b) {
  886. return a - b;
  887. });
  888. if (items.length == after_items.length &&
  889. items.every(function(u, i) {
  890. return u === after_items[i];
  891. })
  892. ) {
  893. if ((total_price < config.min_deposit) || (hacker)) {
  894. socket.emit('notify', 'error', 'depositFailed');
  895. socket.emit('deposit error');
  896. return;
  897. } else {
  898. items.forEach(function(target) {
  899. app.addTheirItem({
  900. appid: 730,
  901. contextid: 2,
  902. amount: 1,
  903. assetid: target
  904. });
  905. });
  906. app.setToken(row[0].tradeurl);
  907. app.getUserDetails(function(a_err, me, them) {
  908. if (a_err) {
  909. logger.error('error occured while deposit');
  910. logger.debug(a_err);
  911. socket.emit('notify', 'error', 'depositFailed');
  912. socket.emit('deposit error');
  913. return;
  914. } else {
  915. if (them.escrowDays == 0) {
  916. app.send(function(error, status) {
  917. if (error) {
  918. logger.error('error occured while deposit');
  919. logger.debug(error);
  920. socket.emit('notify', 'error', 'depositFailed');
  921. socket.emit('deposit error');
  922. return;
  923. } else {
  924. logger.info('Deposit request, items: ' + items);
  925. connection.query('INSERT INTO `trade_history` SET `offer_id`=' + connection.escape(app.id) + ',`offer_partner`=' + connection.escape(user.steamid) + ',`offer_state`=' + connection.escape(status) + ',`worth`=' + total_price + ',`action`=\'deposit\'', function(err1) {
  926. if (err1) {
  927. logger.error('error occured while deposit');
  928. logger.debug(err1);
  929. socket.emit('notify', 'error', 'depositFailed');
  930. socket.emit('deposit error');
  931. return;
  932. } else {
  933. socket.emit('notify', 'success', 'depositOfferSent', [app.id]);
  934. }
  935. });
  936. }
  937. });
  938. } else {
  939. socket.emit('notify', 'error', 'escrowError');
  940. socket.emit('deposit error');
  941. }
  942. }
  943. });
  944. }
  945. } else {
  946. if (items.length == after_items.length) {
  947. logger.error('error here');
  948. logger.debug(items);
  949. logger.debug(after_items);
  950. }
  951. socket.emit('notify', 'error', 'withdrawItemsUnavailable');
  952. socket.emit('deposit error');
  953. return;
  954. }
  955. }
  956. });
  957. }
  958. });
  959. }
  960. });
  961. } else {
  962. socket.emit('notify', 'error', 'withdrawSendError20');
  963. socket.emit('deposit error');
  964. }
  965. });
  966. socket.on('withdraw items', function(items) {
  967. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  968. if (items != null && items.length < 1) return [socket.emit('notify', 'error', 'withdrawNoItemsRequested'), socket.emit('withdraw error')];
  969. if (Object.prototype.toString.call(items) !== '[object Array]') return [socket.emit('notify', 'error', 'withdrawNoItemsRequested'), socket.emit('withdraw error')];
  970. if ((new Set(items)).size !== items.length) return [socket.emit('notify', 'error', 'withdrawDuplicate'), socket.emit('withdraw error')]
  971. if (user.withdraw_ban) return [socket.emit('notify', 'error', 'withdrawSuspected'), socket.emit('withdraw error')];
  972. if (isSteamRIP === false) {
  973. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  974. if ((err) || (!row.length)) {
  975. logger.debug(err);
  976. socket.emit('notify', 'error', 'serverError');
  977. socket.emit('withdraw error');
  978. return;
  979. }
  980. if (row[0].tradeurl.length < 3) return [socket.emit('notify', 'error', 'noTradeToken'), socket.emit('withdraw error')];
  981. else {
  982. connection.query('SELECT * FROM `trade_history` WHERE `offer_partner` = ' + connection.escape(user.steamid) + ' AND (`offer_state` = \'sent\' OR `offer_state` = \'pending\' OR `offer_state` = \'2\' OR `offer_state` = \'9\')', function(offer_err, offers) {
  983. if (offer_err) {
  984. logger.debug(offer_err);
  985. socket.emit('notify', 'error', 'serverError');
  986. socket.emit('withdraw error');
  987. return;
  988. } else if (offers.length > 0) {
  989. socket.emit('notify', 'error', 'pendingOffer');
  990. socket.emit('withdraw error');
  991. return;
  992. } else {
  993. var steamid_substr = '' + user.steamid;
  994. steamid_substr = steamid_substr.substr(7);
  995. steamid_substr = parseInt(steamid_substr);
  996. var tradelink = 'https://steamcommunity.com/tradeoffer/new/?partner=' + (steamid_substr - 7960265728) + '&token=' + row[0].tradeurl;
  997. connection.query('SELECT * FROM `inventory` WHERE `in_trade` = \'0\'', function(inv_err, my_inv) {
  998. if (inv_err) {
  999. logger.debug('error occured while withdraw');
  1000. logger.debug(inv_err);
  1001. socket.emit('notify', 'error', 'withdrawFailed');
  1002. socket.emit('withdraw error');
  1003. return;
  1004. } else {
  1005. var names = [];
  1006. var problem = false;
  1007. var more_bots = false;
  1008. items.forEach(function(item) {
  1009. for (key in my_inv) {
  1010. var object = my_inv[key];
  1011. if (object.id == item) {
  1012. if (object.bot_id !== my_inv[0]['bot_id']) more_bots = true;
  1013. if (prices[object.market_hash_name])
  1014. var a_price = prices[object.market_hash_name] * 1100;
  1015. else {
  1016. var a_price = 0;
  1017. problem = true;
  1018. }
  1019. names.push({
  1020. market_hash_name: object.market_hash_name,
  1021. id: parseInt(object.id),
  1022. price: a_price
  1023. });
  1024. }
  1025. }
  1026. });
  1027. if (more_bots) return [socket.emit('notify', 'error', 'withdrawMultipleBots'), socket.emit('withdraw error')];
  1028. if (!problem) {
  1029. var total_price = 0;
  1030. var after_items = [];
  1031. names.forEach(function(name) {
  1032. total_price += name.price;
  1033. after_items.push(name.id);
  1034. });
  1035. after_items.sort(function(a, b) {
  1036. return a - b;
  1037. });
  1038. items.sort(function(a, b) {
  1039. return a - b;
  1040. });
  1041. if (items.length == after_items.length &&
  1042. items.every(function(u, i) {
  1043. return u === after_items[i];
  1044. })
  1045. ) {
  1046. /*connection.query('SELECT * FROM `trade_history` WHERE `offer_partner` = '+connection.escape(user.steamid)+' AND (`offer_state` = \'3\')', function(select_error, trades) {
  1047. if(select_error){
  1048. logger.debug(select_error);
  1049. socket.emit('notify','error','serverError');
  1050. socket.emit('withdraw error');
  1051. return;
  1052. } */
  1053. var deltaDeposit = row[0].deposit_sum - row[0].withdraw_sum;
  1054.  
  1055. if (row[0].wallet < total_price) {
  1056. socket.emit('notify', 'error', 'notEnoughCoins');
  1057. socket.emit('withdraw error');
  1058. }
  1059. /*else if (row[0].wager < total_price) {
  1060. logger.debug("2");
  1061. socket.emit('notify', 'error', 'withdrawNotEnoughWagered');
  1062. socket.emit('withdraw error');
  1063.  
  1064. } */else if (row[0].deposit_sum < 2500) {
  1065. socket.emit('notify', 'error', 'withdrawNotEnoughDeposit', [row[0].deposit_sum]);
  1066. socket.emit('withdraw error');
  1067. } else if (row[0].total_bet < total_price*0.75) {
  1068. socket.emit('notify', 'error', 'withdrawWagerNeed', [Math.round(total_price*0.75 - row[0].total_bet)]);
  1069. socket.emit('withdraw error');
  1070. } else if (row[0].wallet >= 100000 && row[0].withdraw_approved == 0 && user.rank != "root") {
  1071. socket.emit('notify', 'error', 'withdrawSuspected');
  1072. socket.emit('withdraw error');
  1073. } else if (!active["withdraw"]) {
  1074. logger.debug("5");
  1075. socket.emit('notify', 'error', 'Unkown error, please contact an admin.');
  1076. socket.emit('withdraw error');
  1077. } else {
  1078. connection.query('SELECT `wallet`,`wager` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(wallet_err, balance) {
  1079. if (wallet_err) {
  1080. logger.debug('error occured while withdraw');
  1081. logger.debug(wallet_err);
  1082. socket.emit('notify', 'error', 'withdrawFailed');
  1083. socket.emit('withdraw error');
  1084. return;
  1085. } else {
  1086. if (balance[0].wallet >= total_price) {
  1087. if (!my_inv[0]) return;
  1088. var app = site_bots[my_inv[0]['bot_id']].manager.createOffer(tradelink);
  1089. items.forEach(function(target) {
  1090. app.addMyItem({
  1091. appid: 730,
  1092. contextid: 2,
  1093. amount: 1,
  1094. assetid: target
  1095. });
  1096. });
  1097. app.setToken(row[0].tradeurl);
  1098. app.getUserDetails(function(a_err, me, them) {
  1099. if (a_err) {
  1100. logger.debug('error occured while withdraw');
  1101. logger.debug(a_err);
  1102. socket.emit('notify', 'error', 'withdrawFailed');
  1103. socket.emit('withdraw error');
  1104. return;
  1105. } else {
  1106. if (them.escrowDays == 0) {
  1107. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(total_price) + ',`withdraw_sum` = `withdraw_sum` + ' + parseInt(total_price / 0.9) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err3) {
  1108. if (err3) {
  1109. logger.error('error occured while withdraw, balance change, user: ' + user.steamid);
  1110. logger.debug(err3);
  1111. socket.emit('notify', 'error', 'notEnoughCoins');
  1112. socket.emit('withdraw error');
  1113. return;
  1114. } else {
  1115. items.forEach(function(update_item) {
  1116. connection.query('UPDATE `inventory` SET `in_trade` = \'1\'' + ' WHERE `id` = ' + connection.escape(update_item), function(err6) {
  1117. if (err6) {
  1118. logger.error('error at updating in trade items status. id:' + update_item);
  1119. logger.debug(err6);
  1120. }
  1121. });
  1122. });
  1123. app.send(function(error, status) {
  1124. if (error) {
  1125. items.forEach(function(update_item) {
  1126. connection.query('UPDATE `inventory` SET `in_trade` = \'0\'' + ' WHERE `id` = ' + connection.escape(update_item), function(err9) {
  1127. if (err9) {
  1128. logger.error('error at updating in trade items status. id:' + update_item);
  1129. logger.debug(err9);
  1130. }
  1131. });
  1132. });
  1133. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + parseInt(total_price) + ',`wager` = `wager` + ' + parseInt(total_price) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err4) {
  1134. if (err4) {
  1135. logger.error('FUCK ERROR WHILE RETURNING BALANCE, error occured while withdraw, user: ' + user.steamid);
  1136. logger.debug(err4);
  1137. }
  1138. });
  1139. logger.debug('error occured while withdraw, user: ' + user.steamid);
  1140. logger.debug(error);
  1141. socket.emit('notify', 'error', 'withdrawFailed');
  1142. socket.emit('withdraw error');
  1143. return;
  1144. } else {
  1145. logger.debug('Withdraw request, items: ' + items);
  1146. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = ' + connection.escape('-' + total_price) + ', `reason` = \'Withdraw\'', function(err_wallet_hist) {
  1147. if (err_wallet_hist) {
  1148. logger.debug('database error at wallet_change');
  1149. logger.debug(err_wallet_hist);
  1150. }
  1151. });
  1152. connection.query('INSERT INTO `trade_history` SET `offer_id`=' + connection.escape(app.id) + ',`offer_partner`=' + connection.escape(user.steamid) + ',`offer_state`=' + connection.escape(status) + ',`worth`=' + total_price + ',`action`=\'withdraw\'', function(err1) {
  1153. if (err1) {
  1154. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + parseInt(total_price) + ',`wager` = `wager` + ' + parseInt(total_price) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err5) {
  1155. if (err5) {
  1156. logger.debug('error occured while withdraw, user: ' + user.steamid);
  1157. logger.debug(err5);
  1158. }
  1159. });
  1160. logger.debug('error occured while withdraw, user: ' + user.steamid);
  1161. logger.debug(err1);
  1162. socket.emit('notify', 'error', 'withdrawFailed');
  1163. socket.emit('withdraw error');
  1164. return;
  1165. } else {
  1166. if (users[user.steamid]){
  1167. users[user.steamid].socket.forEach(function(asocket) {
  1168. if (io.sockets.connected[asocket])
  1169. io.sockets.connected[asocket].emit('balance change', parseInt('-' + total_price));
  1170. if (io.sockets.connected[asocket])
  1171. io.sockets.connected[asocket].emit('notify', 'success', 'withdrawOfferSent', [app.id]);
  1172. });
  1173. }
  1174. site_bots[my_inv[0]['bot_id']].community.acceptConfirmationForObject(site_bots[my_inv[0]['bot_id']].identitysecret, app.id, function(err){
  1175. if(err){
  1176. logger.error("error confirming withdraw");
  1177. logger.debug(err);
  1178. }
  1179. });
  1180. }
  1181. });
  1182. }
  1183. });
  1184. }
  1185. });
  1186. } else {
  1187. socket.emit('notify', 'error', 'escrowError');
  1188. socket.emit('withdraw error');
  1189. }
  1190. }
  1191. });
  1192. } else {
  1193. socket.emit('notify', 'error', 'notEnoughCoins');
  1194. socket.emit('withdraw error');
  1195. }
  1196. }
  1197. });
  1198. }
  1199. } else {
  1200. socket.emit('notify', 'error', 'withdrawItemsUnavailable');
  1201. socket.emit('withdraw error');
  1202. return;
  1203. }
  1204. } else {
  1205. socket.emit('notify', 'error', 'withdrawFailed');
  1206. socket.emit('withdraw error');
  1207. return;
  1208. }
  1209. }
  1210. });
  1211. }
  1212. });
  1213. }
  1214. });
  1215. } else {
  1216. socket.emit('notify', 'error', 'withdrawSendError20');
  1217. socket.emit('withdraw error');
  1218. }
  1219. });
  1220. socket.on('roulette play', function(play, color) {
  1221. if (!active["roulette"]) return socket.emit('notify', 'error', 'closed');
  1222. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1223. if ((!play) || (!color)) return socket.emit('notify', 'error', 'roulettePlayFailed');
  1224. if ((typeof play != 'string') && (typeof play != 'number')) return socket.emit('notify', 'error', 'roulettePlayFailed');
  1225. if (typeof color != 'string') return socket.emit('notify', 'error', 'roulettePlayFailed');
  1226. if ((usersBr[user.steamid] !== undefined) && (usersBr[user.steamid] == config.max_roulette_bets)) {
  1227. socket.emit('notify', 'error', 'rouletteMaxBets', [config.max_roulette_bets]);
  1228. return;
  1229. }
  1230. play = parseInt(play);
  1231. if (isNaN(play)) return socket.emit('notify', 'error', 'cannotParseValue');
  1232. play = '' + play;
  1233. play = play.replace(/\D/g, '');
  1234. if (color !== 'green' && color !== 'red' && color !== 'black') return socket.emit('notify', 'error', 'rouletteUnknownColor');
  1235. if (play < 1) return socket.emit('notify', 'error', 'rouletteMinBet', [play, 1]);
  1236. if (play > config.max_roulette_bet) return socket.emit('notify', 'error', 'rouletteMaxBet', [play, config.max_roulette_bet]);
  1237. if (!pause) {
  1238. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1239. if ((err) || (!row.length)) {
  1240. logger.debug(err);
  1241. socket.emit('notify', 'error', 'roulettePlayFailed');
  1242. return;
  1243. }
  1244. if (row[0].wallet >= play) {
  1245. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(play) + ', `total_bet` = `total_bet` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err2, row2) {
  1246. if (err2) {
  1247. logger.debug(err2);
  1248. socket.emit('notify', 'error', 'roulettePlayFailed');
  1249. return;
  1250. }
  1251. if (row[0].deposit_sum >= config.min_bet_wager) {
  1252. connection.query('UPDATE `users` SET `wager` = `wager` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid));
  1253. }
  1254. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = -' + connection.escape(play) + ', `reason` = \'Roulette #' + currentRollid + ' ' + color + '\'', function(err3, row3) {
  1255. if (err3) {
  1256. logger.debug('important error at wallet_change');
  1257. logger.debug(err3);
  1258. socket.emit('notify', 'error', 'serverError');
  1259. return;
  1260. }
  1261. if (usersBr[user.steamid] === undefined) {
  1262. usersBr[user.steamid] = 1;
  1263. } else {
  1264. usersBr[user.steamid]++;
  1265. }
  1266. io.sockets.to('roulette').emit('roulette player', {
  1267. amount: play,
  1268. player: {
  1269. avatar: user.avatar,
  1270. steamid: user.steamid,
  1271. username: user.username
  1272. }
  1273. }, color);
  1274. currentBets[color].push({
  1275. amount: play,
  1276. player: {
  1277. avatar: user.avatar,
  1278. steamid: user.steamid,
  1279. username: user.username
  1280. }
  1281. });
  1282. if (users[user.steamid])
  1283. users[user.steamid].socket.forEach(function(asocket) {
  1284. if (io.sockets.connected[asocket])
  1285. io.sockets.connected[asocket].emit('balance change', parseInt('-' + play));
  1286. if (io.sockets.connected[asocket])
  1287. io.sockets.connected[asocket].emit('notify', 'success', 'roulettePlaySuccess', [play, color, usersBr[user.steamid], config.max_roulette_bets]);
  1288. });
  1289. });
  1290. });
  1291. } else {
  1292. socket.emit('notify', 'error', 'notEnoughCoins');
  1293. }
  1294. });
  1295. } else
  1296. socket.emit('notify', 'error', 'roulettePlayFailed');
  1297. });
  1298. socket.on('coinflip play', function(play, color) {
  1299. if (!active["coinflip"]) return socket.emit('notify', 'error', 'closed');
  1300. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1301. if ((!play) || (!color)) return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1302. if ((typeof play != 'string') && (typeof play != 'number')) return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1303. if (typeof color != 'string') return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1304. play = parseInt(play);
  1305. if (isNaN(play)) return socket.emit('notify', 'error', 'cannotParseValue');
  1306. play = '' + play;
  1307. play = play.replace(/\D/g, '');
  1308. if (color !== 'ct' && color !== 't') return socket.emit('notify', 'error', 'coinflipUnknownColor');
  1309. if (play < config.min_coinflip_bet) return socket.emit('notify', 'error', 'coinflipMinBet', [play, config.min_coinflip_bet]);
  1310. if (play > config.max_coinflip_bet) return socket.emit('notify', 'error', 'coinflipMaxBet', [play, config.max_coinflip_bet]);
  1311. if (betUsers[user.steamid]) return socket.emit('notify', 'error', 'coinflipPending');
  1312. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1313. if ((err) || (!row.length)) {
  1314. logger.debug(err);
  1315. socket.emit('notify', 'error', 'coinflipPlayFailed');
  1316. return;
  1317. }
  1318. if (row[0].wallet >= play) {
  1319. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(play) + ', `total_bet` = `total_bet` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err2, row2) {
  1320. if (row[0].deposit_sum >= config.min_bet_wager) {
  1321. connection.query('UPDATE `users` SET `wager` = `wager` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid));
  1322. }
  1323. if (err2) {
  1324. logger.debug(err2);
  1325. socket.emit('notify', 'error', 'coinflipPlayFailed');
  1326. return;
  1327. }
  1328. var cfUnique = generate(20);
  1329. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = -' + connection.escape(play) + ', `reason` = \'Coinflip #' + cfUnique + ' ' + color.toUpperCase() + '\'', function(err3, row3) {
  1330. if (err3) {
  1331. logger.debug('important error at wallet_change');
  1332. logger.debug(err3);
  1333. socket.emit('notify', 'error', 'serverError');
  1334. return;
  1335. }
  1336. io.sockets.to('coinflip').emit('coinflip game', {
  1337. amount: play,
  1338. player: {
  1339. avatar: user.avatar,
  1340. steamid: user.steamid,
  1341. username: user.username
  1342. },
  1343. status: 'open',
  1344. side: color,
  1345. hash: cfUnique
  1346. });
  1347. cfBets.push({
  1348. amount: play,
  1349. player: {
  1350. avatar: user.avatar,
  1351. steamid: user.steamid,
  1352. username: user.username
  1353. },
  1354. status: 'open',
  1355. side: color,
  1356. hash: cfUnique,
  1357. left: 10
  1358. });
  1359. betUsers[user.steamid] = 1;
  1360. if (users[user.steamid])
  1361. users[user.steamid].socket.forEach(function(asocket) {
  1362. if (io.sockets.connected[asocket])
  1363. io.sockets.connected[asocket].emit('balance change', parseInt('-' + play));
  1364. if (io.sockets.connected[asocket])
  1365. io.sockets.connected[asocket].emit('notify', 'success', 'coinflipPlaySuccess', [play, color.toUpperCase()]);
  1366. });
  1367. });
  1368. });
  1369. } else {
  1370. socket.emit('notify', 'error', 'notEnoughCoins');
  1371. }
  1372. });
  1373. });
  1374. socket.on('coinflip join', function(gameID) {
  1375. if (!active["coinflip"]) return socket.emit('notify', 'error', 'closed');
  1376. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1377. if (!gameID) return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1378. if (typeof gameID != 'string') return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1379. var index = cfBets.map(function(e) {
  1380. return e.hash;
  1381. }).indexOf(gameID);
  1382. if (index > -1) {
  1383. if (!cfBets[index]) return;
  1384. if (cfBets[index].status === 'closed') return socket.emit('notify', 'error', 'coinflipAlreadyJoined');
  1385. if (cfBets[index].player.steamid == user.steamid) return socket.emit('notify', 'error', 'coinflipOwner');
  1386. var play = cfBets[index].amount;
  1387. if (cfBets[index].side === 'ct') {
  1388. var color = 't';
  1389. } else {
  1390. var color = 'ct';
  1391. }
  1392. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1393. if ((err) || (!row.length)) {
  1394. logger.debug(err);
  1395. socket.emit('notify', 'error', 'coinflipPlayFailed');
  1396. return;
  1397. }
  1398. if (row[0].wallet >= play) {
  1399. cfBets[index].status = 'closed';
  1400. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(play) + ', `total_bet` = `total_bet` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err2, row2) {
  1401. if (row[0].deposit_sum >= config.min_bet_wager) {
  1402. connection.query('UPDATE `users` SET `wager` = `wager` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid));
  1403. }
  1404. if (err2) {
  1405. cfBets[index].status = 'open';
  1406. logger.debug(err2);
  1407. socket.emit('notify', 'error', 'coinflipPlayFailed');
  1408. return;
  1409. }
  1410. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = -' + connection.escape(play) + ', `reason` = \'Coinflip #' + cfBets[index].hash + ' ' + color.toUpperCase() + '\'', function(err3, row3) {
  1411. if (err3) {
  1412. cfBets[index].status = 'open';
  1413. logger.debug('important error at wallet_change');
  1414. logger.debug(err3);
  1415. socket.emit('notify', 'error', 'serverError');
  1416. return;
  1417. }
  1418. cfBets[index].opponent = {
  1419. avatar: user.avatar,
  1420. steamid: user.steamid,
  1421. username: user.username
  1422. };
  1423. if (users[user.steamid])
  1424. users[user.steamid].socket.forEach(function(asocket) {
  1425. if (io.sockets.connected[asocket])
  1426. io.sockets.connected[asocket].emit('balance change', parseInt('-' + play));
  1427. if (io.sockets.connected[asocket])
  1428. io.sockets.connected[asocket].emit('notify', 'success', 'coinflipJoin');
  1429. });
  1430. if (users[cfBets[index].player.steamid])
  1431. users[cfBets[index].player.steamid].socket.forEach(function(asocket) {
  1432. if (io.sockets.connected[asocket])
  1433. io.sockets.connected[asocket].emit('notify', 'success', 'coinflipJoined');
  1434. });
  1435. io.sockets.to('coinflip').emit('coinflip update', cfBets[index].hash, {
  1436. avatar: user.avatar,
  1437. steamid: user.steamid,
  1438. username: user.username,
  1439. side: color
  1440. });
  1441. var countDown = setInterval(function() {
  1442. cfBets[index].left -= 1;
  1443. if (cfBets[index].left === 0) {
  1444. clearInterval(countDown);
  1445. }
  1446. }, 1000);
  1447. setTimeout(function() {
  1448. delete betUsers[cfBets[index].player.steamid];
  1449. var possible = ['ct', 't'];
  1450. var wonSide = possible[Math.floor(Math.random() * possible.length)];
  1451. var wonAmount = parseInt(play) * 2;
  1452. wonAmount = Math.floor(wonAmount - (wonAmount * 0.05));
  1453. rakeAmount = Math.floor(wonAmount - (wonAmount * 0.95));
  1454. if (wonSide == color) {
  1455. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + wonAmount + ', `total_won` = `total_won` + ' + wonAmount + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err69, row69) {
  1456. if (err69) {
  1457. return;
  1458. } else {
  1459. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = ' + connection.escape(wonAmount) + ', `reason` = \'Coinflip #' + cfBets[index].hash + ' ' + 'winning!' + '\'', function(err70) {
  1460. if (err70) {
  1461. logger.debug('database error at wallet_change');
  1462. logger.debug(err70);
  1463. }
  1464. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + play + ' WHERE `steamid` = ' + connection.escape(cfBets[index].player.steamid), function(err71) {
  1465. if (err71) logger.debug('error at total lose increase');
  1466. });
  1467. setTimeout(function() {
  1468. if (users[user.steamid]) {
  1469. users[user.steamid].socket.forEach(function(asocket) {
  1470. if (io.sockets.connected[asocket])
  1471. io.sockets.connected[asocket].emit('balance change', wonAmount);
  1472. if (io.sockets.connected[asocket])
  1473. io.sockets.connected[asocket].emit('notify', 'success', 'coinflipWon', [wonAmount]);
  1474. });
  1475. }
  1476. if (users[cfBets[index].player.steamid]) {
  1477. users[cfBets[index].player.steamid].socket.forEach(function(asocket) {
  1478. if (io.sockets.connected[asocket])
  1479. io.sockets.connected[asocket].emit('notify', 'error', 'coinflipLost', [wonAmount]);
  1480. });
  1481. }
  1482. }, 3600);
  1483. });
  1484. }
  1485. });
  1486. } else {
  1487. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + wonAmount + ', `total_won` = `total_won` + ' + wonAmount + ' WHERE `steamid` = ' + connection.escape(cfBets[index].player.steamid), function(err69, row69) {
  1488. if (err69) {
  1489. return;
  1490. } else {
  1491. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(cfBets[index].player.steamid) + ', `change` = ' + connection.escape(wonAmount) + ', `reason` = \'Coinflip #' + cfBets[index].hash + ' ' + 'winning!' + '\'', function(err70) {
  1492. if (err70) {
  1493. logger.debug('database error at wallet_change');
  1494. logger.debug(err70);
  1495. }
  1496. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + play + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err71) {
  1497. if (err71) logger.debug('error at total lose increase');
  1498. });
  1499. setTimeout(function() {
  1500. if (users[cfBets[index].player.steamid]) {
  1501. users[cfBets[index].player.steamid].socket.forEach(function(asocket) {
  1502. if (io.sockets.connected[asocket])
  1503. io.sockets.connected[asocket].emit('balance change', wonAmount);
  1504. if (io.sockets.connected[asocket])
  1505. io.sockets.connected[asocket].emit('notify', 'success', 'coinflipWon', [wonAmount]);
  1506. });
  1507. }
  1508.  
  1509. if (users[user.steamid]) {
  1510. users[user.steamid].socket.forEach(function(asocket) {
  1511. if (io.sockets.connected[asocket])
  1512. io.sockets.connected[asocket].emit('notify', 'error', 'coinflipLost', [wonAmount]);
  1513. });
  1514. }
  1515. }, 3600);
  1516. });
  1517. }
  1518. });
  1519. }
  1520. setTimeout(function() {
  1521. delete cfBets[index];
  1522. }, 60000);
  1523. io.sockets.to('coinflip').emit('coinflip win', cfBets[index].hash, {
  1524. won: wonSide
  1525. });
  1526. }, 10000);
  1527. });
  1528. });
  1529. } else {
  1530. socket.emit('notify', 'error', 'notEnoughCoins');
  1531. }
  1532. });
  1533. } else {
  1534. return socket.emit('notify', 'error', 'coinflipPlayFailed');
  1535. }
  1536. });
  1537. socket.on('crash bet', function(play) {
  1538. if (!active["crash"]) return socket.emit('notify', 'error', 'closed');
  1539. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1540. if (play_try[user.steamid]) return;
  1541. if (cstatus === 'closed' || cstatus === 'drop') return socket.emit('notify', 'error', 'crashPlayFailed');
  1542. if (!play) return socket.emit('notify', 'error', 'crashPlayFailed');
  1543. if (!play.bet) return socket.emit('notify', 'error', 'crashPlayFailed');
  1544. if (typeof play.cashout === 'undefined') return socket.emit('notify', 'error', 'crashPlayFailed');
  1545. if (play.cashout !== '' && typeof play.cashout !== 'number') return socket.emit('notify', 'error', 'crashPlayFailed');
  1546. if (typeof play.bet !== 'number') return socket.emit('notify', 'error', 'crashPlayFailed');
  1547. play.bet = parseInt(play.bet);
  1548. if (isNaN(play.bet)) return socket.emit('notify', 'error', 'cannotParseValue');
  1549. play.bet = '' + play.bet;
  1550. play.bet = play['bet'].replace(/\D/g, '');
  1551. if (play.bet < config.min_crash_bet) return socket.emit('notify', 'error', 'crashMinBet', [play.bet, config.min_crash_bet]);
  1552. if (play.bet > config.max_crash_bet) return socket.emit('notify', 'error', 'crashMaxBet', [play.bet, config.max_crash_bet]);
  1553. play_try[user.steamid] = 1;
  1554. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1555. if ((err) || (!row.length)) {
  1556. return [socket.emit('notify', 'error', 'crashPlayFailed'), logger.debug(err), delete play_try[user.steamid]];
  1557. }
  1558. if (row[0].wallet >= play.bet) {
  1559. var find = cbets.find(x => x.profile.steamid == user.steamid);
  1560. if (find != undefined) return [socket.emit('notify', 'error', 'crashPlayFailed'), delete play_try[user.steamid]];
  1561. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(play.bet) + ', `total_bet` = `total_bet` + ' + parseInt(play.bet) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err2, row2) {
  1562. if (row[0].deposit_sum >= config.min_bet_wager) {
  1563. connection.query('UPDATE `users` SET `wager` = `wager` + ' + parseInt(play.bet) + ' WHERE `steamid` = ' + connection.escape(user.steamid));
  1564. }
  1565. if (err2) {
  1566. return [socket.emit('notify', 'error', 'crashPlayFailed'), logger.debug(err2), delete play_try[user.steamid]];
  1567. } else {
  1568. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = -' + connection.escape(play.bet) + ', `reason` = \'Crash #' + cgame + ' - cashout at ' + play.cashout + '\'', function(err3, row3) {
  1569. if (err3) {
  1570. return [logger.debug('important error at wallet_change'), logger.debug(err3), socket.emit('notify', 'error', 'serverError'), delete play_try[user.steamid]];
  1571. } else {
  1572. cbets.push({
  1573. bet: play.bet,
  1574. profile: {
  1575. avatar: user.avatar,
  1576. steamid: user.steamid,
  1577. username: user.username
  1578. }
  1579. });
  1580. players_cashouts[user.steamid] = play.cashout;
  1581. io.sockets.to('crash').emit('player new', [{
  1582. bet: play.bet,
  1583. profile: {
  1584. avatar: user.avatar,
  1585. steamid: user.steamid,
  1586. username: user.username
  1587. }
  1588. }]);
  1589. delete play_try[user.steamid];
  1590. if (users[user.steamid])
  1591. users[user.steamid].socket.forEach(function(asocket) {
  1592. if (io.sockets.connected[asocket])
  1593. io.sockets.connected[asocket].emit('balance change', parseInt('-' + play.bet));
  1594. if (io.sockets.connected[asocket])
  1595. io.sockets.connected[asocket].emit('notify', 'success', 'crashPlaySuccess', [play.bet]);
  1596. });
  1597. }
  1598. });
  1599. }
  1600. });
  1601. } else {
  1602. delete play_try[user.steamid];
  1603. return socket.emit('notify', 'error', 'notEnoughCoins');
  1604. }
  1605. });
  1606. });
  1607. socket.on('crash withdraw', function() {
  1608. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1609. crashWithdraw(user);
  1610. });
  1611. socket.on('jackpot play', function(play) {
  1612. if (!active["jackpot"]) return socket.emit('notify', 'error', 'closed');
  1613. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1614. if (!play) return socket.emit('notify', 'error', 'jackpotPlayFailed');
  1615. if ((typeof play != 'string') && (typeof play != 'number')) return socket.emit('notify', 'error', 'jackpotPlayFailed');
  1616. play = parseInt(play);
  1617. if (isNaN(play)) return socket.emit('notify', 'error', 'cannotParseValue');
  1618. play = '' + play;
  1619. play = play.replace(/\D/g, '');
  1620. if (play < config.min_jackpot_bet) return socket.emit('notify', 'error', 'jackpotMinBet', [play, config.min_jackpot_bet]);
  1621. if (play > config.max_jackpot_bet) return socket.emit('notify', 'error', 'jackpotMaxBet', [play, config.max_jackpot_bet]);
  1622. if (jpUsers[user.steamid]) return socket.emit('notify', 'error', 'jackpotPending');
  1623. if (!jpAllow) return socket.emit('notify', 'error', 'jackpotTime');
  1624. jpUsers[user.steamid] = 2;
  1625. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1626. if ((err) || (!row.length)) {
  1627. delete jpUsers[user.steamid];
  1628. return [socket.emit('notify', 'error', 'jackpotPlayFailed'), logger.debug(err)];
  1629. }
  1630. if (row[0].wallet >= play) {
  1631. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + parseInt(play) + ', `total_bet` = `total_bet` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err2, row2) {
  1632. if (row[0].deposit_sum >= config.min_bet_wager) {
  1633. connection.query('UPDATE `users` SET `wager` = `wager` + ' + parseInt(play) + ' WHERE `steamid` = ' + connection.escape(user.steamid));
  1634. }
  1635. if (err2) {
  1636. delete jpUsers[user.steamid];
  1637. return [socket.emit('notify', 'error', 'jackpotPlayFailed'), logger.debug(err2)];
  1638. } else {
  1639. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = -' + connection.escape(play) + ', `reason` = \'Jackpot ' + 'play' + '\'', function(err3, row3) {
  1640. if (err3) {
  1641. delete jpUsers[user.steamid];
  1642. return [logger.debug('important error at wallet_change'), logger.debug(err3), socket.emit('notify', 'error', 'serverError')];
  1643. } else {
  1644. logger.trace(Object.keys(jpUsers).length);
  1645. if (jpTimeleft == -1 && Object.keys(jpUsers).length > 1) jackpotTimer();
  1646. jpBets.push({
  1647. amount: play,
  1648. player: {
  1649. avatar: user.avatar,
  1650. steamid: user.steamid,
  1651. username: user.username
  1652. },
  1653. rangeMin: jpPool + 1,
  1654. rangeMax: jpPool + parseInt(play),
  1655. total: jpPool + parseInt(play)
  1656. });
  1657. jpPool += parseInt(play);
  1658. io.sockets.to('jackpot').emit('jackpot new bet', {
  1659. amount: play,
  1660. player: {
  1661. avatar: user.avatar,
  1662. steamid: user.steamid,
  1663. username: user.username
  1664. },
  1665. total: jpPool
  1666. });
  1667. if (users[user.steamid])
  1668. users[user.steamid].socket.forEach(function(asocket) {
  1669. if (io.sockets.connected[asocket])
  1670. io.sockets.connected[asocket].emit('balance change', parseInt('-' + play));
  1671. if (io.sockets.connected[asocket])
  1672. io.sockets.connected[asocket].emit('notify', 'success', 'jackpotPlaySuccess', [play]);
  1673. });
  1674. }
  1675. });
  1676. }
  1677. });
  1678. } else {
  1679. delete jpUsers[user.steamid];
  1680. return socket.emit('notify', 'error', 'notEnoughCoins');
  1681. }
  1682. });
  1683. });
  1684. socket.on('dice-bet', function(play) {
  1685. if (!active["dice"]) return socket.emit('notify', 'error', 'closed');
  1686. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1687. if (!play) return socket.emit('notify', 'error', 'dicePlayFailed');
  1688. if ((typeof play.value != 'string') && (typeof play.value != 'number')) return socket.emit('notify', 'error', 'dicePlayFailed');
  1689. if ((typeof play.limit != 'string') && (typeof play.limit != 'number')) return socket.emit('notify', 'error', 'dicePlayFailed');
  1690. if ((typeof play.type != 'string') && (typeof play.type != 'number')) return socket.emit('notify', 'error', 'dicePlayFailed');
  1691. betAmount = parseInt(play.value);
  1692. if (betAmount < 0) return socket.emit('notify', 'error', 'dicePlayFailed');
  1693. play.limit = parseInt(play.limit);
  1694. type = parseInt(play.type)
  1695. if (isNaN(betAmount)) return socket.emit('notify', 'error', 'cannotParseValue');
  1696. if (isNaN(play.limit)) return socket.emit('notify', 'error', 'cannotParseValue');
  1697. if (isNaN(type)) return socket.emit('notify', 'error', 'cannotParseValue');
  1698.  
  1699. if (play.limit < 5 || play.limit > 9500) return socket.emit('notify', 'error', 'dicePlayFailed');
  1700.  
  1701. if (betAmount < config.min_dice_bet) return socket.emit('notify', 'error', 'diceMinBet', [play, config.min_dice_bet]);
  1702. if (betAmount > config.max_dice_bet) return socket.emit('notify', 'error', 'diceMaxBet', [play, config.max_dice_bet]);
  1703.  
  1704. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1705. if ((err) || (!row.length)) {
  1706. return [socket.emit('notify', 'error', 'dicePlayFailed'), logger.debug(err)];
  1707. }
  1708. if (row[0].wallet >= betAmount) {
  1709. connection.query('UPDATE `users` SET `wallet` = `wallet` - '+parseInt(betAmount)+', `total_bet` = `total_bet` + '+parseInt(betAmount)+' WHERE `steamid` = '+connection.escape(user.steamid), function(err2, row2) {
  1710.  
  1711. if(err2) {
  1712. return [socket.emit('notify','error','dicePlayFailed'),logger.debug(err2)];
  1713. } else {
  1714. if(row[0].deposit_sum >= config.min_bet_wager){
  1715. connection.query('UPDATE `users` SET `wager` = `wager` + '+parseInt(betAmount)+' WHERE `steamid` = '+connection.escape(user.steamid), function(err3) {
  1716. if (err3) {
  1717. logger.error('error updating wager: ' + user.steamid);
  1718. logger.debug(err3);
  1719. }
  1720. else{
  1721. connection.query('INSERT INTO `wallet_change` SET `user` = '+connection.escape(user.steamid)+', `change` = -'+connection.escape(betAmount)+', `reason` = \'Dice '+'play'+'\'', function(err4, row3) {
  1722. if(err4) {
  1723. return [logger.error('important error at wallet_change'),logger.debug(err3),socket.emit('notify','error','serverError')];
  1724. } else {
  1725. if (users[user.steamid])
  1726. users[user.steamid].socket.forEach(function(asocket) {
  1727. if (io.sockets.connected[asocket])
  1728. io.sockets.connected[asocket].emit('balance change', parseInt('-' + betAmount));
  1729. });
  1730. var currgame = dice_games[user_dice_current[user.steamid]];
  1731. var multiplier = ((100 / (((play.type == 0 || play.type == "0") ? play.limit : 10000 - play.limit) / 100)) * (1 - 0.04));
  1732. if (play.type == 0 || play.type == "0") {
  1733. if (currgame.roll < play.limit) {
  1734. //won
  1735. profit = betAmount * multiplier - betAmount;
  1736. } else {
  1737. profit = -betAmount;
  1738.  
  1739. }
  1740.  
  1741. } else {
  1742. if (currgame.roll > play.limit) {
  1743. //won
  1744. profit = betAmount * multiplier - betAmount;
  1745. } else {
  1746. profit = -betAmount;
  1747. }
  1748. }
  1749. dice_games[user_dice_current[user.steamid]] = {
  1750. "hash": currgame.hash,
  1751. "id": dice_games.count,
  1752. "limit": play.limit,
  1753. "multiplier": multiplier,
  1754. "profit": profit,
  1755. "roll": currgame.roll,
  1756. "secret": currgame.secret,
  1757. "type": play.type,
  1758. "value": betAmount,
  1759. "user": {
  1760. "avatar": user.avatar,
  1761. "id": user.steamid,
  1762. "rank": user.rank,
  1763. "username": user.username
  1764. }
  1765. };
  1766. if(profit > 0){
  1767. connection.query('UPDATE `users` SET `wallet` = `wallet` + '+parseInt(betAmount * multiplier)+', `total_bet` = `total_bet` + '+parseInt(betAmount * multiplier)+' WHERE `steamid` = '+connection.escape(user.steamid), function(err5, row2) {
  1768.  
  1769. if(err5) {
  1770. return [socket.emit('notify','error','dicePlayFailed'),logger.debug(err2)];
  1771. } else {
  1772. connection.query('INSERT INTO `wallet_change` SET `user` = '+connection.escape(user.steamid)+', `change` = '+connection.escape(betAmount * multiplier)+', `reason` = \'Dice '+'win'+'\'', function(err6, row3) {
  1773. if(err6) {
  1774. return [logger.error('important error at wallet_change'),logger.debug(err3),socket.emit('notify','error','serverError')];
  1775. }
  1776. });
  1777. }
  1778. });
  1779. }
  1780. io.sockets.emit('dice-game', {
  1781. "game": dice_games[user_dice_current[user.steamid]]
  1782. });
  1783. socket.emit('dice-result', {
  1784. "game": dice_games[user_dice_current[user.steamid]],
  1785. "hash": generateDiceGame(user.steamid)
  1786. });
  1787.  
  1788. }
  1789. });
  1790. }
  1791. });
  1792. }
  1793. }
  1794. });
  1795. } else {
  1796. return socket.emit('notify', 'error', 'notEnoughCoins');
  1797. }
  1798. });
  1799. });
  1800. /*socket.on('mines start', function(play) {
  1801. if (!active["mines"]) return socket.emit('notify', 'error', 'closed');
  1802. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1803. if (!play) return socket.emit('notify', 'error', 'minesPlayFailed');
  1804. if ((typeof play.amount != 'string') && (typeof play.amount != 'number')) return socket.emit('notify', 'error', 'minesPlayFailed');
  1805. if ((typeof play.bombs != 'string') && (typeof play.bombs != 'number')) return socket.emit('notify', 'error', 'minesPlayFailed');
  1806. betAmount = parseInt(play.amount);
  1807. bombs = parseInt(play.bombs);
  1808.  
  1809. if (isNaN(betAmount)) return socket.emit('notify', 'error', 'cannotParseValue');
  1810. if (isNaN(bombs)) return socket.emit('notify', 'error', 'cannotParseValue');
  1811.  
  1812. if (betAmount < config.min_dice_bet) return socket.emit('notify', 'error', 'minesMinBet', [play, config.min_dice_bet]);
  1813. if (betAmount > config.max_dice_bet) return socket.emit('notify', 'error', 'minesMaxBet', [play, config.max_dice_bet]);
  1814.  
  1815. connection.query('SELECT `wallet`,`deposit_sum` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  1816. if ((err) || (!row.length)) {
  1817. return [socket.emit('notify', 'error', 'minesPlayFailed'), logger.debug(err)];
  1818. }
  1819. if (row[0].wallet >= betAmount) {
  1820. /* connection.query('UPDATE `users` SET `wallet` = `wallet` - '+parseInt(play)+', `total_bet` = `total_bet` + '+parseInt(play)+' WHERE `steamid` = '+connection.escape(user.steamid), function(err2, row2) {
  1821. if(row[0].deposit_sum >= config.min_bet_wager){
  1822. connection.query('UPDATE `users` SET `wager` = `wager` + '+parseInt(play)+' WHERE `steamid` = '+connection.escape(user.steamid));
  1823. }
  1824. if(err2) {
  1825. return [socket.emit('notify','error','dicePlayFailed'),logger.debug(err2)];
  1826. } else {
  1827. connection.query('INSERT INTO `wallet_change` SET `user` = '+connection.escape(user.steamid)+', `change` = -'+connection.escape(play)+', `reason` = \'Dice '+'play'+'\'', function(err3, row3) {
  1828. if(err3) {
  1829. return [logger.debug('important error at wallet_change'),logger.debug(err3),socket.emit('notify','error','serverError')];
  1830. } else {*//*
  1831. var gameID = mines_games.length;
  1832. var arraytmp = [];
  1833. for (var i = 1; i <= 25; i++) {
  1834. arraytmp[i] = i;
  1835. }
  1836. arraytmp.sort(function() {
  1837. return .5 - Math.random();
  1838. });
  1839. var mines = [];
  1840. for (var i = 0; i < bombs; i++) {
  1841. mines[i] = arraytmp[i];
  1842. }
  1843. var secret = sha256(generate(128));
  1844. var hash = sha256(bombs + ":" + secret);
  1845. user_mines_current[user.steamid] = gameID;
  1846. mines_games[gameID]={
  1847. "id":gameID,
  1848. "bet": betAmount,
  1849. "bombs": bombs,
  1850. "hash": hash,
  1851. "payout": betAmount,
  1852. "secret": secret,
  1853. "nextPayout": 2,
  1854. "selectedTiles": [],
  1855. "mines": mines
  1856. };
  1857. socket.emit("mines start", {
  1858. "id":gameID,
  1859. "bet": betAmount,
  1860. "bombs": bombs,
  1861. "hash": hash,
  1862. "nextPayout": 2,
  1863. "selectedTiles": []
  1864. });
  1865. /* }
  1866. });
  1867. }
  1868. });*//*
  1869. } else {
  1870. return socket.emit('notify', 'error', 'notEnoughCoins');
  1871. }
  1872. });
  1873. });
  1874. socket.on('mines click', function(play) {
  1875. if (!active["mines"]) return socket.emit('notify', 'error', 'closed');
  1876. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1877. if (!play) return socket.emit('notify', 'error', 'minesPlayFailed');
  1878. if ((typeof play.position != 'string') && (typeof play.position != 'number')) return socket.emit('notify', 'error', 'minesPlayFailed');
  1879. position = parseInt(play.position);
  1880.  
  1881. if (isNaN(position)) return socket.emit('notify', 'error', 'cannotParseValue');
  1882. mines_games[user_mines_current[user.steamid]].payout+=mines_games[user_mines_current[user.steamid]].nextPayout;
  1883. mines_games[user_mines_current[user.steamid]].nextPayout+=1;
  1884. mines_games[user_mines_current[user.steamid]].selectedTiles.push(position);
  1885. if(mines_games[user_mines_current[user.steamid]].mines.includes(position)){
  1886. socket.emit("mines game", {
  1887. "id": user_mines_current[user.steamid],
  1888. "payout": mines_games[user_mines_current[user.steamid]].payout,
  1889. "position": position,
  1890. "nextPayout": mines_games[user_mines_current[user.steamid]].nextPayout,
  1891. "value": -1,
  1892. "secret": mines_games[user_mines_current[user.steamid]].secret,
  1893. });
  1894. }
  1895. else{
  1896. socket.emit("mines game", {
  1897. "id": user_mines_current[user.steamid],
  1898. "payout": mines_games[user_mines_current[user.steamid]].payout,
  1899. "position": position,
  1900. "nextPayout": mines_games[user_mines_current[user.steamid]].nextPayout,
  1901. "value": mines_games[user_mines_current[user.steamid]].nextPayout-1
  1902. });
  1903. }
  1904. });*/
  1905. socket.on('chat message', function(chat) {
  1906. if ((!chat.message) || (!chat.type)) return;
  1907. if ((typeof chat.message != 'string') || (typeof chat.type != 'string')) return;
  1908. if (last_message[user.steamid] + 1 >= time()) {
  1909. return;
  1910. } else {
  1911. last_message[user.steamid] = time();
  1912. }
  1913. if (!user) return socket.emit('notify', 'error', 'notLoggedIn');
  1914. if (chat && chat.message) {
  1915. if (chat.message.indexOf('/') === 0) {
  1916. var res = null;
  1917. if (chat.message.indexOf('/send') === 0) {
  1918. if (res = /^\/send ([0-9]{17}) ([0-9]{1,})/.exec(chat.message)) {
  1919. if ((res[2] < 1) || (res[2] > 100000)) {
  1920. return socket.emit('notify', 'error', 'chatSendOutOfRange');
  1921. } else {
  1922. var send_amount = parseInt(res[2]);
  1923. if (isNaN(send_amount)) return socket.emit('notify', 'error', 'cannotParseValue');
  1924. connection.query('SELECT `* FROM `users` WHERE `steamid` = ' + user.steamid + ' LIMIT 1', function(error, ppl) {
  1925. if (error) {
  1926. logger.debug(error);
  1927. return socket.emit('notify', 'error', 'chatSendFail', [res[2], res[1]]);
  1928. } else {
  1929. if (ppl[0].total_bet < config.min_bet_send) {
  1930. return socket.emit('notify', 'error', 'chatSendNotEnoughCoins', [config.min_bet_send]);
  1931. } else if (ppl[0].deposit_sum < config.min_deposit_send) {
  1932. return socket.emit('notify', 'error', 'chatSendNotEnoughDeposit', [config.min_deposit_send]);
  1933. } else if (ppl[0].wallet < send_amount) {
  1934. return socket.emit('notify', 'error', 'chatSendOutOfRange');
  1935. } else if (ppl[0].transfer_banned || (ppl[0].wallet >= 100000 && ppl[0].withdraw_approved == 0 && user.rank != "root")) {
  1936. return socket.emit('notify', 'error', 'chatSendUnavailable');
  1937. } else {
  1938. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + res[1], function(error_2, receiver) {
  1939. if (error_2) {
  1940. logger.debug(error_2);
  1941. return socket.emit('notify', 'error', 'chatSendFail', [res[2], res[1]]);
  1942. } else {
  1943. if ((!receiver) || (!receiver.length)) {
  1944. return socket.emit('notify', 'error', 'chatSendFail', [res[2], res[1]]);
  1945. } else {
  1946. connection.query('UPDATE `users` SET `wallet` = `wallet` - ' + send_amount + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(error_3) {
  1947. if (error_3) {
  1948. logger.debug(error_3);
  1949. return socket.emit('notify', 'error', 'chatSendFail', [res[2], res[1]]);
  1950. } else {
  1951. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + send_amount + ' WHERE `steamid` = ' + connection.escape(res[1]), function(error_4) {
  1952. if (error_4) {
  1953. logger.debug('error. cant give coins to receiver! ' + res[1]);
  1954. logger.debug(error_4);
  1955. return socket.emit('notify', 'error', 'chatSendFail', [res[2], res[1]]);
  1956. } else {
  1957. connection.query('INSERT INTO `wallet_change` SET `change` = ' + connection.escape('-' + send_amount) + ',`reason` = ' + connection.escape('Sent ' + send_amount + ' coins to ' + res[1]) + ',`user` = ' + connection.escape(user.steamid), function(error_5) {
  1958. if (error_5) {
  1959. logger.debug('error. not inserted wallet change for sender.');
  1960. logger.debug(error_5);
  1961. } else {
  1962. connection.query('INSERT INTO `wallet_change` SET `change` = ' + connection.escape(send_amount) + ',`reason` = ' + connection.escape('Received ' + send_amount + ' coins from ' + user.steamid) + ',`user` = ' + connection.escape(res[1]), function(error_6) {
  1963. if (error_6) {
  1964. logger.debug('error. not inserted wallet change for receiver.');
  1965. logger.debug(error_6);
  1966. }
  1967. });
  1968. }
  1969. });
  1970. if (users[user.steamid])
  1971. users[user.steamid].socket.forEach(function(asocket) {
  1972. if (io.sockets.connected[asocket]) {
  1973. io.sockets.connected[asocket].emit('balance change', parseInt('-' + send_amount));
  1974. io.sockets.connected[asocket].emit('notify', 'success', 'chatSendSuccess', [send_amount, res[1]]);
  1975. }
  1976. });
  1977. if (users[res[1]])
  1978. users[res[1]].socket.forEach(function(asocket) {
  1979. if (io.sockets.connected[asocket]) {
  1980. io.sockets.connected[asocket].emit('balance change', send_amount);
  1981. io.sockets.connected[asocket].emit('notify', 'success', 'chatSendReceived', [send_amount, res[1]]);
  1982. }
  1983. });
  1984. }
  1985. });
  1986. }
  1987. });
  1988. }
  1989. }
  1990. });
  1991. }
  1992. }
  1993. });
  1994. }
  1995. } else {
  1996. socket.emit('notify', 'error', 'chatMissingParameters');
  1997. }
  1998. }
  1999. else if (chat.message.indexOf('/ref') === 0) {
  2000. if (res = /^\/ref (.)/.exec(chat.message)) {
  2001. if (res = /^\/ref (.{2,254})/.exec(chat.message)) {
  2002. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(user_error, ouruser) {
  2003. if ((user_error) || (ouruser.length !== 1)) {
  2004. logger.debug('cannot get user from referral');
  2005. logger.debug(user_error);
  2006. return;
  2007. } else if ((ouruser) && (ouruser.length === 1) && (ouruser[0].inviter.length > 0)) {
  2008. return socket.emit('notify', 'error', 'chatReferralAlreadyUsed');
  2009. } else {
  2010. if (user.csgo == 'true') {
  2011. connection.query('SELECT * FROM `users` WHERE `code` = ' + connection.escape(res[1].toUpperCase()) + ' LIMIT 1', function(codes_error, codes) {
  2012. if (codes_error) {
  2013. socket.emit('notify', 'error', 'chatReferralFailed');
  2014. } else if ((codes[0]) && (codes[0].steamid == user.steamid)) {
  2015. socket.emit('notify', 'error', 'chatReferralOwnCode');
  2016. } else {
  2017. if (codes.length > 0) {
  2018. connection.query('UPDATE `users` SET `inviter` = ' + connection.escape(codes[0].steamid) + ', `wallet` = `wallet` + 100 WHERE `steamid` = ' + connection.escape(user.steamid), function(update_code_error, update_code) {
  2019. if (update_code_error) {
  2020. logger.debug('error while referal');
  2021. logger.debug(update_code_error);
  2022. socket.emit('notify', 'error', 'chatReferralFailed');
  2023. return;
  2024. } else {
  2025. connection.query('INSERT INTO `wallet_change` SET `change` = \'100\',`reason` = \'Referral - free\',`user` = ' + connection.escape(user.steamid));
  2026. }
  2027. });
  2028. socket.emit('notify', 'success', 'chatReferralSuccess', [res[1], 100]);
  2029. if (users[user.steamid])
  2030. users[user.steamid].socket.forEach(function(asocket) {
  2031. if (io.sockets.connected[asocket]) {
  2032. io.sockets.connected[asocket].emit('balance change', 100);
  2033. }
  2034. });
  2035. } else {
  2036. socket.emit('notify', 'error', 'chatReferralUnknown');
  2037. }
  2038. }
  2039. });
  2040. } else {
  2041. socket.emit('notify', 'error', 'chatReferralNoCSGO');
  2042. }
  2043. }
  2044. });
  2045. } else {
  2046. socket.emit('notify', 'error', 'chatReferralUnknown');
  2047. }
  2048. } else {
  2049. socket.emit('notify', 'error', 'chatMissingParameters');
  2050. }
  2051. }
  2052. else if (chat.message.indexOf('/muteChat') === 0) {
  2053. if ((user.rank === 'siteAdmin') || (user.rank === 'root')) {
  2054. chat_muted = true;
  2055. socket.emit('notify', 'success', 'chatMuted');
  2056. } else {
  2057. socket.emit('notify', 'error', 'chatAdminAccess');
  2058. }
  2059. }
  2060. else if (chat.message.indexOf('/unmuteChat') === 0) {
  2061. if ((user.rank === 'siteAdmin') || (user.rank === 'root')) {
  2062. chat_muted = false;
  2063. socket.emit('notify', 'success', 'chatUnmuted');
  2064. } else {
  2065. socket.emit('notify', 'error', 'chatAdminAccess');
  2066. }
  2067. }
  2068. else if (chat.message.indexOf('/access') === 0) {
  2069. if (user.rank === 'root') {
  2070. if (res = /^\/access ([0-9]{17}) (.{1,})/.exec(chat.message)) {
  2071. if ((res[2] == 'user') || (res[2] == 'siteMod') || (res[2] == 'siteAdmin') || (res[2] == 'root') || (res[2] == 'youtuber') || (res[2] == 'twitch')) {
  2072. connection.query('UPDATE `users` SET `rank` = ' + connection.escape(res[2]) + ' WHERE `steamid` = ' + connection.escape(res[1]), function(access_err) {
  2073. var levels = {
  2074. user: 1,
  2075. siteMod: 2,
  2076. siteAdmin: 3,
  2077. root: 4
  2078. };
  2079. if (access_err) {
  2080. return socket.emit('notify', 'error', 'chatAccessLevelFailed', [levels[res[2]], res[1]]);
  2081. } else {
  2082. return socket.emit('notify', 'success', 'chatAccessLevelSuccess', [levels[res[2]], res[1]]);
  2083. }
  2084. });
  2085. } else {
  2086. return socket.emit('notify', 'error', 'chatAccessLevelOutOfRange');
  2087. }
  2088. } else {
  2089. socket.emit('notify', 'error', 'chatMissingParameters');
  2090. }
  2091. } else {
  2092. socket.emit('notify', 'error', 'chatRootAccess');
  2093. }
  2094. }
  2095. else if (chat.message.indexOf('/give') === 0) {
  2096. if (user.rank === 'root') {
  2097. if (res = /^\/give ([0-9]{17}) ([0-9]{1,})/.exec(chat.message)) {
  2098. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + connection.escape(res[2]) + ' WHERE `steamid` = ' + connection.escape(res[1]), function(give_error) {
  2099. if (give_error) {
  2100. logger.debug(give_error);
  2101. socket.emit('notify', 'error', 'chatGiveFail');
  2102. } else {
  2103. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(res[1]) + ', `change` = ' + connection.escape(res[2]) + ', `reason` = \'Received from server\'');
  2104. if (users[res[1]]) {
  2105. users[res[1]].socket.forEach(function(asocket) {
  2106. if (io.sockets.connected[asocket])
  2107. io.sockets.connected[asocket].emit('balance change', parseInt(res[2]));
  2108. });
  2109. }
  2110. socket.emit('notify', 'success', 'chatGiveSuccess', [res[2], res[1]]);
  2111. }
  2112. });
  2113. } else {
  2114. socket.emit('notify', 'error', 'chatMissingParameters');
  2115. }
  2116. } else {
  2117. socket.emit('notify', 'error', 'chatRootAccess');
  2118. }
  2119. }
  2120. else if (chat.message.indexOf('/coins') === 0) {
  2121. if ((user.rank === 'siteAdmin') || (user.rank === 'root')) {
  2122. connection.query('SELECT SUM(`wallet`) AS `sum` FROM `users`', function(error, total) {
  2123. if (error) {
  2124. return;
  2125. } else {
  2126. var total = total[0].sum;
  2127. var total_inv = 0;
  2128. connection.query('SELECT * FROM `inventory`', function(inv_err, inventory) {
  2129. if (inv_err) {
  2130. return;
  2131. } else {
  2132. for (key in inventory) {
  2133. var obj = inventory[key];
  2134. if (prices[obj['market_hash_name']])
  2135. var a_price = prices[obj['market_hash_name']] * 1000;
  2136. else var a_price = 0;
  2137. total_inv += a_price;
  2138. }
  2139. socket.emit('notify', 'success', 'chatCoinsBalance', [0, total_inv, total]);
  2140. }
  2141. });
  2142. }
  2143. });
  2144. } else {
  2145. socket.emit('notify', 'error', 'chatRootAccess');
  2146. }
  2147. }
  2148. else if (chat.message.indexOf('/mute') === 0) {
  2149. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2150. if (res = /^\/mute ([0-9]{17}) ([0-9]{1,})/.exec(chat.message)) {
  2151. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(mute_err, mute_callback) {
  2152. if (mute_err) {
  2153. return socket.emit('notify', 'error', 'chatMuteFail', [res[1]]);
  2154. } else {
  2155. if ((mute_callback) && (mute_callback.length)) {
  2156. if (mute_callback[0].rank == 'user') {
  2157. var mutedFor = time() + res[2]*60;
  2158. connection.query('UPDATE `users` SET `muted` = ' + connection.escape(mutedFor) + ' WHERE `steamid` = ' + connection.escape(res[1]), function(mute_err1) {
  2159. if (mute_err1) {
  2160. return socket.emit('notify', 'error', 'chatMuteFail', [res[1]]);
  2161. } else {
  2162. if (users[res[1]]) users[res[1]].muted = mutedFor;
  2163. return socket.emit('notify', 'success', 'chatMuteSuccess', [res[1]]);
  2164. }
  2165. });
  2166. } else {
  2167. return socket.emit('notify', 'error', 'chatMuteStaff');
  2168. }
  2169. } else {
  2170. return socket.emit('notify', 'error', 'chatMuteFail', [res[1]]);
  2171. }
  2172. }
  2173. });
  2174. } else {
  2175. socket.emit('notify', 'error', 'chatMissingParameters');
  2176. }
  2177. } else {
  2178. socket.emit('notify', 'error', 'chatModAccess');
  2179. }
  2180. }
  2181. else if (chat.message.indexOf('/unmute') === 0) {
  2182. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2183. if (res = /^\/unmute ([0-9]{17})/.exec(chat.message)) {
  2184. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(unmute_err, unmute_callback) {
  2185. if (unmute_err) {
  2186. return socket.emit('notify', 'error', 'chatUnmuteFail', [res[1]]);
  2187. } else {
  2188. if ((unmute_callback) && (unmute_callback.length)) {
  2189. if (unmute_callback[0].rank == 'user') {
  2190. if (unmute_callback[0].muted >= 1) {
  2191. connection.query('UPDATE `users` SET `muted` = 0 WHERE `steamid` = ' + connection.escape(res[1]), function(unmute_err1) {
  2192. if (unmute_err1) {
  2193. return socket.emit('notify', 'error', 'chatUnmuteFail', [res[1]]);
  2194. } else {
  2195. if (users[res[1]]) users[res[1]].muted = 0;
  2196. return socket.emit('notify', 'success', 'chatUnmuteSuccess', [res[1]]);
  2197. }
  2198. });
  2199. } else {
  2200. return socket.emit('notify', 'error', 'chatUnmuteNotMuted', [res[1]]);
  2201. }
  2202. } else {
  2203. return socket.emit('notify', 'error', 'chatUnmuteStaff');
  2204. }
  2205. } else {
  2206. return socket.emit('notify', 'error', 'chatUnmuteFail', [res[1]]);
  2207. }
  2208. }
  2209. });
  2210. } else {
  2211. socket.emit('notify', 'error', 'chatMissingParameters');
  2212. }
  2213. } else {
  2214. socket.emit('notify', 'error', 'chatModAccess');
  2215. }
  2216. }
  2217. else if (chat.message.indexOf('/ban') === 0) {
  2218. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2219. if (res = /^\/ban ([0-9]{17})/.exec(chat.message)) {
  2220. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(ban_err, ban_callback) {
  2221. if (ban_err) {
  2222. return socket.emit('notify', 'error', 'chatBanFail', [res[1]]);
  2223. } else {
  2224. if ((ban_callback) && (ban_callback.length)) {
  2225. if (ban_callback[0].rank == 'user') {
  2226. connection.query('UPDATE `users` SET `banned` = 1 WHERE `steamid` = ' + connection.escape(res[1]), function(ban_err1) {
  2227. if (ban_err1) {
  2228. return socket.emit('notify', 'error', 'chatBanFail', [res[1]]);
  2229. } else {
  2230. return socket.emit('notify', 'success', 'chatBanSuccess', [res[1]]);
  2231. }
  2232. });
  2233. } else {
  2234. return socket.emit('notify', 'error', 'chatBanStaff');
  2235. }
  2236. } else {
  2237. return socket.emit('notify', 'error', 'chatBanFail', [res[1]]);
  2238. }
  2239. }
  2240. });
  2241. } else {
  2242. socket.emit('notify', 'error', 'chatMissingParameters');
  2243. }
  2244. } else {
  2245. socket.emit('notify', 'error', 'chatModAccess');
  2246. }
  2247. }
  2248. else if (chat.message.indexOf('/unban') === 0) {
  2249. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2250. if (res = /^\/unban ([0-9]{17})/.exec(chat.message)) {
  2251. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(unban_err, unban_callback) {
  2252. if (unban_err) {
  2253. return socket.emit('notify', 'error', 'chatUnBanFail', [res[1]]);
  2254. } else {
  2255. if ((unban_callback) && (unban_callback.length)) {
  2256. if (unban_callback[0].banned == 1) {
  2257. connection.query('UPDATE `users` SET `banned` = 0 WHERE `steamid` = ' + connection.escape(res[1]), function(unban_err1) {
  2258. if (unban_err1) {
  2259. return socket.emit('notify', 'error', 'chatUnBanFail', [res[1]]);
  2260. } else {
  2261. return socket.emit('notify', 'success', 'chatUnBanSuccess', [res[1]]);
  2262. }
  2263. });
  2264. } else {
  2265. return socket.emit('notify', 'error', 'chatUnbanNotBanned', [res[1]]);
  2266. }
  2267. } else {
  2268. return socket.emit('notify', 'error', 'chatUnBanFail', [res[1]]);
  2269. }
  2270. }
  2271. });
  2272. } else {
  2273. socket.emit('notify', 'error', 'chatMissingParameters');
  2274. }
  2275. } else {
  2276. socket.emit('notify', 'error', 'chatModAccess');
  2277. }
  2278. }
  2279. else if (chat.message.indexOf('/withdrawban') === 0) {
  2280. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2281. if (res = /^\/withdrawban ([0-9]{17})/.exec(chat.message)) {
  2282. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(ban_err, ban_callback) {
  2283. if (ban_err) {
  2284. return socket.emit('notify', 'error', 'chatWithdrawBanFail', [res[1]]);
  2285. } else {
  2286. if ((ban_callback) && (ban_callback.length)) {
  2287. connection.query('UPDATE `users` SET `withdraw_ban` = 1 AND `transfer_banned` = 1 WHERE `steamid` = ' + connection.escape(res[1]), function(ban_err1) {
  2288. if (ban_err1) {
  2289. return socket.emit('notify', 'error', 'chatWithdrawBanFail', [res[1]]);
  2290. } else {
  2291. return socket.emit('notify', 'success', 'chatWithdrawBanSuccess', [res[1]]);
  2292. }
  2293. });
  2294. } else {
  2295. return socket.emit('notify', 'error', 'chatWithdrawBanFail', [res[1]]);
  2296. }
  2297. }
  2298. });
  2299. } else {
  2300. socket.emit('notify', 'error', 'chatMissingParameters');
  2301. }
  2302. } else {
  2303. socket.emit('notify', 'error', 'chatModAccess');
  2304. }
  2305. }
  2306. else if (chat.message.indexOf('/unwithdrawban') === 0) {
  2307. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2308. if (res = /^\/unwithdrawban ([0-9]{17})/.exec(chat.message)) {
  2309. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(unban_err, unban_callback) {
  2310. if (unban_err) {
  2311. return socket.emit('notify', 'error', 'chatUnWithdrawBanFail', [res[1]]);
  2312. } else {
  2313. if ((unban_callback) && (unban_callback.length)) {
  2314. if (unban_callback[0].withdraw_ban == 1) {
  2315. connection.query('UPDATE `users` SET `withdraw_ban` = 0 AND `transfer_banned` = 0 WHERE `steamid` = ' + connection.escape(res[1]), function(unban_err1) {
  2316. if (unban_err1) {
  2317. return socket.emit('notify', 'error', 'chatUnWithdrawBanFail', [res[1]]);
  2318. } else {
  2319. return socket.emit('notify', 'success', 'chatUnWithdrawBanSuccess', [res[1]]);
  2320. }
  2321. });
  2322. } else {
  2323. return socket.emit('notify', 'error', 'chatUnWithdrawbanNotBanned', [res[1]]);
  2324. }
  2325. } else {
  2326. return socket.emit('notify', 'error', 'chatUnWithdrawBanFail', [res[1]]);
  2327. }
  2328. }
  2329. });
  2330. } else {
  2331. socket.emit('notify', 'error', 'chatMissingParameters');
  2332. }
  2333. } else {
  2334. socket.emit('notify', 'error', 'chatModAccess');
  2335. }
  2336. }
  2337. else if (chat.message.indexOf('/transferban') === 0) {
  2338. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2339. if (res = /^\/transferban ([0-9]{17})/.exec(chat.message)) {
  2340. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(ban_err, ban_callback) {
  2341. if (ban_err) {
  2342. return socket.emit('notify', 'error', 'chatTransferBanFail', [res[1]]);
  2343. } else {
  2344. if ((ban_callback) && (ban_callback.length)) {
  2345. connection.query('UPDATE `users` SET `transfer_banned` = 1 WHERE `steamid` = ' + connection.escape(res[1]), function(ban_err1) {
  2346. if (ban_err1) {
  2347. return socket.emit('notify', 'error', 'chatTransferBanFail', [res[1]]);
  2348. } else {
  2349. return socket.emit('notify', 'success', 'chatTransferBanSuccess', [res[1]]);
  2350. }
  2351. });
  2352. } else {
  2353. return socket.emit('notify', 'error', 'chatTransferBanFail', [res[1]]);
  2354. }
  2355. }
  2356. });
  2357. } else {
  2358. socket.emit('notify', 'error', 'chatMissingParameters');
  2359. }
  2360. } else {
  2361. socket.emit('notify', 'error', 'chatModAccess');
  2362. }
  2363. }
  2364. else if (chat.message.indexOf('/untransferban') === 0) {
  2365. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2366. if (res = /^\/untransferban ([0-9]{17})/.exec(chat.message)) {
  2367. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(unban_err, unban_callback) {
  2368. if (unban_err) {
  2369. return socket.emit('notify', 'error', 'chatUnTransferBanFail', [res[1]]);
  2370. } else {
  2371. if ((unban_callback) && (unban_callback.length)) {
  2372. if (unban_callback[0].transfer_banned == 1) {
  2373. connection.query('UPDATE `users` SET `transfer_banned` = 0 WHERE `steamid` = ' + connection.escape(res[1]), function(unban_err1) {
  2374. if (unban_err1) {
  2375. return socket.emit('notify', 'error', 'chatUnTransferBanFail', [res[1]]);
  2376. } else {
  2377. return socket.emit('notify', 'success', 'chatUnTransferBanSuccess', [res[1]]);
  2378. }
  2379. });
  2380. } else {
  2381. return socket.emit('notify', 'error', 'chatUnTransferbanNotBanned', [res[1]]);
  2382. }
  2383. } else {
  2384. return socket.emit('notify', 'error', 'chatUnTransferBanFail', [res[1]]);
  2385. }
  2386. }
  2387. });
  2388. } else {
  2389. socket.emit('notify', 'error', 'chatMissingParameters');
  2390. }
  2391. } else {
  2392. socket.emit('notify', 'error', 'chatModAccess');
  2393. }
  2394. }
  2395. else if (chat.message.indexOf('/depositban') === 0) {
  2396. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2397. if (res = /^\/depositban ([0-9]{17})/.exec(chat.message)) {
  2398. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(ban_err, ban_callback) {
  2399. if (ban_err) {
  2400. return socket.emit('notify', 'error', 'chatDepositBanFail', [res[1]]);
  2401. } else {
  2402. if ((ban_callback) && (ban_callback.length)) {
  2403. connection.query('UPDATE `users` SET `deposit_ban` = 1 WHERE `steamid` = ' + connection.escape(res[1]), function(ban_err1) {
  2404. if (ban_err1) {
  2405. return socket.emit('notify', 'error', 'chatDepositBanFail', [res[1]]);
  2406. } else {
  2407. return socket.emit('notify', 'success', 'chatDepositBanSuccess', [res[1]]);
  2408. }
  2409. });
  2410. } else {
  2411. return socket.emit('notify', 'error', 'chatDepositBanFail', [res[1]]);
  2412. }
  2413. }
  2414. });
  2415. } else {
  2416. socket.emit('notify', 'error', 'chatMissingParameters');
  2417. }
  2418. } else {
  2419. socket.emit('notify', 'error', 'chatModAccess');
  2420. }
  2421. }
  2422. else if (chat.message.indexOf('/undepositban') === 0) {
  2423. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2424. if (res = /^\/undepositban ([0-9]{17})/.exec(chat.message)) {
  2425. connection.query('SELECT * FROM `users` WHERE `steamid` = ' + connection.escape(res[1]) + ' LIMIT 1', function(unban_err, unban_callback) {
  2426. if (unban_err) {
  2427. return socket.emit('notify', 'error', 'chatUnDepositBanFail', [res[1]]);
  2428. } else {
  2429. if ((unban_callback) && (unban_callback.length)) {
  2430. if (unban_callback[0].deposit_ban == 1) {
  2431. connection.query('UPDATE `users` SET `deposit_ban` = 0 WHERE `steamid` = ' + connection.escape(res[1]), function(unban_err1) {
  2432. if (unban_err1) {
  2433. return socket.emit('notify', 'error', 'chatUnDepositBanFail', [res[1]]);
  2434. } else {
  2435. return socket.emit('notify', 'success', 'chatUnDepositBanSuccess', [res[1]]);
  2436. }
  2437. });
  2438. } else {
  2439. return socket.emit('notify', 'error', 'chatUnDepositbanNotBanned', [res[1]]);
  2440. }
  2441. } else {
  2442. return socket.emit('notify', 'error', 'chatUnDepositBanFail', [res[1]]);
  2443. }
  2444. }
  2445. });
  2446. } else {
  2447. socket.emit('notify', 'error', 'chatMissingParameters');
  2448. }
  2449. } else {
  2450. socket.emit('notify', 'error', 'chatModAccess');
  2451. }
  2452. }
  2453. else if (chat.message.indexOf('/removeMessages') === 0) {
  2454. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2455. if (res = /^\/removeMessages ([0-9]{17})/.exec(chat.message)) {
  2456. chat_history = chat_history.filter(function(obj) {
  2457. return obj.profile.steamid !== res[1];
  2458. });
  2459. io.sockets.emit('remove messages', {
  2460. "steamid": res[1]
  2461. });
  2462. } else {
  2463. socket.emit('notify', 'error', 'chatMissingParameters');
  2464. }
  2465. } else {
  2466. socket.emit('notify', 'error', 'chatModAccess');
  2467. }
  2468. }
  2469. else if (chat.message.indexOf('/removeMessage') === 0) {
  2470. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2471. if (res = /^\/removeMessage (.{1,})/.exec(chat.message)) {
  2472. var index = chat_history.map(function(e) {
  2473. return e.uniqueID;
  2474. }).indexOf(res[1]);
  2475. if (index > -1) {
  2476. chat_history.splice(index, 1);
  2477. }
  2478. io.sockets.emit('remove message', {
  2479. "uniqueID": res[1]
  2480. });
  2481. } else {
  2482. socket.emit('notify', 'error', 'chatMissingParameters');
  2483. }
  2484. } else {
  2485. socket.emit('notify', 'error', 'chatModAccess');
  2486. }
  2487. }
  2488. else if (chat.message.indexOf('/active') === 0) {
  2489. if ((user.rank === 'siteAdmin') || (user.rank === 'root')) {
  2490. if (res = /^\/active (.{1,}) (.{1,})/.exec(chat.message)) {
  2491. if (res[2] == "false") {
  2492. active[res[1]] = false;
  2493. } else {
  2494. active[res[1]] = true;
  2495. }
  2496. return socket.emit('notify', 'success', 'chatAccessSet', [res[1], res[2]]);
  2497. } else {
  2498. socket.emit('notify', 'error', 'chatMissingParameters');
  2499. }
  2500. } else {
  2501. socket.emit('notify', 'error', 'chatRootAccess');
  2502. }
  2503. }
  2504. else if (chat.message.indexOf('/isactive') === 0) {
  2505. if ((user.rank === 'siteAdmin') || (user.rank === 'root') || (user.rank === 'siteMod')) {
  2506. if (res = /^\/isactive (.{1,})/.exec(chat.message)) {
  2507. return socket.emit('notify', 'success', 'chatAccessView', [res[1], active[res[1]]]);
  2508. } else {
  2509. socket.emit('notify', 'error', 'chatMissingParameters');
  2510. }
  2511. } else {
  2512. socket.emit('notify', 'error', 'chatModAccess');
  2513. }
  2514. }
  2515. else if (chat.message.indexOf('/config') === 0) {
  2516. if (user.rank === 'root') {
  2517. if (res = /^\/config/.exec(chat.message)) {
  2518. config = require('./config');
  2519. } else {
  2520. socket.emit('notify', 'error', 'chatMissingParameters');
  2521. }
  2522. } else {
  2523. socket.emit('notify', 'error', 'chatRootAccess');
  2524. }
  2525. } else {
  2526. return socket.emit('notify', 'error', 'chatUnknownCommand');
  2527. }
  2528. }
  2529. else {
  2530. if (((chat_muted === false) && (user.muted <= time())) || (user.rank != 'user')) {
  2531. if(chat.message.length <= 256 || user.rank != 'user'){
  2532. connection.query('SELECT `total_bet` FROM `users` WHERE `steamid` = ' + connection.escape(user.steamid) + ' LIMIT 1', function(err, row) {
  2533. if (err) {
  2534. socket.emit('notify', 'error', 'serverError');
  2535. return;
  2536. } else {
  2537. if ((row[0].total_bet < config.min_bet_chat) && (user.rank == 'user')) {
  2538. socket.emit('notify', 'error', 'chatNotEnoughBets', [row[0].total_bet, config.min_bet_chat]);
  2539. return;
  2540. } else {
  2541. var uniqueID = generate(20);
  2542. io.sockets.emit('chat message', {
  2543. message: chat.message,
  2544. profile: {
  2545. avatar: user.avatar,
  2546. rank: user.rank,
  2547. steamid: user.steamid,
  2548. username: user.username
  2549. },
  2550. time: time(),
  2551. uniqueID: uniqueID
  2552. });
  2553. array_limit({
  2554. message: chat.message,
  2555. profile: {
  2556. avatar: user.avatar,
  2557. rank: user.rank,
  2558. steamid: user.steamid,
  2559. username: user.username
  2560. },
  2561. time: time(),
  2562. uniqueID: uniqueID
  2563. });
  2564. }
  2565. }
  2566. });
  2567. }
  2568. else{
  2569. return socket.emit('notify', 'error', 'chatMaxLength');
  2570. }
  2571. } else if(user.muted > time()) {
  2572. return socket.emit('notify', 'error', 'userMuted', [secondsToDhms(user.muted - time())]);
  2573. }else {
  2574. return socket.emit('notify', 'error', 'chatIsMuted');
  2575. }
  2576. }
  2577. }
  2578. });
  2579. /*socket.on('new login', function(steamid){
  2580. steamid = steamid.toString();
  2581. if (!/^\d+$/.test(steamid)) return socket.emit('notify', 'error', 'invalidSteamID');
  2582. socket.emit("login failed");
  2583. var sid = new SteamID(steamid);
  2584. if(!sid.isValid()) return socket.emit('notify', 'error', 'invalidSteamID');
  2585. socket.emit("login failed");
  2586.  
  2587. var client = site_bots[Object.keys(site_bots)[Math.floor(Math.random() * Object.keys(site_bots).length)]].client;
  2588.  
  2589. steamid = sid.getSteamID64();
  2590.  
  2591. user_login_codes[steamid] = {code: generate(20), socket: socket.id};
  2592. socket.emit('login code', user_login_codes[steamid].code);
  2593. /*client.addFriend(steamid, function(err, name){
  2594. if(err){
  2595. if(err.eresult == 14 || err.eresult == "14"){
  2596. user_login_codes[steamid] = {code: generate(20), socket: socket.id};
  2597. socket.emit('login code', user_login_codes[steamid].code);
  2598. }
  2599. else if(err.eresult == 40 || err.eresult == "40"){
  2600. socket.emit('notify', 'error', 'botBlocked');
  2601. socket.emit("login failed");
  2602. }
  2603. else if(err.eresult == 41 || err.eresult == "41"){
  2604. socket.emit('notify', 'error', 'botIgnored');
  2605. socket.emit("login failed");
  2606. }
  2607. else{
  2608. logger.error("Error adding user: " + steamid);
  2609. logger.debug(err);
  2610. socket.emit("login failed");
  2611. }
  2612. }
  2613. else{
  2614. if(name){
  2615. user_login_codes[steamid] = {code: generate(20), socket: socket.id};
  2616. socket.emit('login code', user_login_codes[steamid].code);
  2617. }
  2618. else{
  2619. logger.error("Werid error adding user: " + steamid + ", no error returned but name also not returned");
  2620. socket.emit("login failed");
  2621. }
  2622. }
  2623. });
  2624. });*/
  2625. });
  2626.  
  2627. function secondsToDhms(d) {
  2628. d = Number(d);
  2629. var dd = Math.floor(d / 24 / 60 / 60);
  2630. var h = Math.floor(d / 60 / 60) % 24;
  2631. var m = Math.floor(d / 60) % 60;
  2632. var s = d % 60;
  2633.  
  2634. var dDisplay = dd > 0 ? dd + (dd == 1 ? " day, " : " days, ") : "";
  2635. var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
  2636. var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
  2637. var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
  2638. var toReturn = dDisplay + hDisplay + mDisplay + sDisplay;
  2639. return toReturn[toReturn.length-1] == " " ? toReturn.slice(0, -2) : toReturn;
  2640. }
  2641.  
  2642. setInterval(function() {
  2643. io.sockets.emit('users online', Object.keys(users).length);
  2644. }, 5000);
  2645.  
  2646. var steam_check_interval = 5000;
  2647. setInterval(function() {
  2648. request('http://is.steam.rip/api/v1/?request=IsSteamRip', function(rip_error, response, body) {
  2649. if (rip_error) {
  2650. return;
  2651. } else {
  2652. if (body) {
  2653. if (body.result) {
  2654. if (body.result.success === true) {
  2655. if (body.result.isSteamRip === true) {
  2656. isSteamRIP = true; //o nie! Steam nie zyje!
  2657. steam_check_interval = 20000;
  2658. } else {
  2659. isSteamRIP = false; //uff. Steam zyje!
  2660. }
  2661. }
  2662. }
  2663. }
  2664. }
  2665. });
  2666. }, steam_check_interval);
  2667.  
  2668. function crashWithdraw(user) {
  2669. if (cstatus === 'closed') {
  2670. var find = cbets.find(x => x.profile.steamid == user.steamid);
  2671. if (find == undefined) return;
  2672. if (find.done) return;
  2673. find.done = 1;
  2674. var multiplier = growthFunc(ctime);
  2675. var profit = Math.floor(find.bet * multiplier);
  2676. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + profit + ', `total_won` = `total_won` + ' + profit + ' WHERE `steamid` = ' + connection.escape(user.steamid), function(err) {
  2677. if (err) {
  2678. logger.debug('important error at wallet increase');
  2679. logger.debug(err);
  2680. if (users[user.steamid]) {
  2681. users[user.steamid].socket.forEach(function(asocket) {
  2682. if (io.sockets.connected[asocket])
  2683. io.sockets.connected[asocket].emit('notify', 'error', 'serverError');
  2684. });
  2685. }
  2686. return;
  2687. } else {
  2688. if (users[user.steamid]) {
  2689. users[user.steamid].socket.forEach(function(asocket) {
  2690. if (io.sockets.connected[asocket])
  2691. io.sockets.connected[asocket].emit('balance change', profit);
  2692. });
  2693. }
  2694. io.sockets.to('crash').emit('player drop', {
  2695. bet: find.bet,
  2696. multiplier: multiplier.toFixed(2).toString(),
  2697. profile: {
  2698. avatar: find.profile.avatar,
  2699. steamid: find.profile.steamid,
  2700. username: find.profile.username
  2701. },
  2702. profit: profit
  2703. });
  2704. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(user.steamid) + ', `change` = ' + connection.escape(profit) + ', `reason` = \'Crash #' + cgame + ' ' + 'winning - ' + multiplier.toFixed(2) + '\'', function(err2) {
  2705. if (err2) {
  2706. logger.debug('database error at wallet_change');
  2707. logger.debug(err2);
  2708. return;
  2709. }
  2710. });
  2711. }
  2712. });
  2713. } else return;
  2714. }
  2715.  
  2716. function jackpotTimer() {
  2717. jpTimeleft = jpTime;
  2718. jpAllow = true;
  2719. io.sockets.to('jackpot').emit('jackpot new', jpTime);
  2720. var _timeleft = setInterval(function() {
  2721. --jpTimeleft;
  2722. if (jpTimeleft == config.latest_jackpot_bet_time) jpAllow = false;
  2723. else if (jpTimeleft == 0) {
  2724. var winnerNumber = getRandomInt(1, jpPool);
  2725. var winnerObject = jpBets.find(x => x.rangeMin <= winnerNumber && x.rangeMax >= winnerNumber);
  2726. var winner = winnerObject.player.steamid;
  2727. var winSum = (jpPool - parseInt(winnerObject.amount)) - Math.floor((jpPool - parseInt(winnerObject.amount)) * 0.10) + parseInt(winnerObject.amount);
  2728. if (jpBets.length >= 2) {
  2729. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + winSum + ', `total_won` = `total_won` + ' + winSum + ' WHERE `steamid` = ' + connection.escape(winner), function(err69, row69) {
  2730. if (err69) {
  2731. return;
  2732. } else {
  2733. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(winner) + ', `change` = ' + connection.escape(winSum) + ', `reason` = \'Jackpot winning!' + '\'', function(err70) {
  2734. if (err70) {
  2735. logger.debug('database error at wallet_change');
  2736. logger.debug(err70);
  2737. }
  2738. jpBets.forEach(function(obj) {
  2739. if (JSON.stringify(obj) !== JSON.stringify(winnerObject)) {
  2740. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + obj.amount + ' WHERE `steamid` = ' + connection.escape(obj.player.steamid), function(err71) {
  2741. if (err71) logger.debug('error at total lose increase');
  2742. });
  2743. /* if (users[obj.player.steamid]) {
  2744. users[obj.player.steamid].socket.forEach(function(asocket) {
  2745. if (io.sockets.connected[asocket])
  2746. io.sockets.connected[asocket].emit('notify', 'error', 'jackpotLost', [obj.amount]);
  2747. });
  2748. }*/
  2749. }
  2750. });
  2751. jp_limit(winnerObject);
  2752. setTimeout(function(){
  2753. if (users[winner]) {
  2754. users[winner].socket.forEach(function(asocket) {
  2755. if (io.sockets.connected[asocket])
  2756. io.sockets.connected[asocket].emit('balance change', winSum);
  2757. if (io.sockets.connected[asocket])
  2758. io.sockets.connected[asocket].emit('notify', 'success', 'jackpotWon', [winSum]);
  2759. });
  2760. }
  2761.  
  2762. }, 15000);
  2763. var avatars = [];
  2764. jpBets.forEach(function(obj) {
  2765. avatars.push(obj.player)
  2766. });
  2767. io.sockets.to('jackpot').emit('jackpot end', {
  2768. winner: winnerObject.player,
  2769. players: avatars,
  2770. won: winSum
  2771. });
  2772. clearInterval(_timeleft);
  2773. jpPool = 0;
  2774. jpBets = [];
  2775. jpUsers = [];
  2776. jpAllow = true;
  2777. jpTimeleft = -1;
  2778. });
  2779. }
  2780. });
  2781. } else {
  2782. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + winSum + ', `total_bet` = `total_bet` - ' + winSum + ' WHERE `steamid` = ' + connection.escape(winner), function(err69, row69) {
  2783. if (err69) {
  2784. return;
  2785. } else {
  2786. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(winner) + ', `change` = ' + connection.escape(winSum) + ', `reason` = \'Jackpot winning!' + '\'', function(err70) {
  2787. if (err70) {
  2788. logger.debug('database error at wallet_change');
  2789. logger.debug(err70);
  2790. }
  2791. jpBets.forEach(function(obj) {
  2792. if (JSON.stringify(obj) !== JSON.stringify(winnerObject)) {
  2793. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + obj.amount + ' WHERE `steamid` = ' + connection.escape(obj.player.steamid), function(err71) {
  2794. if (err71) logger.debug('error at total lose increase');
  2795. });
  2796. if (users[obj.player.steamid]) {
  2797. users[obj.player.steamid].socket.forEach(function(asocket) {
  2798. if (io.sockets.connected[asocket])
  2799. io.sockets.connected[asocket].emit('notify', 'error', 'jackpotLost', [obj.amount]);
  2800. });
  2801. }
  2802. }
  2803. });
  2804. jp_limit(winnerObject);
  2805. if (users[winner]) {
  2806. users[winner].socket.forEach(function(asocket) {
  2807. if (io.sockets.connected[asocket])
  2808. io.sockets.connected[asocket].emit('balance change', winSum);
  2809. if (io.sockets.connected[asocket])
  2810. io.sockets.connected[asocket].emit('notify', 'success', 'jackpotWon', [winSum]);
  2811. });
  2812. }
  2813. var avatars = [];
  2814. jpBets.forEach(function(obj) {
  2815. avatars.push(obj.player)
  2816. });
  2817. io.sockets.to('jackpot').emit('jackpot end', {
  2818. winner: winnerObject.player,
  2819. players: avatars,
  2820. won: winSum
  2821. });
  2822. clearInterval(_timeleft);
  2823. jpPool = 0;
  2824. jpBets = [];
  2825. jpUsers = [];
  2826. jpAllow = true;
  2827. jpTimeleft = -1;
  2828. });
  2829. }
  2830. });
  2831. }
  2832. }
  2833. }, 1000);
  2834. }
  2835.  
  2836. function checkTimer() {
  2837. if (!pause) {
  2838. timerID = setInterval(function() {
  2839. //logger.debug(timer);
  2840. if (timer == 0) {
  2841. away();
  2842. }
  2843. if (timer == -100) {
  2844. currentBets = {
  2845. 'red': [],
  2846. 'green': [],
  2847. 'black': []
  2848. };
  2849. usersBr = {};
  2850. timer = accept + wait;
  2851. currentRollid = currentRollid + 1;
  2852. pause = false;
  2853. var sh = sha256(generate(128));
  2854. winningNumber = sh.substr(0, 8);
  2855. winningNumber = parseInt(winningNumber, 16);
  2856. winningNumber = math.abs(winningNumber) % 15;
  2857. if(winningNumber == 0 && math.abs(parseInt(sha256(generate(128)).substr(0, 8), 16)) % 4 != 0){
  2858. var sh = sha256(generate(128));
  2859. winningNumber = sh.substr(0, 8);
  2860. winningNumber = parseInt(winningNumber, 16);
  2861. winningNumber = (math.abs(winningNumber) % 14) + 1;
  2862. }
  2863. secret = generate(20);
  2864. actual_hash = sha256(winningNumber + ":" + secret);
  2865. logger.info('Rolled: ' + winningNumber);
  2866. logger.info('Round #' + currentRollid + ' secret: ' + secret);
  2867. io.sockets.to('roulette').emit('roulette new round', 15, actual_hash);
  2868. }
  2869. timer = timer - 1;
  2870. }, 100);
  2871. }
  2872. }
  2873.  
  2874. function away() {
  2875. pause = true;
  2876. io.sockets.to('roulette').emit('roulette ends', {
  2877. id: currentRollid,
  2878. winningNumber: winningNumber,
  2879. secret: secret,
  2880. hash: actual_hash,
  2881. shift: Math.random()
  2882. });
  2883. setTimeout(function() {
  2884. roulette_limit(winningNumber);
  2885. if ((winningNumber >= 1) && (winningNumber <= 7)) {
  2886. currentBets['red'].forEach(function(itm) {
  2887. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + itm.amount * 2 + ', `total_won` = `total_won` + ' + itm.amount * 2 + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2888. if (err) {
  2889. logger.error('important error at wallet increase');
  2890. logger.debug(err);
  2891. if (users[itm.player.steamid]) {
  2892. users[itm.player.steamid].socket.forEach(function(asocket) {
  2893. if (io.sockets.connected[asocket])
  2894. io.sockets.connected[asocket].emit('notify', 'error', 'serverError');
  2895. });
  2896. }
  2897. return;
  2898. } else {
  2899. if (users[itm.player.steamid]) {
  2900. users[itm.player.steamid].socket.forEach(function(asocket) {
  2901. if (io.sockets.connected[asocket])
  2902. io.sockets.connected[asocket].emit('balance change', itm.amount * 2);
  2903. });
  2904. }
  2905. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(itm.player.steamid) + ', `change` = ' + connection.escape(itm.amount * 2) + ', `reason` = \'Roulette #' + currentRollid + ' ' + 'winning!' + '\'', function(err2) {
  2906. if (err2) {
  2907. logger.debug('database error at wallet_change');
  2908. logger.debug(err2);
  2909. return;
  2910. }
  2911. });
  2912. }
  2913. });
  2914. });
  2915. currentBets['black'].forEach(function(itm) {
  2916. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2917. if (err) logger.debug('error at total lose increase');
  2918. });
  2919. });
  2920. currentBets['green'].forEach(function(itm) {
  2921. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2922. if (err) logger.debug('error at total lose increase');
  2923. });
  2924. });
  2925. }
  2926. if ((winningNumber >= 8) && (winningNumber <= 14)) {
  2927. currentBets['black'].forEach(function(itm) {
  2928. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + itm.amount * 2 + ', `total_won` = `total_won` + ' + itm.amount * 2 + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2929. if (err) {
  2930. logger.debug('important error at wallet increase');
  2931. logger.debug(err);
  2932. if (users[itm.player.steamid]) {
  2933. users[itm.player.steamid].socket.forEach(function(asocket) {
  2934. if (io.sockets.connected[asocket])
  2935. io.sockets.connected[asocket].emit('notify', 'error', 'serverError');
  2936. });
  2937. }
  2938. return;
  2939. } else {
  2940. if (users[itm.player.steamid]) {
  2941. users[itm.player.steamid].socket.forEach(function(asocket) {
  2942. if (io.sockets.connected[asocket])
  2943. io.sockets.connected[asocket].emit('balance change', itm.amount * 2);
  2944. });
  2945. }
  2946. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(itm.player.steamid) + ', `change` = ' + connection.escape(itm.amount * 2) + ', `reason` = \'Roulette #' + currentRollid + ' ' + 'winning!' + '\'', function(err2) {
  2947. if (err2) {
  2948. logger.debug('database error at wallet_change');
  2949. logger.debug(err2);
  2950. return;
  2951. }
  2952. });
  2953. }
  2954. });
  2955. });
  2956. currentBets['red'].forEach(function(itm) {
  2957. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2958. if (err) logger.debug('error at total lose increase');
  2959. });
  2960. });
  2961. currentBets['green'].forEach(function(itm) {
  2962. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2963. if (err) logger.debug('error at total lose increase');
  2964. });
  2965. });
  2966. }
  2967. if ((winningNumber >= 0) && (winningNumber <= 0)) {
  2968. currentBets['green'].forEach(function(itm) {
  2969. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + itm.amount * 14 + ', `total_won` = `total_won` + ' + itm.amount * 14 + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2970. if (err) {
  2971. logger.debug('important error at wallet increase');
  2972. logger.debug(err);
  2973. if (users[itm.player.steamid]) {
  2974. users[itm.player.steamid].socket.forEach(function(asocket) {
  2975. if (io.sockets.connected[asocket])
  2976. io.sockets.connected[asocket].emit('notify', 'error', 'serverError');
  2977. });
  2978. }
  2979. return;
  2980. } else {
  2981. if (users[itm.player.steamid]) {
  2982. users[itm.player.steamid].socket.forEach(function(asocket) {
  2983. if (io.sockets.connected[asocket])
  2984. io.sockets.connected[asocket].emit('balance change', itm.amount * 14);
  2985. });
  2986. }
  2987. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(itm.player.steamid) + ', `change` = ' + connection.escape(itm.amount * 14) + ', `reason` = \'Roulette #' + currentRollid + ' ' + 'winning!' + '\'', function(err2) {
  2988. if (err2) {
  2989. logger.debug('database error at wallet_change');
  2990. logger.debug(err2);
  2991. return;
  2992. }
  2993. });
  2994. }
  2995. });
  2996. });
  2997. currentBets['black'].forEach(function(itm) {
  2998. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  2999. if (err) logger.debug('error at total lose increase');
  3000. });
  3001. });
  3002. currentBets['red'].forEach(function(itm) {
  3003. connection.query('UPDATE `users` SET `total_lose` = `total_lose` + ' + itm.amount + ' WHERE `steamid` = ' + connection.escape(itm.player.steamid), function(err) {
  3004. if (err) logger.debug('error at total lose increase');
  3005. });
  3006. });
  3007. }
  3008. }, 7000);
  3009. connection.query('INSERT INTO `roll_history` SET `roll` = ' + connection.escape(winningNumber) + ', `time` = ' + connection.escape(time()) + ', `hash` = ' + connection.escape(actual_hash));
  3010. }
  3011.  
  3012. function generateDiceGame(steamid) {
  3013. var sh = sha256(generate(128));
  3014. roll = sh.substr(0, 8);
  3015. roll = parseInt(roll, 16);
  3016. roll = math.abs(roll) % 10000;
  3017. secret = generate(20);
  3018. hash = sha256(roll + ":" + secret);
  3019. user_dice_current[steamid] = dice_games.length;
  3020. dice_games.push({
  3021. "hash": hash,
  3022. "id": dice_games.length,
  3023. "roll": roll,
  3024. "secret": secret
  3025. });
  3026. return hash;
  3027. }
  3028.  
  3029. /* */
  3030. /* BOT PART */
  3031. /* */
  3032. /*
  3033. client.on("loggedOn", function(dataAndEvents) {
  3034. logger.debug("[BOT] Signed in!");
  3035. client.setPersona(SteamUser.Steam.EPersonaState.LookingToTrade);
  3036. });
  3037. client.on("webSession", function(dataAndEvents, depName) {
  3038. manager.setCookies(depName, function(reply) {
  3039. if (reply) {
  3040. return logger.debug("Error setting cookies/cache: " + reply), void process.exit(1);
  3041. }
  3042. var cb = manager.apiKey;
  3043. community.setCookies(depName);
  3044. community.startConfirmationChecker(polling_interval, identitysecret);
  3045. logger.debug("[BOT] Session cookies set!");
  3046. });
  3047. });
  3048. manager.on("sentOfferChanged", function(data, oldState) {
  3049. logger.debug("[BOT] Status of the trade offer #" + data.id + " from user: " + data.partner + " changed to: " + data.state + " from: " + oldState);
  3050. var string_state = {
  3051. 1: 'Invalid',
  3052. 2: 'Active',
  3053. 3: 'Accepted',
  3054. 4: 'Countered',
  3055. 5: 'Expired',
  3056. 6: 'Canceled',
  3057. 7: 'Declined',
  3058. 8: 'InvalidItems',
  3059. 9: 'Needs Confirmation',
  3060. 10: 'Canceled',
  3061. 11: 'In Escrow'
  3062. };
  3063. if (users[data.partner]) {
  3064. users[data.partner].socket.forEach(function(asocket) {
  3065. if (io.sockets.connected[asocket])
  3066. io.sockets.connected[asocket].emit('notify', '', 'offerStateChange', [data.id, string_state[oldState], string_state[data.state]]);
  3067. });
  3068. }
  3069. connection.query('SELECT * FROM `trade_history` WHERE `offer_id` = ' + data.id, function(err, rows) {
  3070. if (err) {
  3071. logger.debug('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  3072. logger.debug(err);
  3073. return;
  3074. } else if (rows.length < 1) {
  3075. return;
  3076. } else {
  3077. connection.query('UPDATE `trade_history` SET `offer_state` = ' + data.state + ' WHERE `offer_id` = ' + data.id, function(error) {
  3078. if (error) {
  3079. logger.debug('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  3080. logger.debug(error);
  3081. return;
  3082. }
  3083. });
  3084. if (data.state == 3) {
  3085. if (rows[0].action == 'deposit') {
  3086. data.getReceivedItems(function(items_error, receiveditems) {
  3087. if (items_error) {
  3088. logger.debug('IMPORTANT ERROR AT DEPOSIT getReceivedItems, USER: ' + rows[0].offer_partner);
  3089. logger.debug(items_error);
  3090. } else {
  3091. receiveditems.forEach(function(itemToReceive) {
  3092. connection.query('INSERT INTO `inventory` SET `id` = ' + connection.escape(itemToReceive.id) + ', `market_hash_name` = ' + connection.escape(itemToReceive.market_hash_name) + ', `classid` = ' + connection.escape(itemToReceive.classid) + ', `bot_id` = ' + connection.escape(botsteamid['bot1']) + ', `in_trade` = \'0\'', function(errorXD) {
  3093. if (errorXD) {
  3094. logger.debug('FUCKING IMPORTANT ERROR OCCURED ON ITEM ID: ' + itemToReceive.id + " (" + itemToReceive.market_hash_name + ")");
  3095. logger.debug(errorXD);
  3096. }
  3097. });
  3098. });
  3099. connection.query('UPDATE `users` SET `deposit_sum` = `deposit_sum` + ' + rows[0].worth / 1.1 + ', `wallet` = `wallet` + ' + rows[0].worth + ' WHERE `steamid` = ' + connection.escape(rows[0].offer_partner), function(error1) {
  3100. if (error1) {
  3101. logger.debug('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT, user:' + data.partner);
  3102. logger.debug(error1);
  3103. return;
  3104. } else {
  3105. connection.query('INSERT INTO `wallet_change` SET `user` = ' + connection.escape(rows[0].offer_partner) + ', `change` = ' + connection.escape(rows[0].worth) + ', `reason` = \'Deposit\'', function(err2) {
  3106. if (err2) {
  3107. logger.debug('database error at wallet_change');
  3108. logger.debug(err2);
  3109. }
  3110. });
  3111. if (users[data.partner]) {
  3112. users[data.partner].socket.forEach(function(asocket) {
  3113. if (io.sockets.connected[asocket]) {
  3114. io.sockets.connected[asocket].emit('notify', 'success', 'depositOfferAccepted', [data.id, rows[0].worth]);
  3115. io.sockets.connected[asocket].emit('balance change', rows[0].worth);
  3116. }
  3117. });
  3118. }
  3119. }
  3120. });
  3121. }
  3122. });
  3123. } else if (rows[0].action == 'withdraw') {
  3124. if (data.itemsToGive) {
  3125. data.itemsToGive.forEach(function(itemToGive) {
  3126. connection.query('DELETE FROM `inventory` WHERE `id` = ' + itemToGive.id, function(errorAeh) {
  3127. if (errorAeh) {
  3128. logger.debug('error while deleting items on item ID: ' + itemToGive.id + " (" + itemToGive.market_hash_name + ")");
  3129. logger.debug(errorAeh);
  3130. }
  3131. });
  3132. });
  3133. if (users[data.partner]) {
  3134. users[data.partner].socket.forEach(function(asocket) {
  3135. if (io.sockets.connected[asocket]) {
  3136. io.sockets.connected[asocket].emit('notify', 'success', 'withdrawOfferAccepted', [data.id]);
  3137. }
  3138. });
  3139. }
  3140. }
  3141. }
  3142. } else if ((data.state == 7) || (data.state == 5) || (data.state == 6) || (data.state == 1) || (data.state == 4) || (data.state == 8) || (data.state == 10)) {
  3143. if (rows[0].action == 'withdraw') {
  3144. if (data.itemsToGive) {
  3145. data.itemsToGive.forEach(function(update_item) {
  3146. connection.query('UPDATE `inventory` SET `in_trade` = \'0\'' + ' WHERE `id` = ' + connection.escape(update_item.assetid), function(err6) {
  3147. if (err6) {
  3148. logger.debug('error at updating in trade items status. id:' + update_item.assetid);
  3149. logger.debug(err6);
  3150. }
  3151. });
  3152. });
  3153. connection.query('UPDATE `users` SET `wallet` = `wallet` + ' + parseInt(rows[0].worth) + ',`withdraw_sum` = `withdraw_sum` - ' + parseInt(rows[0].worth / 0.9) + ' WHERE `steamid` = ' + connection.escape(rows[0].offer_partner), function(err7) {
  3154. if (err7) {
  3155. logger.debug('IMPORTANT error at updating in trade items status. steamid:' + rows[0].offer_partner);
  3156. logger.debug(err7);
  3157. }
  3158. });
  3159. if (users[data.partner]) {
  3160. users[data.partner].socket.forEach(function(asocket) {
  3161. if (io.sockets.connected[asocket]) {
  3162. io.sockets.connected[asocket].emit('balance change', rows[0].worth);
  3163. }
  3164. });
  3165. }
  3166. }
  3167. }
  3168. }
  3169. }
  3170. });
  3171. });
  3172. manager.on("newOffer", function(oferta) {
  3173.  
  3174. });
  3175. community.on("newConfirmation", function(d) {
  3176. var time = Math.round(Date.now() / 1E3);
  3177. var data = SteamTotp.getConfirmationKey(identitysecret, time, "allow");
  3178. community.respondToConfirmation(d.id, d.key, time, data, true, function(error) {
  3179. logger.debug("[BOT] Outgoing confirmation for the trade: " + d.key);
  3180. if (error) {
  3181. logger.debug("[BOT] Error while confirming the trade: " + error);
  3182. client.webLogOn();
  3183. }
  3184. });
  3185. });
  3186. community.on("confKeyNeeded", function(deepDataAndEvents, updateFunc) {
  3187. logger.debug("confKeyNeeded");
  3188. var progressContexts = Math.floor(Date.now() / 1E3);
  3189. updateFunc(null, progressContexts, SteamTotp.getConfirmationKey(identitysecret, progressContexts, deepDataAndEvents));
  3190. });
  3191. community.on("sessionExpired", function(err) {
  3192. if (err) return;
  3193. logger.debug('session expired, logging in...');
  3194. client.webLogOn();
  3195. });*/
  3196. /* */
  3197. /* FUNCTIONS PART */
  3198. /* */
  3199.  
  3200. function load() {
  3201. connection.query('SET NAMES utf8');
  3202. connection.query('SELECT `id` FROM `roll_history` ORDER BY `id` DESC LIMIT 1', function(err, row) {
  3203. if (err) {
  3204. logger.debug('Can not get number from the last game');
  3205. logger.debug(err);
  3206. process.exit(0);
  3207. }
  3208. if (!row.length) {
  3209. currentRollid = 1;
  3210. } else {
  3211. currentRollid = parseInt(row[0].id) + 1;
  3212. }
  3213. });
  3214. loadHistory();
  3215. }
  3216.  
  3217. function loadHistory() {
  3218. connection.query('SELECT * FROM `roll_history` ORDER BY `id` LIMIT 10', function(err, row) {
  3219. if (err) {
  3220. logger.debug('Error while loading last rolls history');
  3221. logger.debug(err);
  3222. process.exit(0);
  3223. }
  3224. row.forEach(function(itm) {
  3225. roulette_limit(itm.roll);
  3226. });
  3227. });
  3228. //server.listen(8443);
  3229. }
  3230.  
  3231. function time() {
  3232. return parseInt(new Date().getTime() / 1000)
  3233. }
  3234.  
  3235. function generate(count) {
  3236. return crypto.randomBytes(count).toString('hex');
  3237. }
  3238.  
  3239. function array_limit(wartosc) {
  3240. if (chat_history.length == 25) {
  3241. chat_history.shift();
  3242. }
  3243. chat_history.push(wartosc);
  3244. }
  3245.  
  3246. function roulette_limit(wartosc) {
  3247. if (lastrolls.length == 25) {
  3248. lastrolls.shift();
  3249. }
  3250. lastrolls.push(wartosc);
  3251. }
  3252.  
  3253. function jp_limit(wartosc) {
  3254. if (jpWinners.length == 10) {
  3255. jpWinners.shift();
  3256. }
  3257. jpWinners.push(wartosc);
  3258. }
  3259.  
  3260. function getRandomInt(min, max) {
  3261. return Math.floor(Math.random() * (max - min + 1)) + min;
  3262. }
Add Comment
Please, Sign In to add comment