Advertisement
Guest User

Untitled

a guest
Feb 4th, 2017
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Компоненты
  2. var Steam = require('steam');
  3. var mysql = require('mysql');
  4. var request = require("request");
  5. var fs = require('fs');
  6. var Winston = require('winston');
  7. var SteamTotp = require('steam-totp');
  8. var SteamUser = require('steam-user');
  9. var SteamCommunity = require('steamcommunity');
  10. var TradeOfferManager = require('steam-tradeoffer-manager');
  11. var client = new SteamCommunity();
  12. var steam = new SteamUser();
  13. var config = require('./config.js');
  14. var io = require('socket.io').listen(config.port || 8880);
  15. ///////////////////////////////////
  16.  
  17. ///////////////////////////Логер/////////////////////////////////
  18. var logger = new(Winston.Logger)({
  19.     transports: [
  20.         new(Winston.transports.Console)({
  21.             colorize: true,
  22.             level: 'debug'
  23.         }),
  24.         new(Winston.transports.File)({
  25.             level: 'info',
  26.             timestamp: true,
  27.             filename: 'bot.log',
  28.             json: false
  29.         })
  30.     ]
  31. });
  32. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  33. //Настройки рулетки
  34. var GameTime = config.bot.gametime;
  35. var timerID = 0;
  36. var sitename = config.domain;
  37. var pause = false;
  38. var roulete = false;
  39. var noacept = false;
  40. var last = false;
  41. var relogin = null;
  42. var detected = false;
  43. var minprice = 0;
  44. //Настройки MYSQL
  45. var mysqlInfo = {
  46.         host: config.mysql.host,
  47.         user: config.mysql.user,
  48.         password: config.mysql.pass,
  49.         database: config.mysql.database,
  50.         charset: 'utf8_general_ci'
  51.     }
  52.     ///////////////////////////////СОКЕТЫ//////////////////////////////////////////////
  53. io.on('connection', function(socket) {
  54.      io.emit('init', {
  55.             name: 'init',
  56.         });
  57.     if (last) {
  58.         io.emit('lastitems', {
  59.             time: '0:0',
  60.         });
  61.     }
  62.     if (roulete) {
  63.  
  64.     }
  65.     socket.on('newitem', function(msg) {
  66.         io.emit('newitem', {
  67.             name: 'newitem',
  68.         });
  69.         getPlayers();
  70.     });
  71.     socket.on('newmassage', function(msg) {
  72.         io.emit('newmassage', {
  73.             name: 'newitem',
  74.         });
  75.     });
  76. });
  77. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  78. fs.readFile('key', 'utf8', function(err, data) {
  79.     if (err) {
  80.         logger.debug("Ключ не найден,используем пароль!");
  81.         steam.logOn({
  82.             accountName: config.bot.username,
  83.             password: config.bot.password,
  84.             twoFactorCode: SteamTotp.generateAuthCode(config.bot.shared_secret),
  85.             rememberPassword: true
  86.         });
  87.     } else {
  88.         logger.debug("Найден ключ!Импортируем...");
  89.         steam.logOn({
  90.             accountName: config.bot.username,
  91.             loginKey: data,
  92.             twoFactorCode: SteamTotp.generateAuthCode(config.bot.shared_secret),
  93.             rememberPassword: true
  94.         });
  95.     }
  96. });
  97.  
  98. client.on('loginKey', function(key) {
  99.     fs.writeFile("key", key, function(err) {
  100.         if (err) {
  101.             return logger.info(err);
  102.         }
  103.         logger.info("Новый ключ сохронён!");
  104.     });
  105. });
  106. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  107. function message(steamid, mes) {
  108.     io.emit('message', {
  109.         steamid: steamid,
  110.         mes: mes,
  111.     });
  112. }
  113. ///////////////////////////////////////////////////////////////////
  114. var mysqlConnection = mysql.createConnection(mysqlInfo);
  115. var manager = new TradeOfferManager({
  116.     "steam": steam,
  117.     "domain": "localhost",
  118.     "language": "en"
  119.     //cancelTime: config.bot.CancelOffer
  120. })
  121. manager.on('pollData', function(pollData) {
  122.     fs.writeFile('polldata.json', JSON.stringify(pollData));
  123. });
  124. manager.on('sentOfferChanged', function(offer, oldState) {
  125.     if (offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  126.         mysqlConnection.query('UPDATE queue SET tradeStatus="8" WHERE status LIKE "%' + offer.id + '%"', function(err, row, fields) {
  127.             if (err) throw err;
  128.         });
  129.         mysqlConnection.query('SELECT * FROM `queue` WHERE status LIKE "%' + offer.id + '%"', function(err, row, fields) {
  130.             for (var i = 0; i < row.length; i++) {
  131.  
  132.                 var attempts = row[i].attempts;
  133.                 if (attempts == 0) {
  134.                     attempts++;
  135.                     mysqlConnection.query('UPDATE queue SET attempts=' + attempts + ' WHERE status LIKE "%' + offer.id + '%"', function(err, row, fields) {
  136.                         if (err) throw err;
  137.                     });
  138.                     logger.info('Updating the attempts made to send round #' + offer.id);
  139.  
  140.                 } else {
  141.  
  142.                     if (attempts == 1) {
  143.                         mysqlConnection.query('UPDATE queue SET attempts=2 WHERE status LIKE "%' + offer.id + '%"', function(err, row, fields) {
  144.                             if (err) throw err;
  145.                         });
  146.                         logger.info('Updating the attempts made to send round #' + offer.id);
  147.                     }
  148.  
  149.                 }
  150.  
  151.             }
  152.         });
  153.         logger.info("Офер #" + offer.id + " был принят!");
  154.     }
  155.     if (offer.state == TradeOfferManager.ETradeOfferState.Decline) {
  156.         mysqlConnection.query('UPDATE queue SET tradeStatus="3" WHERE status LIKE "%' + offer.id + '%"', function(err, row, fields) {
  157.             if (err) throw err;
  158.         });
  159.         logger.info("Офер #" + offer.id + " был отклонён!(Видимо не понравился)");
  160.     }
  161. });
  162. manager.on('pollFailure', function(err) {
  163.     logger.error('Стим лагает!Ошибка торговых сделок: ' + err);
  164. });
  165. var checker = false;
  166. var offers = 0;
  167. var players = [];
  168. var timer = false;
  169. var acceptedTrades = [];
  170. function getPlayers() {
  171.     mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  172.         var current_game = (row[0].value);
  173.         mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM `gamejack` WHERE `game` = \'' + current_game + '\'', function(err, rows) {
  174.             someVar = rows[0].playersCount;
  175.             logger.info('Игроков: ' + someVar);
  176.             mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\'' + current_game + '\'', function(errs, rowss, fieldss) {
  177.                 if (someVar >= 2 && rowss[0].starttime == 2147483647 && !timer) {
  178.                     timer = true;
  179.                     logger.info('Найдено 2 игрока,Стартуем игру!');
  180.                     io.emit('timer', {
  181.                         time: '0:0',
  182.                     });
  183.                     setTimeout(endgame, GameTime * 1000);
  184.                     setTimeout(noenter, GameTime * 1000-10000);
  185.                     mysqlConnection.query('UPDATE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  186.                 }
  187.             });
  188.         });
  189.     });
  190. }
  191. function crash(err){
  192.         fs.writeFileSync('./crashdb.txt', err);
  193.         logger.error('Ошибка: ' + err);
  194. }
  195. function processing(offer) {
  196.     if (pause) {
  197.         logger.info('>>>>>>> Включена пауза <<<<<<<<<<<<');
  198.         offer.decline(function(err) {
  199.             message(offer.partner.getSteamID64(), 'На сайте ведутся тех.работы,ожидайте!')
  200.             return;
  201.         });
  202.     } else {
  203.         if (noacept) {
  204.             logger.info('>>>>>>> Принятие последних ставок <<<<<<<<<<<<');
  205.             offer.decline(function(err) {
  206.                 message(offer.partner.getSteamID64(), 'Ожидайте завершения игры!')
  207.             });
  208.             return;
  209.         } else {
  210.             logger.info('>>>>>>> Распознал трейд <<<<<<<<<<<<');
  211.             if (config.admins.indexOf(offer.partner.getSteamID64()) != -1 && offer.itemsToGive.length > 0) {
  212.                 logger.info('Админ ' + offer.partner.getSteam3RenderedID() + ' забрал вещи с бота!');
  213.                 offer.accept(function(err) {
  214.                     if (err) {
  215.                         logger.error('Ошибка принятия трейда ' + offer.id + '!Ошибка: ' + err.message);
  216.                     } else {
  217.                         logger.info('Обмен принят');
  218.                     }
  219.                 });
  220.             } else if (offer.itemsToGive.length === 0) {
  221.                 message(offer.partner.getSteamID64(), 'Ваш трейд поступил в обработку!');
  222.                 offer.getEscrowDuration(function(err, daysTheirEscrow, daysMyEscrow) {
  223.                     if (err) {
  224.                         reconnect();
  225.                         logger.error('Ошибка ESCROW ' + err);
  226.                         offer.decline(function(err) {
  227.                             if (err)  crash(err);
  228.                             message(offer.partner.getSteamID64(), 'Возможные проблемы с STEAM escrow!');
  229.                         });
  230.                         return;
  231.                     } else {
  232.                         if (daysTheirEscrow != 0) offer.decline(function(err) {
  233.                             if (err) {
  234.                                 crash(err);
  235.                                 return;
  236.                             }
  237.                             message(offer.partner.getSteamID64(), 'У вас не включено мобильное подтверждение!')
  238.                             return;
  239.                         });
  240.                         else {
  241.                             var items = [];
  242.                             var checker = true;
  243.                             var itemsString = "";
  244.                             var totalPrice = 0;
  245.                             var cost = 0;
  246.                             var items = offer.itemsToReceive;
  247.                             items.forEach(function(item, i, arr) {
  248.                                 if (item.appid != 730) {
  249.                                     offer.decline(function(err) {
  250.                                         message(offer.partner.getSteamID64(), 'Предмет ' + item.market_hash_name + ' не с CSGO!');
  251.                                         checker = false;
  252.                                     });
  253.                                     return;
  254.                                 }
  255.                                 var itemname = addslashes(item.market_hash_name);
  256.                                 request('http://' + sitename + '/sys/api.php?cost=' + encodeURIComponent(itemname), function(error, response, body) {
  257.                                     if (!error && response.statusCode === 200) {
  258.                                         if (body.indexOf('+-') > -1) {
  259.                                             offer.decline(function(err) {
  260.                                                 if (err) crash(err);
  261.                                                 message(offer.partner.getSteamID64(), 'Предмет ' + item.market_hash_name + ' не найден в базе данных!');
  262.                                             });
  263.                                             return;
  264.                                         } else {
  265.                                             totalPrice += parseFloat(body);
  266.                                             item.cost = parseFloat(body);
  267.                                         }
  268.                                     } else {
  269.                                         offer.decline();
  270.                                         logger.info("Что-то с сайтом!Проверьте настройки сайта!");
  271.                                         return;
  272.                                     }
  273.                                 });
  274.                                 if (item.market_hash_name.indexOf("Souvenir") > -1) {
  275.                                     offer.decline(function(err) {
  276.                                         message(offer.partner.getSteamID64(), 'Предмет ' + item.market_hash_name + ' запрещён на нашем сайте!');
  277.                                         checker = false;
  278.                                     });
  279.                                     return;
  280.                                 }
  281.                                 else {
  282.                                     itemsString += item.market_hash_name + "!END!";
  283.                                 }
  284.                             });
  285.                             setTimeout(function() {
  286.                                     if (totalPrice < minprice) {
  287.                                         logger.info('Отмена офера (Минимальная цена' + row[0].value + ' ,у игрока ' + totalPrice + ')');
  288.                                         offer.decline(function(err) {
  289.                                             message(offer.partner.getSteamID64(), 'Минимальная ставка ' + row[0].value + ' руб!Вы внесли ' + totalPrice + '!');
  290.                                             checker = false;
  291.                                         });
  292.                                         return;
  293.                                     }
  294.                                 mysqlConnection.query('SELECT * FROM `account` WHERE `steamid`="' + offer.partner.getSteamID64() + '"', function(usrerr, usrres, usrfields) {
  295.                                     if (usrres.length == 0) {
  296.                                         offer.decline(function(err) {
  297.                                             logger.info('Пользователя : ' + offer.partner.getSteamID64() + ' нету в базе !');
  298.                                             checker = false;
  299.                                         });
  300.                                         return;
  301.                                     } else if (usrres[0].linkid == null) {
  302.                                         logger.info('Пользователь : ' + offer.partner.getSteamID64() + ' не указал трейд-ссылку !');
  303.                                         offer.decline(function(err) {
  304.                                             message(offer.partner.getSteamID64(), 'Вы забыли указать ссылку на обмен!');
  305.                                             checker = false;
  306.                                         });
  307.                                         return;
  308.  
  309.                                     } else {
  310.                                         mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  311.                                             var current_game = (row[0].value);
  312.                                             logger.info('Обработка трейда в игру №' + current_game);
  313.                                             mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, rowa, fields) {
  314.                                                 mysqlConnection.query('SELECT * FROM `gamejack` WHERE `userid`=\'' + offer.partner.getSteamID64() + '\' AND `game`=\'' + current_game + '\'', function(err, rowf, fields) {
  315.                                                     var vsego = rowf.length + items.length;
  316.                                                     if (vsego > rowa[0].value) {
  317.                                                         logger.info('Внесено максимально вещей');
  318.                                                         offer.decline(function(err) {
  319.                                                             message(offer.partner.getSteamID64(), 'Вы внесли (' + vsego + '), максимальное количество (' + rowa[0].value + ') вещей');
  320.                                                             checker = false;
  321.                                                         });
  322.                                                         return;
  323.                                                     }
  324.                                                 });
  325.                                                 if (items.length > rowa[0].value) {
  326.                                                     logger.info('Внесено максимум вещей');
  327.                                                     offer.decline(function(err) {
  328.                                                         message(offer.partner.getSteamID64(), 'Вы внесли (' + items.length + '), максимальное количество (' + rowa[0].value + ') вещей');
  329.                                                         checker = false;
  330.                                                     });
  331.                                                     return;
  332.                                                 }
  333.                                             });
  334.                                             logger.info('Получение информации о игроке: ' + offer.partner.getSteamID64());
  335.                                             getUserInfo(offer.partner.getSteamID64(), function(error, data) {
  336.                                                 if (error) {
  337.                                                     message(offer.partner.getSteamID64(), 'Ошибка получения информации о пользователе!');
  338.                                                     logger.info('Ошибка 160' + error);
  339.                                                     offer.decline(function(err) {                                                
  340.                                                         crash(err);
  341.                                                     });
  342.                                                     return;
  343.                                                 }
  344.                                                 var datadec = JSON.parse(JSON.stringify(data.player));
  345.                                                 var name = addslashes(cleanString(datadec.name));
  346.                                                 var avatar = (datadec.ava);
  347.                                                 if (checker) {
  348.                                                     logger.info('Проверяем на ставки: '+noacept);
  349.                                                     var acceptRetry = 5;
  350.                                                     var acceptTrade = function() {
  351.                                                         logger.info('Принимаем трейд от игрока: ' + offer.partner.getSteamID64());
  352.                                                         if (noacept) {
  353.                                                             logger.info('>>>>>>> Принятие последних ставок <<<<<<<<<<<<');
  354.                                                             offer.decline(function(err) {
  355.                                                                 message(offer.partner.getSteamID64(), 'Ожидайте завершения игры!')
  356.                                                             });
  357.                                                             return;
  358.                                                         }
  359.                                                         acceptRetry--;
  360.                                                         offer.accept(function(err, response) {
  361.                                                             if (typeof offer.tradeID == "undefined" || offer.tradeID == null) {
  362.                                                                 logger.info('Трейдоффер №' + offer.tradeID + ' отклонен. Причина: не удалось принять трейдоффер. ');
  363.                                                                 message(offer.partner.getSteamID64(), 'Ваше предложение обмена отклонено. Причина: не удалось принять обмен.');
  364.                                                                 offer.decline();
  365.                                                             }
  366.                                                           var setinmysql = function() {
  367.                                                             manager.getOffer(offer.id, function(err, offer) {
  368.                                                                 if(err){
  369.                                                                     console.log(err);
  370.                                                                     setinmysql();
  371.                                                                 } else {
  372.                                                                 if(offer.state == 1){
  373.                                                                     setinmysql();
  374.                                                                 } else if(offer.state == 6 || offer.state == 7){
  375.                                                                     console.log('Трейд-оффер '+offer.id+' был отменен.');
  376.                                                                 } else if(offer.state == 3){
  377.                                                                 acceptedTrades.push(offer.tradeID);
  378.                                                                 message(offer.partner.getSteamID64(), 'Ваш обмен принят!');
  379.                                                                 mysqlConnection.query('UPDATE `account` SET `hisgames`=concat(`hisgames`,\',' + current_game + ',\') WHERE `steamid` = \'' + offer.partner.getSteamID64() + '\'', function(err, row, fields) {  if (err) crash(err);});
  380.                                                                 mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\'' + current_game + '\'', function(err, row, fields) {
  381.                                                                     if (err) crash(err);
  382.                                                                     var current_bank = parseFloat(row[0].cost);
  383.                                                                     items.forEach(function(item, i, arr) {
  384.                                                                         var itemsnum = row[0].itemsnum;
  385.                                                                         var marketname = item.type;
  386.                                                                         var itemname = addslashes(item.market_hash_name);
  387.                                                                         if (marketname != null) {
  388.                                                                             var color = '';
  389.                                                                             if (marketname.indexOf('Mil-Spec') > -1) {
  390.                                                                                 color = 'rgb(75,105,205)';
  391.                                                                             } else if (marketname.indexOf('Industrial grade') > -1) {
  392.                                                                                 color = 'rgb(100,150,225)';
  393.                                                                             } else if (marketname.indexOf('Restricted') > -1) {
  394.                                                                                 color = 'rgb(136,71,255)';
  395.                                                                             } else if (marketname.indexOf('Classified') > -1) {
  396.                                                                                 color = 'rgb(211,44,230)';
  397.                                                                             } else if (marketname.indexOf('Case') > -1) {
  398.                                                                                 color = 'rgb(211,44,230)';
  399.                                                                             } else if (marketname.indexOf('Covert') > -1) {
  400.                                                                                 color = 'rgb(235,75,75)';
  401.                                                                             } else if (marketname.indexOf('High Grade') > -1) {
  402.                                                                                 color = 'rgb(0,153,153)';
  403.                                                                             } else {
  404.                                                                                 color = 'rgb(0,153,153)';
  405.                                                                             }
  406.                                                                             mysqlConnection.query('INSERT INTO `gamejack` (`userid`,`username`,`item`,`color`,`itemtype`,`value`,`avatar`,`image`,`from`,`to`,`thisitem`,`game`,`tradeid`) VALUES (\'' + offer.partner.getSteamID64() + '\',\'' + name + '\',\'' + itemname + '\',\'' + item.name_color + '\',\'' + color + '\',\'' + item.cost + '\',\'' + avatar + '\',\'' + item.getLargeImageURL() + '\',\'' + current_bank + '\'+\'0\',\'' + current_bank + '\'+\'' + item.cost + '\',\'yes\',\'' + current_game + '\',\'' + offer.tradeID + '\')', function(err, row, fields) {
  407.                                                                                 if (err) logger.info('Ошибка 12' + err);
  408.                                                                             });
  409.                                                                             mysqlConnection.query('UPDATE `games` SET `itemsnum`=`itemsnum`+1, `cost`=`cost`+\'' + item.cost + '\' WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {if (err) logger.info(err);});
  410.                                                                             current_bank = parseFloat(current_bank + item.cost);
  411.                                                                             itemsnum++;
  412.                                                                         }
  413.                                                                     });
  414.                                                                     logger.info('Добавили предметы в игру!');
  415.                                                                     //////Рсширение///////
  416.                                                                     io.emit('game', {
  417.                                                                         bank: current_bank,
  418.                                                                         game: current_game,
  419.                                                                     });
  420.                                                                     /////////////////////
  421.                                                                 });
  422.                                                                 io.emit('newitem', {
  423.                                                                     name: 'newitem',
  424.                                                                 });
  425.                                                                 logger.info('Трейд #' + offer.tradeID + ' от ' + name + ' (' + offer.partner.getSteamID64() + ') принят в игру ' + current_game + '!');
  426.                                                                 setTimeout(getPlayers, 2000);
  427.                                                                 }
  428.                                                               }
  429.                                                             });
  430.                                                           }
  431.                                                           setTimeout(setinmysql, 5000);
  432.                                                         });
  433.                                                     };
  434.                                                     acceptTrade();
  435.                                                 }
  436.                                             });
  437.                                         });
  438.                                     }
  439.                                 });
  440.                             }, 1000);
  441.                         }
  442.                     }
  443.                 });
  444.             } else {
  445.                 logger.info('Человек с ID ' + offer.partner.getSteamID64() + ' пытается спиздить вещи!');
  446.                 offer.decline(function(err) {
  447.                     if ('Ошибка 16' + err) {
  448.                         logger.error('Немогу отменить офер ' + offer.id + ' ошибка: ' + err);
  449.                     } else {
  450.                         logger.debug('Обмен отклонен');
  451.  
  452.                     }
  453.                 });
  454.             }
  455.         }
  456.     }
  457. }
  458. manager.on('newOffer', function(offer) {
  459.     processing(offer);
  460. });
  461. function noenter() {
  462.         logger.info('Заканчиваем приём!');
  463.         noacept = true;
  464. }
  465. function endgame() {
  466.     logger.info('Последние ставки!');
  467.     last = true;
  468.     io.emit('lastitems', {
  469.         time: '0:1',
  470.     });
  471.     setTimeout(function() {
  472.         last = false;
  473.         roulete = true;
  474.         mysqlConnection.query('UPDATE info SET value = "pause" WHERE name = "state"', function(err, row, fields) {});
  475.         var url = 'http://' + sitename + '/sys/winnerJack.php?item=dsadasdfasf8saf6fas67as7f4af1';
  476.         request(url, function(error, response, body) {
  477.             logger.info(body);
  478.             timer = false;
  479.                 mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  480.                     var current_game = (row[0].value);
  481.                     io.emit('end-game', {
  482.                         game: current_game-1,
  483.                     });
  484.                     logger.info('Конец игры' + current_game);
  485.                 });
  486.  
  487.             setTimeout(function() {
  488.                 mysqlConnection.query('UPDATE info SET value = "waiting" WHERE name = "state"', function(err, row, fields) {});
  489.                 logger.info('Закончилась рулетка');
  490.                 setTimeout(function() {
  491.                 io.emit('newitem', {
  492.                     name: 'newitem',
  493.                 });
  494.                 },2000);
  495.                 roulete = false;
  496.                 noacept = false;
  497.  
  498.             }, 10000);
  499.             logger.info('Закончилась игра!Определяем победителя....');
  500.             endtimer = -1;
  501.         });
  502.     }, 7000);
  503. };
  504.  
  505.  
  506.  
  507.  
  508. function getUserInfo(steamids, callback) {
  509.     var url = 'http://' + sitename + '/sys/api.php?getUserInfo=' + steamids;
  510.     request({
  511.         url: url,
  512.         json: true
  513.     }, function(error, response, body) {
  514.         if (!error && response.statusCode === 200) {
  515.             callback(null, body);
  516.         } else if (error) {
  517.             getUserInfo(steamids, callback);
  518.         }
  519.     });
  520. }
  521.  
  522. function addslashes(str) {
  523.     if (typeof str !== "undefined" && str !== null) {
  524.     // some code here
  525.     str = str.replace(/\\/g, '\\\\');
  526.     str = str.replace(/\'/g, '\\\'');
  527.     str = str.replace(/\"/g, '\\"');
  528.     str = str.replace(/\0/g, '\\0');
  529.     return str;
  530.     }else  return ;
  531. }
  532.  
  533. var itemscopy;
  534. var endtimer = -1;
  535. steam.on('accountLimitations', function(limited, communityBanned, locked, canInviteFriends) {
  536.     var limitations = [];
  537.     if (limited) {
  538.         logger.warn('Найдено ограничение связаное с WebAPI,пожалуйста ,решите проблему!');
  539.     }
  540.     if (communityBanned) {
  541.         logger.warn('Аккаунт получил community бан,замените на новый!');
  542.     }
  543.     if (locked) {
  544.         logger.error('Этот аккаунт заблокирован!Ждём замены....Выключаемся......');
  545.         process.exit(1);
  546.     }
  547.     if (limitations.length === 0) {
  548.         logger.info("Ваш аккаунт не имеет банов.");
  549.     } else {
  550.         logger.info("Ваш аккаунт " + limitations.join(', ') + ".");
  551.     }
  552.     if (!canInviteFriends) {
  553.         logger.warn('Невозможно добавлять в друзья!На аккаунте ограничения!')
  554.     }
  555. });
  556. steam.on('loginKey', function(key) {
  557.     fs.writeFile("key", key, function(err) {
  558.         if (err) {
  559.             return logger.info('Ошибка key' + err);
  560.         }
  561.         logger.info("Создан и сохранён новый ключ!");
  562.     });
  563. });
  564.  
  565. steam.on('error', function(e) {
  566.     logger.info(e);
  567.     process.exit(1);
  568. });
  569. steam.on('loggedOn', function(result) {
  570.     mysqlConnection.query('UPDATE info SET value = "waiting" WHERE name = "state"', function(err, row, fields) {});
  571.     if (result.eresult === Steam.EResult.OK) {
  572.         relogin = setInterval(reconnect, 1000 * 60 * 60 * 2);
  573.         setTimeout(function() {
  574.             mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) {
  575.                 if (err) return;
  576.                 mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\'' + rows[0].value + '\'', function(errs, rowss, fieldss) {
  577.                     if (errs) return;
  578.                     var timeleft;
  579.                     if (rowss[0].starttime == 2147483647) timeleft = GameTime;
  580.                     else {
  581.                         var unixtime = Math.round(new Date().getTime() / 1000.0);
  582.                         timeleft = rowss[0].starttime + GameTime - unixtime;
  583.                         if (timeleft < 0) timeleft = 0;
  584.                     }
  585.                     if (timeleft != GameTime) {
  586.                         setTimeout(endgame, timeleft * 1000);
  587.                         logger.info('Restoring game on ' + timeleft + 'second');
  588.                     }
  589.                 });
  590.             });
  591.         }, 1500);
  592.         logger.info('==============================Информация===============================');
  593.         logger.info('Авторизован под  steamid:' + steam.steamID.getSteamID64() + '');
  594.         steam.on('emailInfo', function(address, validated) {
  595.             logger.info("Почта : " + address + " " + (validated ? "Привязана" : "Не привязана"));
  596.         });
  597.         steam.on('wallet', function(hasWallet, currency, balance) {
  598.             logger.info("На счету: " + SteamUser.formatCurrency(balance, currency));
  599.         });
  600.         logger.info("Привязан к сайту : " + config.domain);
  601.         mysqlConnection.query('SELECT * FROM `gamejack`', function(err, row, fields) {
  602.             if (err) {
  603.                 logger.error("Ошибка подключения к бд : - " + err);
  604.                 process.exit(1);
  605.             } else logger.info("Подключение к БД " + config.mysql.database + " успешно");
  606.         });
  607.         mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'minbet\'', function(err, row, fields) {
  608.            minprice= row[0].value;
  609.            logger.error("Минимальная цена выставлена на : " + row[0].value+" рублей");
  610.         });
  611.         logger.info("Все процессы запущены,Начинаем работу!");
  612.         steam.setPersona(Steam.EPersonaState.LookingToTrade, config.name + '');
  613.         for (var i = 0; i < config.admins.length; i++) {
  614.             steam.addFriend(config.admins[i]);
  615.             logger.info(config.admins[i] + ' Добавили в друзья')
  616.             steam.chatMessage(config.admins[i], 'Бот перезапущен!');
  617.         }
  618.         steam.gamesPlayed(config.name);
  619.     }
  620.  
  621.  
  622. });
  623.  
  624. client.on("newConfirmation", function(confirmation) {
  625.     logger.info("New confirmation");
  626.     processConfirmation(confirmation, function(passed) {
  627.         logger.info(passed);
  628.     });
  629. });
  630.  
  631. client.on("confKeyNeeded", function(tag, callback) {
  632.     logger.info("Confirmation key needed");
  633.     var time = Math.floor(Date.now() / 1000);
  634.     logger.info(callback.toString());
  635.     callback(null, time, SteamTotp.getConfirmationKey(config.bot.identity_secret, time, tag));
  636. });
  637.  
  638. function processConfirmation(confirmation, callback) {
  639.     var time = Math.floor(Date.now() / 1000);
  640.     var key = SteamTotp.getConfirmationKey(config.bot.identity_secret, time, "conf");
  641.     client.respondToConfirmation(confirmation.id, confirmation.key, time, key, true, function(err) {
  642.         logger.info("Responding to confirmation " + confirmation.id);
  643.         var ret = true;
  644.         if (err != null) {
  645.             logger.info('Ошибка 65' + err);
  646.             ret = false;
  647.             logger.info("Responding to confirmation " + confirmation.id + " failed");
  648.         } else {
  649.             logger.info("Responding to confirmation " + confirmation.id + " succeeded");
  650.         }
  651.  
  652.         if (typeof(callback) == "function") {
  653.             callback(ret);
  654.         }
  655.     });
  656. }
  657. steam.on('webSession', function(sessionID, cookies) {
  658.     manager.setCookies(cookies, function(err) {
  659.         if (err) {
  660.             logger.error('Не могу получить куки,ошибка: ' + err);
  661.             process.exit(1);
  662.         }
  663.         logger.info("API ключ: " + manager.apiKey);
  664.     });
  665.     client.setCookies(cookies);
  666.     client.startConfirmationChecker(30000, config.bot.identity_secret);
  667.     setInterval(sendoffers, 5000);
  668. });
  669.  
  670. function reconnect() {
  671.     clearTimeout(relogin);
  672.     steam.webLogOn();
  673. }
  674.  
  675.  
  676. var detected = false;
  677. var detected2 = true;
  678. var itemscopy;
  679.  
  680. function in_array(needle, haystack, strict) {
  681.     var found = false,
  682.         key, strict = !!strict;
  683.  
  684.     for (key in haystack) {
  685.         if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  686.             found = true;
  687.             break;
  688.         }
  689.     }
  690.  
  691.     return found;
  692. }
  693.  
  694. function cleanString(input) {
  695.     var output = "";
  696.     for (var i = 0; i < input.length; i++) {
  697.         if (input.charCodeAt(i) <= 127) {
  698.             output += input.charAt(i);
  699.         }
  700.     }
  701.     return output;
  702. }
  703.  
  704. function sendoffers() {
  705.     mysqlConnection.query('SELECT * FROM `queue` WHERE `status`=\'active\' ORDER BY `unic` DESC LIMIT 1', function(err, row, fields) {
  706.         if (err) {
  707.             logger.info('Tried checking offers: ERROR 3! (mysql query error: ' + err.stack + ')');
  708.             return;
  709.         }
  710.         if (detected == true) {
  711.                 //logger.info('Tried checking offers: ERROR 4! (detected==true)');
  712.                 return;
  713.        }
  714.        
  715.  
  716.         for (var y = 0; y < row.length; y++) {
  717.             detected = true;
  718.             logger.info('Y: ' + y + ' Processing offer ' + row[y].id + ' for game ' + row[y].unic);
  719.             var bd = row[y];
  720.                 manager.loadInventory(730, 2, true, function(err, myItems, currencies) {
  721.  
  722.                     if (err) {
  723.                         detected = false;
  724.                         reconnect();
  725.                         logger.info('Ошибка загрузка инвентаря: ' + err);
  726.                         return;
  727.                     }
  728.                     itemscopy = myItems;
  729.                     if (bd.token.length < 5) {
  730.                         logger.info('Token is: ' + bd.token + ' which seems to be incorrect. Stopping the process...');
  731.                         logger.info('The "token" is the last part in trade url and it is 6 characters long, maybe user hasn\'t set his trade url in the database. Check user with steam id ' + row[y].userid);
  732.                         detected = false;
  733.                    }
  734.  
  735.  
  736.                     var queueid = bd.id;
  737.                     var gameid = bd.unic;
  738.                     var theuserid = bd.userid;
  739.                     var thetoken = bd.token;
  740.                     var theitems = bd.items;
  741.                     var sendItems = (bd.items).split('/');
  742.                     var item = [],
  743.                         queries = [],
  744.                         itemstobesent = '',
  745.                         itemidsintheoffer = [],
  746.                         num = 0;
  747.  
  748.                     for (var x = 0; x < itemscopy.length; x++) {
  749.                         (function(z) { //fucking bullshit asynchronous crap
  750.                             mysqlConnection.query('SELECT * FROM `sentitems` WHERE `itemid`=\'' + itemscopy[z].id + '\'', function(errz, rowz, fieldsz) {
  751.                                 if (errz) {
  752.                                     detected = false;
  753.                                     logger.info('Q:' + queueid + '/G:' + gameid + '/ Error while trying to check for sent items (mysql query error: ' + errz.stack + ')');
  754.                                     return;
  755.                                 }
  756.                                 itemscopy[z].market_name = itemscopy[z].market_name.replace('?', '&#9733;');
  757.                                 itemscopy[z].market_name = itemscopy[z].market_name.replace('??', '??');
  758.                                 itemscopy[z].market_name = itemscopy[z].market_name.replace('?', '?');
  759.  
  760.                                 var countitems = rowz.length;
  761.                                 for (var j = 0; j < sendItems.length; j++) {
  762.                                     if (itemscopy[z].tradable && (itemscopy[z].market_name).indexOf(sendItems[j]) == 0) {
  763.                                         if (!(countitems > 0)) {
  764.                                             item[num] = {
  765.                                                 appid: 730,
  766.                                                 contextid: 2,
  767.                                                 amount: 1, //was itemscopy[z].amount ?
  768.                                                 assetid: itemscopy[z].id
  769.                                             }
  770.                                             itemstobesent = itemstobesent + '' + itemscopy[z].market_name + '/';
  771.                                             queries[num] = 'INSERT INTO `sentitems` (`id`,`itemid`,`name`,`gameid`,`queueid`,`userid`) VALUES ("","' + itemscopy[z].id + '","' + itemscopy[z].market_name.replace('??', '??') + '","' + gameid + '","' + queueid + '","' + theuserid + '")';
  772.                                             sendItems[j] = "emptyqq";
  773.                                             itemscopy[z].market_name = "zzzzzz";
  774.                                             num++;
  775.  
  776.                                         } else {
  777.                                             detected = false;
  778.                                             logger.info('Q:' + queueid + '/G:' + gameid + '/Z:' + z + ' ' + itemscopy[z].market_name + ' with id ' + itemscopy[z].id + ' was already sent in another offer. looking for another item...');
  779.                                         }
  780.                                     }
  781.                                 }
  782.                                 if (num == sendItems.length) {
  783.                                     logger.info(num + '==' + sendItems.length);
  784.                                     var offer = manager.createOffer(theuserid);
  785.                                     item.forEach(function(itemf) {
  786.                                         offer.addMyItem(itemf);
  787.                                     });
  788.                                     var sentRetry = 5;
  789.                                     var sendtrade = function() {
  790.                                     sentRetry--;
  791.                                     offer.send("Ваши вещи с сайта " + config.name, thetoken, function(err, csgo) {
  792.                                         if (err) {
  793.                                             if (sentRetry > 0) {
  794.                                                 logger.info('Не удалось отослать трейдоффер. Повторяю попытку. Попыток осталось: ' + sentRetry + '. Текст ошибки: ' + err + '');
  795.                                                 setTimeout(function() {
  796.                                                     sendtrade();
  797.                                                 }, (6 - sentRetry) * 1000);
  798.                                             } else {
  799.                                                 detected = false;
  800.                                                 logger.info('Q:' + queueid + '/G:' + gameid + '/ ' + '(ERROR) Tried sending offers: Token: ' + thetoken + '; USERID: ' + theuserid + '; items: ' + itemstobesent + ' (steam servers down? too many offers sent already? empty token (from trade link) in database? check pls). ' + err + '. https://github.com/SteamRE/SteamKit/blob/master/Resources/SteamLanguage/eresult.steamd');
  801.                                                 logger.info('Трейдоффер отослать не удалось.Текст ошибки: ' + err+'.Игра: '+gameid);                  
  802.                                                 mysqlConnection.query('UPDATE `queue` SET `err`=\'' + err + '\', `status`=\'nosent\' WHERE `id`=\'' + queueid + '\'', function(err, row, fields) {
  803.                                                       if (err) throw err;
  804.                                                 });
  805.                                                 return;
  806.                                             }
  807.                                         }else{             
  808.                                         detected = false;
  809.                                         logger.info('Q:' + queueid + '/G:' + gameid + '/ ' + 'Trade offer ' + queueid + ' (game ' + gameid + ') sent! Marking items as sent in the database....');
  810.                                         var thetheitems = theitems.replace(/\/$/, '');
  811.                                         var theitemstobesent = itemstobesent.replace(/\/$/, '');
  812.                                         var numtheitems = (thetheitems).split('/').length;
  813.                                         var numitemstobesent = (theitemstobesent).split('/').length;
  814.                                         if (numtheitems != numitemstobesent) {
  815.                                             logger.info('Q:' + queueid + '/G:' + gameid + '/ ' + 'WARNING !!! Sent ' + numtheitems + ' items! Needed to send ' + numitemstobesent + '!!!');
  816.                                             logger.info('Sent (' + numtheitems + '): ' + thetheitems);
  817.                                             logger.info('Needed to send (' + numitemstobesent + '): ' + theitemstobesent);
  818.                                         } else {
  819.                                             logger.info('Q:' + queueid + '/G:' + gameid + '/ ' + 'ALL IS GOOD! Sent ' + numtheitems + ' items! Needed to send ' + numitemstobesent + '.');
  820.                                         }
  821.                                         for (bla = 0; bla < queries.length; bla++) {
  822.                                             mysqlConnection.query(queries[bla], function(blaerr, blarows, blafields) {
  823.                                                 if (blaerr) {
  824.                                                     throw blaerr;
  825.                                                 }
  826.  
  827.                                             });
  828.                                         }
  829.                                         mysqlConnection.query('UPDATE `queue` SET `status`=\'sent ' + offer.id + '\' WHERE `id`=\'' + queueid + '\'', function(err, row, fields) {
  830.                                             if (err) throw err;
  831.                                         });
  832.  
  833.                                         }
  834.                                     });
  835.                                     }
  836.                                     sendtrade();
  837.  
  838.                                     num++; //avoid running this multiple times when the loop runs
  839.                                 }else detected = false;
  840.                             });
  841.                         })(x);
  842.                     }
  843.                 });
  844.  
  845.  
  846.         }
  847.     });
  848. }
  849.  
  850.  
  851.  
  852.  
  853.  
  854. steam.on('friendMessage', function(steamID, message) {
  855.     if (config.admins.indexOf(steamID.getSteamID64()) != -1) {
  856.         if (message.indexOf("/sendallitems") == 0) {
  857.             manager.loadInventory(730, 2, true, function(err, myItems) {
  858.                 var offer = manager.createOffer(steamID.getSteamID64());
  859.                 if (err) {
  860.                     logger.info('Ошибка fr' + err);
  861.                     return;
  862.                 }
  863.                 for (var i = 0; i < myItems.length; i++) {
  864.                     offer.addMyItem(myItems[i]);
  865.                 }
  866.                 offer.send("Вывод вещей с бота!");
  867.                 steam.chatMessage(steamID.getSteamID64(), 'Обмен отправлен!');
  868.             });
  869.         } else if (message.indexOf("/send") == 0) {
  870.             var params = message.split(' ');
  871.             if (params.length == 1) return steam.chatMessage(steamID.getSteamID64(), 'Формат: /send [название предмета]');
  872.             manager.loadInventory(730, 2, true, function(err, myItems) {
  873.                 if (err) {
  874.                     logger.info('Ошибка ff' + err);
  875.                     steam.chatMessage(steamID.getSteamID64(), 'Не могу загрузить свой инвентарь, попробуй ещё раз');
  876.                     return;
  877.                 }
  878.                 var offer = manager.createOffer(steamID.getSteamID64());
  879.                 for (var i = 0; i < myItems.length; i++) {
  880.                     if ((myItems[i].market_hash_name).indexOf(params[1]) != -1) {
  881.                         offer.addMyItem(myItems[i]);
  882.                     }
  883.                 }
  884.                 offer.send("Запрос на отправку");
  885.                 steam.chatMessage(steamID.getSteamID64(), 'Обмен отправлен!');
  886.             });
  887.         } else if (message.indexOf("/show") == 0) {
  888.             var params = message.split(' ');
  889.             manager.loadInventory(730, 2, true, function(err, items) {
  890.                 if (err) {
  891.                     steam.chatMessage(steamID.getSteamID64(), 'Не могу загрузить свой инвентарь, попробуй ещё раз!');
  892.                     return;
  893.                 }
  894.                 steam.chatMessage(steamID.getSteamID64(), 'Смотри: ');
  895.                 for (var i = 0; i < items.length; i++) {
  896.                     steam.chatMessage(steamID.getSteamID64(), 'http://steamcommunity.com/id/76561198195552698/inventory/#' + items[i].appid + '_' + items[i].contextid + '_' + items[i].id);
  897.                 }
  898.             });
  899.         } else if (message.indexOf("/end") == 0) {
  900.             steam.chatMessage(steamID.getSteamID64(), 'Игра окончена!');
  901.             if (endtimer != -1) clearTimeout(endtimer);
  902.             endgame();
  903.         } else if (message.indexOf("/code") == 0) {
  904.             var code = SteamTotp.generateAuthCode(config.bot.shared_secret);
  905.             steam.chatMessage(steamID.getSteamID64(), 'Your login code: ' + code + '');
  906.         } else if (message.indexOf("/stop") == 0) {
  907.             pause = true;
  908.             steam.chatMessage(steamID.getSteamID64(), 'Сайт закрыт!');
  909.         } else if (message.indexOf("/play") == 0) {
  910.             steam.chatMessage(steamID.getSteamID64(), 'Приём трейдов возобновлён!');
  911.             pause = false;
  912.         }else if (message.indexOf("/gameplay")==0){
  913.                 mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  914.                     var current_game = (row[0].value);
  915.                       mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM `gamejack` WHERE `game` = \'' + current_game + '\'', function(err, rows) {
  916.                          someVar = rows[0].playersCount;
  917.                          logger.info('Игроков: ' + someVar);
  918.                            mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\'' + current_game + '\'', function(errs, rowss, fieldss) {
  919.                                  if (rowss[0].starttime == 2147483647) {                                 
  920.                                      logger.info('Найдено 2 игрока,Стартуем игру!');
  921.                                      io.emit('timer', {
  922.                                         time: '0:0',
  923.                                      });
  924.                                      endtimer = setTimeout(endgame, GameTime * 1000);
  925.                                      mysqlConnection.query('UPDATE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  926.                                  }
  927.                            });
  928.                      });
  929.                 });    
  930.         } else if (message.indexOf("/rol") == 0) {
  931.             steam.chatMessage(steamID.getSteamID64(), 'Рулетка запущена!');
  932.             var params = message.split(' ');
  933.             mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  934.                 var current_game = (row[0].value);
  935.                 io.emit(params[1], {
  936.                     game: current_game,
  937.                 });
  938.             });
  939.  
  940.         } else if (message.indexOf("/help") == 0) {
  941.             steam.chatMessage(steamID.getSteamID64(), 'Помощь по командам:');
  942.             steam.chatMessage(steamID.getSteamID64(), '/stop -  остановить приём ставок');
  943.             steam.chatMessage(steamID.getSteamID64(), '/play - возобновить приём ставок');
  944.             steam.chatMessage(steamID.getSteamID64(), '/rol -крутить рулетку(Визуально)');
  945.             steam.chatMessage(steamID.getSteamID64(), '/code -получить код ESCROW');
  946.             steam.chatMessage(steamID.getSteamID64(), '/show - показать инвентарь');
  947.             steam.chatMessage(steamID.getSteamID64(), '/send [] -  отправить нужный предмет');
  948.             steam.chatMessage(steamID.getSteamID64(), '/sendallitems -  отправить все предметы');
  949.             steam.chatMessage(steamID.getSteamID64(), '/end = закончить текущий раунд досрочно');
  950.  
  951.  
  952.         }
  953.     }
  954.     getUserInfo(steamID.getSteamID64(), function(error, data) {
  955.         if (error) throw error;
  956.         var datadec = JSON.parse(JSON.stringify(data.player));
  957.         var name = datadec.name;
  958.         logger.info('STEAM ==>' + name + ': ' + message); // Log it
  959.     });
  960. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement