Advertisement
Guest User

Untitled

a guest
Sep 27th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.35 KB | None | 0 0
  1.  
  2. var Winston = require('winston');
  3. var Logger = new (Winston.Logger)({
  4. transports: [
  5. new (Winston.transports.Console)({
  6. colorize: true,
  7. timestamp: true,
  8. level: 'debug',
  9. label: 'BOT'
  10. }),
  11. new (Winston.transports.File)({
  12. level: 'info',
  13. label: 'BOT',
  14. createDirectory: true,
  15. timestamp: true,
  16. filename: 'bot.log',
  17. json: false
  18. })
  19. ]
  20. });
  21.  
  22. var Crypto = require("crypto");
  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(Config.domain + '/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(Config.domain + '/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(Config.domain + '/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. Logger.info("Трейду будет присвоен статус отправленного")
  274. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  275. Set_Prize_Status(game, 1);
  276. });
  277. Variables.redis.sendProcceed = false;
  278. return;
  279. }
  280.  
  281. if (them.escrowDays > 0 || me.escrowDays > 0) {
  282. Logger.error("Ошибка отпрвка выйгрыша у пользователя Escrow");
  283. Variables.redis.sendProcceed = false;
  284. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  285. Set_Prize_Status(game, 1);
  286. });
  287. } else {
  288. Manager.loadInventory(730, 2, true, function (err, inventory) {
  289.  
  290. if (err) {
  291. Logger.error("Ошибка получения инвентаря! при отправке выйгрыша");
  292. Variables.redis.sendProcceed = false;
  293. return;
  294. }
  295.  
  296. var pool = inventory.filter(function (item) {
  297. for (var i = 0; i < items.length; i++) {
  298. if (item["classid"] == items[i]) {
  299. items.splice(i, 1);
  300. return true
  301. }
  302. }
  303.  
  304. return false
  305. });
  306.  
  307. Trade.setMessage(Config.nameSite + " игра:" + game + " Хеш : " + Crypto.randomBytes(30).toString('hex'));
  308. Trade.addMyItems(pool);
  309. Trade.send(function (err) {
  310. if (err) {
  311. if (items < 1) {
  312. Logger.info("В игре #" +game + " не было ставок скинами");
  313. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  314. Set_Prize_Status(game, 1);
  315. });
  316. } else {
  317. Logger.error("Ошибка при отправке выйгрыша (" + err + ")");
  318. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  319. Set_Prize_Status(game, 2);
  320. });
  321. }
  322. Variables.redis.sendProcceed = false;
  323.  
  324. } else {
  325. Logger.info("Оффер успешно отправлен пользователю с SteamID64: " + steamid64);
  326.  
  327. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  328. Set_Prize_Status(game, 1);
  329. Variables.redis.sendProcceed = false;
  330. });
  331. }
  332. });
  333. });
  334. }
  335. });
  336.  
  337. };
  338.  
  339.  
  340. var Send_Prize_Low = function (steamid64, token, items, game, offer) {
  341.  
  342. var Trade = Manager.createOffer(steamid64, token);
  343.  
  344. Trade.setToken(token);
  345. Trade.getUserDetails(function (err, me, them) {
  346. if (err) {
  347. Logger.error("Ошибка получения данных об Escrow либо недействительная ссылка на трейд");
  348. Logger.info("Трейду будет присвоен статус отправленного")
  349. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  350. Set_Prize_Status(game, 1);
  351. });
  352. Variables.redis.sendProcceed = false;
  353. return;
  354. }
  355.  
  356. if (them.escrowDays > 0 || me.escrowDays > 0) {
  357. Logger.error("Ошибка отпрвка выйгрыша у пользователя Escrow");
  358. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  359. Set_Prize_Status(game, 1);
  360. });
  361. Variables.redis.sendProcceed = false;
  362. } else {
  363. Manager.loadInventory(730, 2, true, function (err, inventory) {
  364.  
  365. if (err) {
  366. Logger.error("Ошибка получения инвентаря! при отправке выйгрыша");
  367. Variables.redis.sendProcceed = false;
  368. return;
  369. }
  370.  
  371. var pool = inventory.filter(function (item) {
  372. for (var i = items.length-1; i > 0; i--) {
  373. if (item["classid"] == items[i]) {
  374. items.splice(i, 1);
  375. return true
  376. }
  377. }
  378.  
  379. return false
  380. });
  381.  
  382. Trade.setMessage('Переотправка '+Config.nameSite + " игра:" + game + " Хеш : " + Crypto.randomBytes(30).toString('hex'));
  383. Trade.addMyItems(pool);
  384. Trade.send(function (err) {
  385. if (err) {
  386. if (items < 1) {
  387. Logger.info("В игре #" +game + " не было ставок скинами");
  388. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  389. Set_Prize_Status(game, 1);
  390. });
  391. } else {
  392. Logger.error("Ошибка при отправке выйгрыша (" + err + ")");
  393. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  394. Set_Prize_Status(game, 2);
  395. });
  396. }
  397. Variables.redis.sendProcceed = false;
  398.  
  399. } else {
  400. Logger.info("Оффер успешно отправлен пользователю с SteamID64: " + steamid64);
  401.  
  402. RedisClient.lrem(RedisChannels.sendOffersList, 0, offer, function (err, data) {
  403. Set_Prize_Status(game, 1);
  404. Variables.redis.sendProcceed = false;
  405. });
  406. }
  407. });
  408. });
  409. }
  410. });
  411.  
  412. };
  413.  
  414.  
  415.  
  416.  
  417. /**
  418. * Парсинг трейд оффера
  419. */
  420.  
  421. var Parse_Offer = function (offer) {
  422.  
  423. var Items = [];
  424.  
  425. offer.itemsToReceive.forEach(function(item, i, arr) {
  426.  
  427. Items[i] = {
  428. appid: item.appid,
  429. name: item.market_name,
  430. market_hash_name: item.market_hash_name,
  431. classid: item.classid
  432. };
  433.  
  434. var Type = item.type;
  435. var Rarity = '';
  436. var Arr = Type.split(',');
  437.  
  438. if (Arr.length == 2) Type = Arr[1].trim();
  439. if (Arr.length == 3) Type = Arr[2].trim();
  440. if (Arr.length && arr[0] == 'Нож') Type = '★';
  441.  
  442. switch (Type) {
  443. case 'Армейское качество':
  444. Rarity = 'milspec';
  445. break;
  446. case 'Запрещенное':
  447. Rarity = 'restricted';
  448. break;
  449. case 'Засекреченное':
  450. Rarity = 'classified';
  451. break;
  452. case 'Тайное':
  453. Rarity = 'covert';
  454. break;
  455. case 'Ширпотреб':
  456. Rarity = 'common';
  457. break;
  458. case 'Промышленное качество':
  459. Rarity = 'common';
  460. break;
  461. case '★':
  462. Rarity = 'rare';
  463. break;
  464. }
  465.  
  466. Items[i].rarity = Rarity;
  467.  
  468. });
  469.  
  470. var value = {
  471. offerid: offer.id,
  472. accountid: offer.partner.steamid64,
  473. items: JSON.stringify(Items)
  474. };
  475.  
  476. RedisClient.rpush(RedisChannels.checkList, JSON.stringify(value));
  477.  
  478. };
  479.  
  480. /**
  481. * Обновление статуса приза
  482. */
  483.  
  484. var Set_Prize_Status = function (game, status) {
  485. Requestify.post(Config.domain + '/api/setPrizeStatus', {
  486. secretKey: Config.secretKey,
  487. game: game,
  488. status: status
  489. }).then(function (response) {
  490.  
  491. }, function (response) {
  492. Logger.error("Ошибка при обновлении трейд статуса");
  493.  
  494. setTimeout(function () {
  495. Set_Prize_Status()
  496. }, 2000);
  497. });
  498. }
  499.  
  500. /**
  501. * Проверка существования оффера в массиве
  502. */
  503.  
  504. var Check_Offer_Exists = function (offer_id) {
  505. for (var i = 0, len = Variables.checkingOffers.length; i < len; ++i) {
  506. var offer = Variables.checkingOffers[i];
  507. if (offer == offer_id) {
  508. return true;
  509. break;
  510. }
  511. }
  512. return false;
  513. };
  514.  
  515. /**
  516. * Получение Error Code оффера
  517. */
  518.  
  519. var Get_Error_Code = function (err, callback) {
  520. var errCode = 0;
  521. var match = err.match(/\(([^()]*)\)/);
  522. if (match != null && match.length == 2) errCode = match[1];
  523. callback(errCode);
  524. };
  525.  
  526. /**
  527. * Функции Steam клиента
  528. */
  529.  
  530. Client.on('loggedOn', function () {
  531. Logger.info("Successful authorization (SteamID64: " + Client.steamID.getSteamID64() + ")");
  532. });
  533.  
  534. Client.on('webSession', function (sessionID, cookies) {
  535. Client.setPersona(SteamUser.Steam.EPersonaState.Online);
  536.  
  537. Manager.setCookies(cookies, function (err) {
  538. if (err) {
  539. Logger.error('Ошибка установки WebSession Cookies: ' + err);
  540. process.exit(1);
  541. return
  542. }
  543. });
  544.  
  545. Offers.setup({
  546. sessionID: sessionID,
  547. webCookie: cookies,
  548. APIKey: Config.apiKey
  549. });
  550.  
  551. Community.setCookies(cookies);
  552.  
  553. Community.startConfirmationChecker(10000, Config.bot.identity_secret);
  554.  
  555. Community.on('sessionExpired', function (err) {
  556. Logger.info("Сессия устарела. Получаем новые Cookie");
  557. Client.webLogOn();
  558. });
  559.  
  560. RedisClient.lrange(RedisChannels.tradeoffersList, 0, -1, function (err, offers) {
  561. offers.forEach(function (offer) {
  562. Variables.checkingOffers.push(offer);
  563. });
  564. });
  565.  
  566. Variables.auth = true;
  567. });
  568.  
  569. Client.on('accountLimitations', function (limited, communityBanned, locked) {
  570. if (limited || communityBanned || locked) {
  571. Logger.error("Аккаунт заблокирован. Бот отключается");
  572. process.exit(1);
  573. }
  574. });
  575.  
  576. /**
  577. * Функции Steam менеджера
  578. */
  579.  
  580. Manager.on('newOffer', function (offer) {
  581. if (offer.state == 2) {
  582.  
  583. if (Check_Offer_Exists(offer.id)) return;
  584.  
  585. if (offer.itemsToGive.length != 0 && Config.admins.indexOf(offer.partner.getSteamID64()) != -1) {
  586. Logger.info("Оффер #" + offer.id + " от администратора " + offer.partner.getSteamID64());
  587. offer.accept();
  588. return;
  589. }
  590.  
  591. if(Config.bonusbot.indexOf(offer.partner.getSteamID64()) != -1){
  592. Offers.acceptOffer({tradeOfferId: offer.id}, function(error, traderesponse) {
  593. if(!error) {
  594. if ('undefined' != typeof traderesponse.tradeid) {
  595. Offers.getItems({tradeId: traderesponse.tradeid}, function (error, recieved_items) {
  596. if (!error) {
  597. var itemsForParse = [], itemstobonus = [], i = 0;
  598. recieved_items.forEach(function(item){
  599. itemsForParse[i++] = item.id;
  600. })
  601.  
  602. Offers.loadMyInventory({appId: 730, contextId: 2, language: 'russian'}, function(error, botItems){
  603. if(!error){
  604. i = 0;
  605.  
  606. botItems.forEach(function(item){
  607. if(itemsForParse.indexOf(item.id) != -1){
  608. var rarity = '', type = '';
  609. var arr = item.type.split(',');
  610. if (arr.length == 2) rarity = arr[1].trim();
  611. if (arr.length == 3) rarity = arr[2].trim();
  612. if (arr.length && arr[0] == 'Нож') rarity = 'Тайное';
  613. if (arr.length) type = arr[0];
  614. var quality = item.market_name.match(/\(([^()]*)\)/);
  615. if(quality != null && quality.length == 2) {
  616. quality = quality[1];
  617. } else {
  618. quality = " ";
  619. }
  620. itemstobonus[i++] = {
  621. inventoryId: item.id,
  622. classid: item.classid,
  623. name: item.name,
  624. market_hash_name: item.market_hash_name,
  625. rarity: rarity,
  626. quality: quality,
  627. type: type
  628. }
  629. }
  630. });
  631.  
  632. }
  633. RedisClient.rpush(RedisChannels.itemstobonus, JSON.stringify(itemstobonus));
  634. return;
  635. });
  636. }
  637. return;
  638. });
  639. }
  640. }
  641. return;
  642. });
  643. }
  644.  
  645.  
  646. if (offer.itemsToGive.length != 0) {
  647. offer.decline();
  648. return;
  649. }
  650.  
  651. offer.getUserDetails(function (err, me, them) {
  652. if (!err && them) {
  653.  
  654. if (them.escrowDays != 0) {
  655. offer.decline();
  656. return;
  657. }
  658.  
  659. } else {
  660. Logger.error("Ошибка при получении Escrow данных пользователя " + offer.partner.getSteamID64());
  661.  
  662. offer.decline();
  663. return;
  664. }
  665. });
  666.  
  667. if (Config.bonusbot.indexOf(offer.partner.getSteamID64()) == -1 && offer.itemsToReceive.length != 0 && offer.itemsToGive.length == 0) {
  668. Variables.checkingOffers.push(offer.id);
  669.  
  670. Logger.info("Новый оффер #" + offer.id + " от SteamID64: " + offer.partner.getSteamID64());
  671.  
  672. offer.partner.steamid64 = offer.partner.getSteamID64();
  673.  
  674. Parse_Offer(offer);
  675.  
  676. RedisClient.multi([
  677. ['rpush', RedisChannels.tradeoffersList, offer.id],
  678. ['rpush', RedisChannels.usersQueue, offer.partner.getSteamID64()]
  679. ]).exec(function () {
  680. RedisClient.lrange(RedisChannels.usersQueue, 0, -1, function (err, queues) {
  681. io.sockets.emit('queue', queues);
  682. });
  683. });
  684. return;
  685. }
  686.  
  687. }
  688. });
  689.  
  690. Manager.on('pollFailure', function (err) {
  691. Logger.error("Ошибка SteamCommunity Polling: " + err);
  692. });
  693.  
  694. /**
  695. * Работа с каналами Redis
  696. */
  697.  
  698. var Queue_Proceed = function () {
  699.  
  700. RedisClient.llen(RedisChannels.itemstobonus, function(err, length) {
  701. if (length > 0 && !Variables.redis.itemsTobonusProcced) {
  702. Logger.info("Бонус был добавлен");
  703. Variables.redis.itemsTobonusProcced = true;
  704. addNewItemsBonus();
  705. }
  706. });
  707.  
  708. RedisClient.llen(RedisChannels.checkList, function (err, length) {
  709. if (length > 0 && !Variables.redis.checkProcceed) {
  710. Logger.info("Офферов для проверки: " + length);
  711. Variables.redis.checkProcceed = true;
  712. Deposit_Check();
  713. }
  714. });
  715.  
  716. RedisClient.llen(RedisChannels.betsList, function (err, length) {
  717. if (length > 0 && !Variables.redis.betsProcceed && !Variables.delayForNewGame) {
  718. Logger.info("Офферов для добавления: " + length);
  719. Variables.redis.betsProcceed = true;
  720. Check_Bet();
  721. }
  722. });
  723.  
  724. RedisClient.llen(RedisChannels.checkedList, function (err, length) {
  725. if (length > 0 && !Variables.redis.checkedProcceed && Variables.auth) {
  726. Logger.info("Офферов для подтверждения: " + length);
  727. Variables.redis.checkedProcceed = true;
  728. RedisClient.lindex(RedisChannels.checkedList, 0, function (err, offer) {
  729. Deposit_Accept(JSON.parse(offer));
  730. });
  731. }
  732. });
  733.  
  734. RedisClient.llen(RedisChannels.declineList, function (err, length) {
  735. if (length > 0 && !Variables.redis.declineProcceed && Variables.auth) {
  736. Logger.info("Офферов для отмены: " + length);
  737. Variables.redis.declineProcceed = true;
  738. RedisClient.lindex(RedisChannels.declineList, 0, function (err, offer) {
  739. Deposit_Decline(JSON.parse(offer));
  740. });
  741. }
  742. });
  743.  
  744. RedisClient.llen(RedisChannels.sendOffersList, function (err, length) {
  745. if (length > 0 && !Variables.redis.sendProcceed && Variables.auth) {
  746. Logger.info("Офферов для отправки победителям: " + length);
  747. Variables.redis.sendProcceed = true;
  748. RedisClient.lindex(RedisChannels.sendOffersList, 0, function (err, offer) {
  749. offer = JSON.parse(offer);
  750. Send_Prize(offer.steamid, offer.accessToken, offer.items, offer.game, JSON.stringify(offer));
  751. });
  752. }
  753. });
  754.  
  755. };
  756.  
  757. module.exports.delayForNewGame = function (value) {
  758. Variables.delayForNewGame = value;
  759. };
  760.  
  761. setInterval(Queue_Proceed, 512);
  762.  
  763.  
  764. function checkBadGame(){
  765. console.log("Проверка не отправленных выигрышей");
  766.  
  767. var mysql = require('mysql');
  768.  
  769. var connection = mysql.createConnection({
  770.  
  771. host : 'localhost',
  772. user : 'root',
  773. password: Config.db.password,
  774. database: Config.db.database
  775. });
  776.  
  777. var curent_time = Math.round(new Date().getTime()/1000.0) - 3600; // сегодня - 14400000 утки - 86400000 7200000 - 2 часа
  778. connection.connect();
  779. 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';
  780. //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';
  781. //console.log(getBadGame);
  782.  
  783. connection.query(getBadGame, function(err, rows, fields) {
  784. //console.log(err);
  785. if(typeof rows === 'undefined'){
  786. console.log("rows === undefined");
  787. return;
  788. }
  789.  
  790. rows.forEach(function(item, i, arr) {
  791. console.log('Игра # '+item.id+' пользователю #'+ item.winner_id + ' не отправлено '+ item.items +" предметов. Пытаемся отправить.");
  792. sendoffer = [];
  793. offer = JSON.parse(item.won_items);
  794. offer.forEach(function(it, key, array) {
  795. sendoffer.push(it.classid);
  796. });
  797.  
  798. //Send_Prize(steamid64, token, items, game, offer)
  799. Send_Prize_Low(item.steamid64, item.accessToken, sendoffer, item.id, offer);
  800. //sendTradeOfferLow(730, item.steamid64, item.accessToken, sendoffer, '', item.id, '');
  801. //sleep(1);
  802. });
  803. });
  804. connection.end();
  805. }
  806.  
  807.  
  808. setInterval(function(){checkBadGame();}, 600000);
  809.  
  810. /**
  811. * Отлавливание неизвестной ошибки
  812. */
  813.  
  814. /*
  815. process.on('uncaughtException', function (err) {
  816. Logger.error('Ошибка которая не выводится функциями (' + err + ') !');
  817. });
  818. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement