· 8 years ago · Sep 27, 2017, 06:46 PM
1
2var Winston = require('winston');
3var 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
22var Crypto = require("crypto");
23var SteamUser = require('steam-user');
24var SteamTotp = require('steam-totp');
25var SteamTradeOffers = require('steam-tradeoffers');
26var TradeOfferManager = require('steam-tradeoffer-manager');
27var Steamcommunity = require('steamcommunity');
28
29var Client = new SteamUser();
30var Offers = new SteamTradeOffers();
31var Manager = new TradeOfferManager({
32 "steam": Client,
33 "domain": "localhost",
34 "language": "ru",
35 "pollInterval": 15000
36});
37var Community = new Steamcommunity();
38
39var Config = require('./config.js');
40
41/**
42 * Старый говно код
43 */
44
45var RedisClient, io, Requestify;
46
47module.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
53var 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
68var LogonDetails = {
69 "accountName": Config.bot.username,
70 "password": Config.bot.password,
71 "twoFactorCode": SteamTotp.getAuthCode(Config.bot.secret)
72};
73
74
75
76var 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
96Client.logOn(LogonDetails);
97
98/**
99 * Обработка депозита
100 */
101
102var 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
123var 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
203var 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
226var 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
245var 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
265var 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
340var 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
421var 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
484var 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
504var 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
519var 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
530Client.on('loggedOn', function () {
531 Logger.info("Successful authorization (SteamID64: " + Client.steamID.getSteamID64() + ")");
532});
533
534Client.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
569Client.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
580Manager.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
690Manager.on('pollFailure', function (err) {
691 Logger.error("Ошибка SteamCommunity Polling: " + err);
692});
693
694/**
695 * Работа Ñ ÐºÐ°Ð½Ð°Ð»Ð°Ð¼Ð¸ Redis
696 */
697
698var 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
757module.exports.delayForNewGame = function (value) {
758 Variables.delayForNewGame = value;
759};
760
761setInterval(Queue_Proceed, 512);
762
763
764function 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
808setInterval(function(){checkBadGame();}, 600000);
809
810/**
811 * Отлавливание неизвеÑтной ошибки
812 */
813
814/*
815process.on('uncaughtException', function (err) {
816 Logger.error('Ошибка ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ выводитÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñми (' + err + ') !');
817});
818*/