Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.35 KB | None | 0 0
  1. var Winston = require('winston');
  2. var Logger = new (Winston.Logger)({
  3. transports: [
  4. new (Winston.transports.Console)({
  5. colorize: true,
  6. timestamp: true,
  7. level: 'debug',
  8. label: 'BOT'
  9. }),
  10. new (Winston.transports.File)({
  11. level: 'info',
  12. label: 'BOT',
  13. createDirectory: true,
  14. timestamp: true,
  15. filename: 'bot.log',
  16. json: false
  17. })
  18. ]
  19. });
  20.  
  21. var Crypto = require("crypto");
  22.  
  23. var SteamUser = require('steam-user');
  24. var SteamTotp = require('steam-totp');
  25. var SteamTradeOffers = require('steam-tradeoffers');
  26. var TradeOfferManager = require('steam-tradeoffer-manager');
  27. var Steamcommunity = require('steamcommunity');
  28.  
  29. var Client = new SteamUser();
  30. var Offers = new SteamTradeOffers();
  31. var Manager = new TradeOfferManager({
  32. "steam": Client,
  33. "domain": "localhost",
  34. "language": "ru",
  35. "pollInterval": 15000
  36. });
  37. var Community = new Steamcommunity();
  38.  
  39. var Config = require('./config.js');
  40.  
  41. /**
  42. * Старый говно код
  43. */
  44.  
  45. var RedisClient, io, Requestify;
  46.  
  47. module.exports.init = function (redis, ioSocket, requestifyCore) {
  48. io = ioSocket;
  49. RedisClient = redis.createClient({host: Config.redis.host, port: Config.redis.port});
  50. Requestify = requestifyCore;
  51. };
  52.  
  53. var RedisChannels = {
  54. checkList: 'check.list',
  55. checkedList: 'checked.list',
  56. betsList: 'bets.list',
  57. sendOffersList: 'send.offers.list',
  58. tradeoffersList: 'tradeoffers.list',
  59. declineList: 'decline.list',
  60. usersQueue: 'usersQueue.list',
  61. itemstobonus: 'items.to.bonus'
  62. };
  63.  
  64. /**
  65. * Переменные авторизации
  66. */
  67.  
  68. var LogonDetails = {
  69. "accountName": Config.bot.username,
  70. "password": Config.bot.password,
  71. "twoFactorCode": SteamTotp.getAuthCode(Config.bot.secret)
  72. };
  73.  
  74.  
  75.  
  76. var Variables = {
  77. redis: {
  78. checkProcceed: false,
  79. checkedProcceed: false,
  80. declineProcceed: false,
  81. betsProcceed: false,
  82. sendProcceed: false,
  83. itemsTobonusProcced: false
  84. },
  85. auth: false,
  86. delayForNewGame: null,
  87. depositTime: null,
  88. acceptOffer: null,
  89. checkingOffers: []
  90. };
  91.  
  92. /**
  93. * Авторизация бота
  94. */
  95.  
  96. Client.logOn(LogonDetails);
  97.  
  98. /**
  99. * Обработка депозита
  100. */
  101.  
  102. var Deposit_Check = function () {
  103.  
  104. Variables.depositTime = Date.now();
  105.  
  106. Requestify.post('http://localhost/api/checkOffer', {
  107. secretKey: Config.secretKey
  108. }).then(function (response) {
  109.  
  110. if (JSON.parse(response.body).success) {
  111. Variables.redis.checkProcceed = false;
  112. }
  113.  
  114. }, function (response) {
  115. Logger.error("Ошибка при проверке оффера");
  116. console.log(response.body);
  117. setTimeout(function () {
  118. Deposit_Check();
  119. }, 2000);
  120. });
  121. };
  122.  
  123. var Deposit_Accept = function (offer) {
  124.  
  125. if (!Variables.acceptOffer) {
  126. Logger.info("Попытка принятия оффера #" + offer.id);
  127.  
  128. Variables.acceptOffer = true;
  129. }
  130.  
  131. Offers.acceptOffer({tradeOfferId: offer.id}, function (err, body) {
  132. if (!err && body) {
  133. RedisClient.multi([
  134. ["lrem", RedisChannels.tradeoffersList, 0, offer.id],
  135. ["lrem", RedisChannels.usersQueue, 1, offer.steamid64],
  136. ["rpush", RedisChannels.betsList, JSON.stringify(offer)]
  137. ]).exec(function (err, replies) {
  138. RedisClient.lrange(RedisChannels.usersQueue, 0, -1, function (err, queues) {
  139. io.sockets.emit('queue', queues);
  140.  
  141. RedisClient.lrange(RedisChannels.checkedList, 0, -1, function (err, queues) {
  142. queues.forEach(function (element, i, arr) {
  143. if (JSON.parse(element).id == offer.id) {
  144. RedisClient.lrem(RedisChannels.checkedList, 0, element);
  145. }
  146. });
  147. });
  148.  
  149. Logger.info("Оффер #" + offer.id + " успешно принят");
  150. Logger.info("Оффер #" + offer.id + " принят за " + ((Date.now() - Variables.depositTime) / 1000).toFixed(2) + " секунд");
  151.  
  152. Variables.redis.checkedProcceed = false;
  153. Variables.acceptOffer = false;
  154. Variables.depositTime = null;
  155. });
  156. });
  157. } else {
  158. Get_Error_Code(err.toString(), function (code) {
  159.  
  160. if (code != 28) {
  161. Logger.error("Ошибка при принятии оффера #" + offer.id + " (" + err + ")");
  162.  
  163. RedisClient.multi([
  164. ['rpush', RedisChannels.declineList, offer.id],
  165. ["lrem", RedisChannels.tradeoffersList, 0, offer.id],
  166. ['lrem', RedisChannels.usersQueue, 1, offer.steamid64]
  167. ]).exec(function (err, replies) {
  168.  
  169. RedisClient.lrange(RedisChannels.checkedList, 0, -1, function (err, queues) {
  170. queues.forEach(function (element, i, arr) {
  171. if (JSON.parse(element).id == offer.id) {
  172. RedisClient.lrem(RedisChannels.checkedList, 0, element);
  173. }
  174. });
  175. });
  176.  
  177. Variables.acceptOffer = false;
  178. Variables.depositTime = null;
  179. Variables.redis.checkedProcceed = false;
  180. });
  181. return;
  182. }
  183.  
  184. if (code == 11) {
  185. RedisClient.lrem(RedisChannels.usersQueue, 0, offer.steamid64);
  186. RedisClient.lrem(RedisChannels.tradeoffersList, 0, offer.id);
  187.  
  188. RedisClient.lrange(RedisChannels.checkedList, 0, -1, function (err, queues) {
  189. queues.forEach(function (element, i, arr) {
  190. if (JSON.parse(element).id == offer.id) {
  191. RedisClient.lrem(RedisChannels.checkedList, 0, element);
  192. }
  193. });
  194. });
  195. }
  196.  
  197. Variables.redis.checkedProcceed = false;
  198. });
  199. }
  200. });
  201. };
  202.  
  203. var Deposit_Decline = function (offer) {
  204.  
  205. Logger.info("Попытка отклонения оффера #" + offer);
  206.  
  207. Offers.declineOffer({tradeOfferId: offer}, function (err, body) {
  208. if (!err) {
  209. Logger.info("Оффер #" + offer + " успешно отклонён");
  210.  
  211. RedisClient.lrem(RedisChannels.declineList, 0, offer);
  212. RedisClient.lrem(RedisChannels.tradeoffersList, 0, offer);
  213.  
  214. Variables.redis.declineProcceed = false;
  215. } else {
  216. Logger.error("Ошибка отклонения оффера #" + offer);
  217. Variables.redis.declineProcceed = false;
  218. }
  219. });
  220. };
  221.  
  222. /**
  223. * Проверка ставки
  224. */
  225.  
  226. var Check_Bet = function () {
  227. Requestify.post('http://localhost/api/newBet', {
  228. secretKey: Config.secretKey
  229. }).then(function (response) {
  230.  
  231. if (JSON.parse(response.body).success) {
  232. Logger.info("Ставка добавленна");
  233. Variables.redis.betsProcceed = false;
  234. }
  235.  
  236. }, function (response) {
  237. Logger.error("Ошибка при добавлении новой ставки");
  238. console.log(response.body);
  239. setTimeout(function () {
  240. Check_Bet()
  241. }, 2000);
  242. });
  243. };
  244.  
  245. var addNewItemsBonus = function(){
  246. Requestify.post('http://localhost/api/newItemsBonus', {
  247. secretKey: Config.secretKey
  248. })
  249. .then(function(response) {
  250. var answer = JSON.parse(response.body);
  251. if(answer.success){
  252. console.tag('SteamBotBonus').log('success');
  253. itemsTobonusProcced = false;
  254. }
  255. },function(response){
  256. console.tag('SteamBotBonus').error('Something wrong with newItems. Retry...');
  257. setTimeout(function(){addNewItemsBonus()}, 1000);
  258. });
  259. }
  260.  
  261. /**
  262. * Отправка выйгрыша
  263. */
  264.  
  265. var Send_Prize = function (steamid64, token, items, game, offer) {
  266.  
  267. var Trade = Manager.createOffer(steamid64, token);
  268.  
  269. Trade.setToken(token);
  270. Trade.getUserDetails(function (err, me, them) {
  271. if (err) {
  272. Logger.error("Ошибка получения данных об Escrow при отправке выйгрыша");
  273. Variables.redis.sendProcceed = false;
  274. }
  275.  
  276. if (them.escrowDays > 0 || me.escrowDays > 0) {
  277. Logger.error("Ошибка отпрвка выйгрыша у пользователя Escrow");
  278. Variables.redis.sendProcceed = false;
  279. } else {
  280. Manager.loadInventory(730, 2, true, function (err, inventory) {
  281.  
  282. if (err) {
  283. Logger.error("Ошибка получения инвентаря! при отправке выйгрыша");
  284. Variables.redis.sendProcceed = false;
  285. return;
  286. }
  287.  
  288. var pool = inventory.filter(function (item) {
  289. for (var i = 0; i < items.length; i++) {
  290. if (item["classid"] == items[i]) {
  291. items.splice(i, 1);
  292. return true
  293. }
  294. }
  295.  
  296. return false
  297. });
  298.  
  299. Trade.setMessage(Config.nameSite + " игра:" + game + " Хеш : " + Crypto.randomBytes(30).toString('hex'));
  300. Trade.addMyItems(pool);
  301. Trade.send(function (err) {
  302. if (err) {
  303. Logger.error("Ошибка при отправке выйгрыша (" + err + ")");
  304.  
  305. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  306. Set_Prize_Status(game, 2);
  307. });
  308.  
  309. Variables.redis.sendProcceed = false;
  310.  
  311. } else {
  312. Logger.info("Оффер успешно отправлен пользователю с SteamID64: " + steamid64);
  313.  
  314. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  315. Set_Prize_Status(game, 1);
  316. Variables.redis.sendProcceed = false;
  317. });
  318. }
  319. });
  320. });
  321. }
  322. });
  323.  
  324. };
  325.  
  326.  
  327. var Send_Prize_Low = function (steamid64, token, items, game, offer) {
  328.  
  329. var Trade = Manager.createOffer(steamid64, token);
  330.  
  331. Trade.setToken(token);
  332. Trade.getUserDetails(function (err, me, them) {
  333. if (err) {
  334. Logger.error("Ошибка получения данных об Escrow при отправке выйгрыша");
  335. Variables.redis.sendProcceed = false;
  336. }
  337.  
  338. if (them.escrowDays > 0 || me.escrowDays > 0) {
  339. Logger.error("Ошибка отпрвка выйгрыша у пользователя Escrow");
  340. Variables.redis.sendProcceed = false;
  341. } else {
  342. Manager.loadInventory(730, 2, true, function (err, inventory) {
  343.  
  344. if (err) {
  345. Logger.error("Ошибка получения инвентаря! при отправке выйгрыша");
  346. Variables.redis.sendProcceed = false;
  347. return;
  348. }
  349.  
  350. var pool = inventory.filter(function (item) {
  351. for (var i = items.length-1; i > 0; i--) {
  352. if (item["classid"] == items[i]) {
  353. items.splice(i, 1);
  354. return true
  355. }
  356. }
  357.  
  358. return false
  359. });
  360.  
  361. Trade.setMessage('Переотправка '+Config.nameSite + " игра:" + game + " Хеш : " + Crypto.randomBytes(30).toString('hex'));
  362. Trade.addMyItems(pool);
  363. Trade.send(function (err) {
  364. if (err) {
  365. Logger.error("Ошибка при отправке выйгрыша (" + err + ")");
  366.  
  367. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  368. Set_Prize_Status(game, 2);
  369. });
  370.  
  371. Variables.redis.sendProcceed = false;
  372.  
  373. } else {
  374. Logger.info("Оффер успешно отправлен пользователю с SteamID64: " + steamid64);
  375.  
  376. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  377. Set_Prize_Status(game, 1);
  378. Variables.redis.sendProcceed = false;
  379. });
  380. }
  381. });
  382. });
  383. }
  384. });
  385.  
  386. };
  387.  
  388.  
  389.  
  390.  
  391. /**
  392. * Парсинг трейд оффера
  393. */
  394.  
  395. var Parse_Offer = function (offer) {
  396.  
  397. var Items = [];
  398.  
  399. offer.itemsToReceive.forEach(function(item, i, arr) {
  400.  
  401. Items[i] = {
  402. appid: item.appid,
  403. name: item.market_name,
  404. market_hash_name: item.market_hash_name,
  405. classid: item.classid
  406. };
  407.  
  408. var Type = item.type;
  409. var Rarity = '';
  410. var Arr = Type.split(',');
  411.  
  412. if (Arr.length == 2) Type = Arr[1].trim();
  413. if (Arr.length == 3) Type = Arr[2].trim();
  414. if (Arr.length && arr[0] == 'Нож') Type = '★';
  415.  
  416. switch (Type) {
  417. case 'Армейское качество':
  418. Rarity = 'milspec';
  419. break;
  420. case 'Запрещенное':
  421. Rarity = 'restricted';
  422. break;
  423. case 'Засекреченное':
  424. Rarity = 'classified';
  425. break;
  426. case 'Тайное':
  427. Rarity = 'covert';
  428. break;
  429. case 'Ширпотреб':
  430. Rarity = 'common';
  431. break;
  432. case 'Промышленное качество':
  433. Rarity = 'common';
  434. break;
  435. case '★':
  436. Rarity = 'rare';
  437. break;
  438. }
  439.  
  440. Items[i].rarity = Rarity;
  441.  
  442. });
  443.  
  444. var value = {
  445. offerid: offer.id,
  446. accountid: offer.partner.steamid64,
  447. items: JSON.stringify(Items)
  448. };
  449.  
  450. RedisClient.rpush(RedisChannels.checkList, JSON.stringify(value));
  451.  
  452. };
  453.  
  454. /**
  455. * Обновление статуса приза
  456. */
  457.  
  458. var Set_Prize_Status = function (game, status) {
  459. Requestify.post('http://localhost/api/setPrizeStatus', {
  460. secretKey: Config.secretKey,
  461. game: game,
  462. status: status
  463. }).then(function (response) {
  464.  
  465. }, function (response) {
  466. Logger.error("Ошибка при обновлении трейд статуса");
  467.  
  468. setTimeout(function () {
  469. Set_Prize_Status()
  470. }, 2000);
  471. });
  472. }
  473.  
  474. /**
  475. * Проверка существования оффера в массиве
  476. */
  477.  
  478. var Check_Offer_Exists = function (offer_id) {
  479. for (var i = 0, len = Variables.checkingOffers.length; i < len; ++i) {
  480. var offer = Variables.checkingOffers[i];
  481. if (offer == offer_id) {
  482. return true;
  483. break;
  484. }
  485. }
  486. return false;
  487. };
  488.  
  489. /**
  490. * Получение Error Code оффера
  491. */
  492.  
  493. var Get_Error_Code = function (err, callback) {
  494. var errCode = 0;
  495. var match = err.match(/\(([^()]*)\)/);
  496. if (match != null && match.length == 2) errCode = match[1];
  497. callback(errCode);
  498. };
  499.  
  500. /**
  501. * Функции Steam клиента
  502. */
  503.  
  504. Client.on('loggedOn', function () {
  505. Logger.info("Успешная авторизация в Steam (SteamID64: " + Client.steamID.getSteamID64() + ")");
  506. });
  507.  
  508. Client.on('webSession', function (sessionID, cookies) {
  509. Client.setPersona(SteamUser.Steam.EPersonaState.Online);
  510.  
  511. Manager.setCookies(cookies, function (err) {
  512. if (err) {
  513. Logger.error('Ошибка установки WebSession Cookies: ' + err);
  514. process.exit(1);
  515. return
  516. }
  517. });
  518.  
  519. Offers.setup({
  520. sessionID: sessionID,
  521. webCookie: cookies,
  522. APIKey: Config.apiKey
  523. });
  524.  
  525. Community.setCookies(cookies);
  526.  
  527. Community.startConfirmationChecker(10000, Config.bot.identity_secret);
  528.  
  529. Community.on('sessionExpired', function (err) {
  530. Logger.info("Сессия устарела. Получаем новые Cookie");
  531. Client.webLogOn();
  532. });
  533.  
  534. RedisClient.lrange(RedisChannels.tradeoffersList, 0, -1, function (err, offers) {
  535. offers.forEach(function (offer) {
  536. Variables.checkingOffers.push(offer);
  537. });
  538. });
  539.  
  540. Variables.auth = true;
  541. });
  542.  
  543. Client.on('accountLimitations', function (limited, communityBanned, locked) {
  544. if (limited || communityBanned || locked) {
  545. Logger.error("Аккаунт заблокирован. Бот отключается");
  546. process.exit(1);
  547. }
  548. });
  549.  
  550. /**
  551. * Функции Steam менеджера
  552. */
  553.  
  554. Manager.on('newOffer', function (offer) {
  555. if (offer.state == 2) {
  556.  
  557. if (Check_Offer_Exists(offer.id)) return;
  558.  
  559. if (offer.itemsToGive.length != 0 && Config.admins.indexOf(offer.partner.getSteamID64()) != -1) {
  560. Logger.info("Оффер #" + offer.id + " от администратора " + offer.partner.getSteamID64());
  561. offer.accept();
  562. return;
  563. }
  564.  
  565. if(Config.bonusbot.indexOf(offer.partner.getSteamID64()) != -1){
  566. Offers.acceptOffer({tradeOfferId: offer.id}, function(error, traderesponse) {
  567. if(!error) {
  568. if ('undefined' != typeof traderesponse.tradeid) {
  569. Offers.getItems({tradeId: traderesponse.tradeid}, function (error, recieved_items) {
  570. if (!error) {
  571. var itemsForParse = [], itemstobonus = [], i = 0;
  572. recieved_items.forEach(function(item){
  573. itemsForParse[i++] = item.id;
  574. })
  575.  
  576. Offers.loadMyInventory({appId: 730, contextId: 2, language: 'russian'}, function(error, botItems){
  577. if(!error){
  578. i = 0;
  579.  
  580. botItems.forEach(function(item){
  581. if(itemsForParse.indexOf(item.id) != -1){
  582. var rarity = '', type = '';
  583. var arr = item.type.split(',');
  584. if (arr.length == 2) rarity = arr[1].trim();
  585. if (arr.length == 3) rarity = arr[2].trim();
  586. if (arr.length && arr[0] == 'Нож') rarity = 'Тайное';
  587. if (arr.length) type = arr[0];
  588. var quality = item.market_name.match(/\(([^()]*)\)/);
  589. if(quality != null && quality.length == 2) {
  590. quality = quality[1];
  591. } else {
  592. quality = " ";
  593. }
  594. itemstobonus[i++] = {
  595. inventoryId: item.id,
  596. classid: item.classid,
  597. name: item.name,
  598. market_hash_name: item.market_hash_name,
  599. rarity: rarity,
  600. quality: quality,
  601. type: type
  602. }
  603. }
  604. });
  605.  
  606. }
  607. RedisClient.rpush(RedisChannels.itemstobonus, JSON.stringify(itemstobonus));
  608. return;
  609. });
  610. }
  611. return;
  612. });
  613. }
  614. }
  615. return;
  616. });
  617. }
  618.  
  619.  
  620. if (offer.itemsToGive.length != 0) {
  621. offer.decline();
  622. return;
  623. }
  624.  
  625. offer.getUserDetails(function (err, me, them) {
  626. if (!err && them) {
  627.  
  628. if (them.escrowDays != 0) {
  629. offer.decline();
  630. return;
  631. }
  632.  
  633. } else {
  634. Logger.error("Ошибка при получении Escrow данных пользователя " + offer.partner.getSteamID64());
  635.  
  636. offer.decline();
  637. return;
  638. }
  639. });
  640.  
  641. /* if (Config.bonusbot.indexOf(offer.partner.getSteamID64()) == -1) {
  642. checkingOffers.push(offer.tradeofferid);
  643. Logger.info("Бонус офер #" + offer.id + " от SteamID64: " + offer.partner.getSteamID64());
  644. RedisClient.multi([
  645. ['rpush', RedisChannels.tradeoffersList, offer.id],
  646. ['rpush', RedisChannels.checkItemsList, JSON.stringify(offer)],
  647. ['rpush', RedisChannels.usersQueue, offer.partner.getSteamID64()]
  648. ]).exec(function(){
  649. RedisClient.lrange(RedisChannels.usersQueue, 0, -1, function(err, queues) {
  650. io.sockets.emit('queue', queues);
  651. });
  652. });
  653. return;
  654. } */
  655.  
  656. if (offer.itemsToReceive.length != 0 && offer.itemsToGive.length == 0) {
  657. Variables.checkingOffers.push(offer.id);
  658.  
  659. Logger.info("Новый оффер #" + offer.id + " от SteamID64: " + offer.partner.getSteamID64());
  660.  
  661. offer.partner.steamid64 = offer.partner.getSteamID64();
  662.  
  663. Parse_Offer(offer);
  664.  
  665. RedisClient.multi([
  666. ['rpush', RedisChannels.tradeoffersList, offer.id],
  667. ['rpush', RedisChannels.usersQueue, offer.partner.getSteamID64()]
  668. ]).exec(function () {
  669. RedisClient.lrange(RedisChannels.usersQueue, 0, -1, function (err, queues) {
  670. io.sockets.emit('queue', queues);
  671. });
  672. });
  673. return;
  674. }
  675.  
  676. }
  677. });
  678.  
  679. Manager.on('pollFailure', function (err) {
  680. Logger.error("Ошибка SteamCommunity Polling: " + err);
  681. });
  682.  
  683. /**
  684. * Работа с каналами Redis
  685. */
  686.  
  687. var Queue_Proceed = function () {
  688.  
  689. RedisClient.llen(RedisChannels.itemstobonus, function(err, length) {
  690. if (length > 0 && !Variables.redis.itemsTobonusProcced) {
  691. Logger.info("Бонус был добавлен");
  692. Variables.redis.itemsTobonusProcced = true;
  693. addNewItemsBonus();
  694. }
  695. });
  696.  
  697. RedisClient.llen(RedisChannels.checkList, function (err, length) {
  698. if (length > 0 && !Variables.redis.checkProcceed) {
  699. Logger.info("Офферов для проверки: " + length);
  700. Variables.redis.checkProcceed = true;
  701. Deposit_Check();
  702. }
  703. });
  704.  
  705. RedisClient.llen(RedisChannels.betsList, function (err, length) {
  706. if (length > 0 && !Variables.redis.betsProcceed && !Variables.delayForNewGame) {
  707. Logger.info("Офферов для добавления: " + length);
  708. Variables.redis.betsProcceed = true;
  709. Check_Bet();
  710. }
  711. });
  712.  
  713. RedisClient.llen(RedisChannels.checkedList, function (err, length) {
  714. if (length > 0 && !Variables.redis.checkedProcceed && Variables.auth) {
  715. Logger.info("Офферов для подтверждения: " + length);
  716. Variables.redis.checkedProcceed = true;
  717. RedisClient.lindex(RedisChannels.checkedList, 0, function (err, offer) {
  718. Deposit_Accept(JSON.parse(offer));
  719. });
  720. }
  721. });
  722.  
  723. RedisClient.llen(RedisChannels.declineList, function (err, length) {
  724. if (length > 0 && !Variables.redis.declineProcceed && Variables.auth) {
  725. Logger.info("Офферов для отмены: " + length);
  726. Variables.redis.declineProcceed = true;
  727. RedisClient.lindex(RedisChannels.declineList, 0, function (err, offer) {
  728. Deposit_Decline(JSON.parse(offer));
  729. });
  730. }
  731. });
  732.  
  733. RedisClient.llen(RedisChannels.sendOffersList, function (err, length) {
  734. if (length > 0 && !Variables.redis.sendProcceed && Variables.auth) {
  735. Logger.info("Офферов для отправки победителям: " + length);
  736. Variables.redis.sendProcceed = true;
  737. RedisClient.lindex(RedisChannels.sendOffersList, 0, function (err, offer) {
  738. offer = JSON.parse(offer);
  739. Send_Prize(offer.steamid, offer.accessToken, offer.items, offer.game, JSON.stringify(offer));
  740. });
  741. }
  742. });
  743.  
  744. };
  745.  
  746. module.exports.delayForNewGame = function (value) {
  747. Variables.delayForNewGame = value;
  748. };
  749.  
  750. setInterval(Queue_Proceed, 512);
  751.  
  752.  
  753. function checkBadGame(){
  754. console.log("Проверка не отправленных выигрышей");
  755.  
  756. var mysql = require('mysql');
  757.  
  758. var connection = mysql.createConnection({
  759.  
  760. host : 'localhost',
  761. user : 'root',
  762. password: Config.db.password,
  763. database: Config.db.database
  764. });
  765.  
  766. var curent_time = Math.round(new Date().getTime()/1000.0) - 3600; // сегодня - 14400000 утки - 86400000 7200000 - 2 часа
  767. connection.connect();
  768. getBadGame ='SELECT finished_at, won_items, winner_id, items, won_items, g.id as id, steamid64, accessToken FROM `games` as g JOIN users as u ON winner_id = u.id WHERE `finished_at` > (NOW() - INTERVAL 360 MINUTE) AND `status_prize` != 1 AND `status` = 3 ORDER BY id DESC LIMIT 0,1';
  769. //getBadGame ='SELECT won_items, winner_id, items, won_items, g.id as id, steamid64, accessToken FROM `games` as g JOIN users as u ON winner_id = u.id WHERE `status_prize` = 2 AND status = 3 ORDER BY id DESC LIMIT 0,1';
  770. //console.log(getBadGame);
  771.  
  772. connection.query(getBadGame, function(err, rows, fields) {
  773. //console.log(err);
  774. if(typeof rows === 'undefined'){
  775. console.log("rows === undefined");
  776. return;
  777. }
  778.  
  779. rows.forEach(function(item, i, arr) {
  780. console.log('Игра # '+item.id+' пользователю #'+ item.winner_id + ' не потрпавлено '+ item.items +" предметов. Пытаемся отправить.");
  781. sendoffer = [];
  782. offer = JSON.parse(item.won_items);
  783. offer.forEach(function(it, key, array) {
  784. sendoffer.push(it.classid);
  785. });
  786.  
  787. //Send_Prize(steamid64, token, items, game, offer)
  788. Send_Prize_Low(item.steamid64, item.accessToken, sendoffer, item.id, offer);
  789. //sendTradeOfferLow(730, item.steamid64, item.accessToken, sendoffer, '', item.id, '');
  790. //sleep(1);
  791. });
  792. });
  793. connection.end();
  794. }
  795.  
  796.  
  797. setInterval(function(){checkBadGame();}, 600000);
  798.  
  799. /**
  800. * Отлавливание неизвестной ошибки
  801. */
  802.  
  803. /*
  804. process.on('uncaughtException', function (err) {
  805. Logger.error('Ошибка которая не выводится функциями (' + err + ') !');
  806. });
  807. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement