· 10 years ago · Jul 01, 2016, 11:48 AM
1var settings = require('./settings.js');
2var util = require('util');
3var crypto = require('crypto');
4var fs = require('fs');
5//MySQL connection
6var mysqlInfo;
7mysqlInfo = {
8 host : settings.DBhost,
9 user : settings.DBuser,
10 password : settings.DBpassword,
11 database : settings.DBdatabase,
12 charset : settings.DBcharset
13};
14var mysql = require('mysql');
15var mysqlConnection = mysql.createConnection(mysqlInfo);
16setInterval(function () {
17 mysqlConnection.query('SELECT 1');
18}, 5000);
19////
20Array.prototype.exterminate = function (value) {
21 this.splice(this.indexOf(value), 2);
22}
23var log_stdout = process.stdout;
24console.log = function(d) { //
25 fs.open(__dirname + '/debug.log', 'a', 666, function( e, id ) {
26 fs.write( id, new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '') + ' - ' + util.format(d) + '\r\n', null, 'utf8', function(){
27 fs.close(id, function(){
28 });
29 });
30 });
31 log_stdout.write(new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '') + ' - ' + util.format(d) + '\n');
32};
33
34//Steam conection and reconnection
35var getSteamAPIKey = require('steam-web-api-key');
36var SteamTradeOffers = require('steam-tradeoffers');
37var offers = new SteamTradeOffers();
38var SteamCommunity = require('steamcommunity');
39var community = new SteamCommunity();
40var SteamTotp = require('steam-totp');
41var Steam = require('steam');
42var TradeOfferManager = require('steam-tradeoffer-manager/lib/index.js');
43var steamClient = new Steam.SteamClient();
44var steamUser = new Steam.SteamUser(steamClient);
45var steamFriends = new Steam.SteamFriends(steamClient);
46var SteamWebLogOn = require('steam-weblogon');
47var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
48var mySteamID, itemsAmount;
49var relogretry = 0, reloggin = 0;;
50var processingId = [];
51var processingIdOld = [];
52steamClient.connect();
53steamClient.on('connected', function(){
54 console.log('conected!');
55 steamUser.logOn({
56 account_name: settings.user,
57 password: settings.password,
58 two_factor_code: SteamTotp.generateAuthCode(settings.sharedSecret)
59 });
60})
61
62steamClient.on('error', function(error){
63 console.log('Error!' + error);
64 steamClient.connect();
65})
66
67steamClient.on('loggedOff', function(error){
68 console.log('disconnected!' + error);
69 steamClient.connect();
70})
71var manager = new TradeOfferManager({
72 "steam": steamUser, // Polling every 30 seconds is fine since we get notifications from Steam
73 "domain": "***", // Our domain is example.com
74 "language": "en", // We want English item descriptions
75 "cancelTime": 180000,
76 "pollInterval": 5000,
77 "pendingCancelTime": 180000,
78 "cancelOfferCount": 1,
79 "cancelOfferCountMinAge": 180000,
80});
81function relog(){
82 if(!steamClient.loggedOn)
83 {
84 setTimeout(function(){relog()}, 5000);
85 return;
86 }
87 steamWebLogOn.webLogOn(function(sessionID, newCookie) {
88 community.setCookies(newCookie);
89 manager.setCookies(newCookie, function(err) {
90 if(err) {
91 console.log(err);
92 setTimeout(function(){relog()},5000);
93 return;
94 }
95 });
96 });
97}
98steamClient.on('logOnResponse', function(logOnResponse){
99 if (logOnResponse.eresult == Steam.EResult.OK) {
100 mySteamID = logOnResponse.client_supplied_steamid;
101 console.log('Logged to steam!');
102 steamWebLogOn.webLogOn(function(sessionID, newCookie) {
103 community.setCookies(newCookie);
104 community.startConfirmationChecker(10000, settings.identitySecret);
105 manager.setCookies(newCookie, function(err) {
106 if(err) {
107 console.log(err);
108 process.exit(1); // Fatal error since we couldn't get our API key
109 return;
110 }
111 console.log("Got API key: " + manager.apiKey);
112 });
113 console.log('Bot is now ready to work!');
114 setTimeout(function(){
115 onStart();
116 }, 5000)
117 });
118 setTimeout(function(){
119 community.startConfirmationChecker(5000, settings.identitySecret);
120 steamFriends.setPersonaState(Steam.EPersonaState.Online);
121 },5000)
122 }
123 else
124 {
125 console.log('Couldn`t log to steam. Eresult: '+logOnResponse.eresult);
126 }
127})
128steamUser.on('error', function(error){
129 console.log('Error on steam' + error);
130 steamUser.logOn({
131 account_name: settings.user,
132 password: settings.password,
133 two_factor_code: SteamTotp.generateAuthCode(settings.sharedSecret)
134 });
135})
136
137steamUser.on('loggedOff', function(error){
138 console.log('Logged out from steam' + error);
139 steamUser.logOn({
140 account_name: settings.user,
141 password: settings.password,
142 two_factor_code: SteamTotp.generateAuthCode(settings.sharedSecret)
143 });
144})
145steamFriends.on('message', function(source, message, type, chatter) {
146 if(type != Steam.EChatEntryType.ChatMsg) return;
147 console.log(message);
148});
149//Checking if table exists in database, if not - create it
150function onStart(){
151 mysqlConnection.query("CREATE TABLE IF NOT EXISTS `bot"+settings.botID+"` ( `item_name` text NOT NULL, `assetId` text NOT NULL, `icon_url` text NOT NULL, `status` int(11) NOT NULL DEFAULT '0') ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Table with bot items' AUTO_INCREMENT=2;", function(er){
152 if(er){
153 console.log('Error when creating bot inventory table: '+er);
154 return;
155 }
156 /*mysqlConnection.query("TRUNCATE TABLE `bot"+settings.botID+"`", function(err){
157 if(err){
158 console.log(err)
159 return;
160 }
161 manager.loadInventory(730, 2, true, function(err, items, currencies){
162 if(err) {
163 console.log('Couldn`t load items from bot inventory '+err);
164 }
165 var botItems=[],num=0;
166 if(items)
167 {
168 itemsAmount = items.length;
169 for (var i = 0; i < items.length; i++) {
170 if (items[i].tradable) {
171 botItems[num] = [items[i].market_hash_name, items[i].id, items[i].icon_url, 1]
172 num++;
173 }
174 }
175 if(items.length> 0){
176 mysqlConnection.query("INSERT INTO `bot"+settings.botID+"` (item_name, assetID, icon_url, status) VALUES ?", [botItems], function(err2){
177 if(err2){
178 console.log(err2);
179 return;
180 }
181
182 })
183 }
184 }
185
186 });
187 }); */
188setTimeout(function(){
189 onStart2();
190 }, 5000)
191 });
192}
193function onStart2(){
194 mysqlConnection.query('SELECT * FROM `bots` WHERE `steamid`='+mySteamID+'', function(err,row){
195 if(err)
196 {
197 console.log(err)
198 return;
199 }
200 if(row.length<1)
201 {
202 var botInfo = {id: settings.botID, steamid: mySteamID, items: itemsAmount};
203 mysqlConnection.query("INSERT INTO `bots` SET ?", botInfo, function(err2){
204 if(err2){
205 console.log(err2);
206 mysqlConnection.query("UPDATE `bots` SET ? WHERE `id`="+settings.botID+"", botInfo, function(err3){
207 console.log(err3);
208 });
209 }
210
211 })
212 }
213 checkoffers();
214 checkoldoffers();
215 });
216}
217//Offers handling
218function checkoffers(){
219 mysqlConnection.query('SELECT * FROM `bots` WHERE `id`='+settings.botID+'', function(e,r){
220 if(e)
221 {
222 console.log('Error'+e)
223 setTimeout(function(){checkoffers()}, 2500);
224 return;
225 }
226 if(r[0].status==0 || !steamClient.loggedOn)
227 {
228 setTimeout(function(){checkoffers()}, 2500);
229 return;
230 }
231 var unixtime = Math.round(new Date().getTime()/1000.0);
232 mysqlConnection.query('SELECT * FROM `depositoffers` WHERE `status`=1 AND `bot`='+settings.botID+' LIMIT 1', function(err,row){
233 if(err)
234 {
235 console.log('Error'+err)
236 setTimeout(function(){checkoffers()}, 2500);
237 return;
238 }
239
240 if(row.length>0)
241 {
242 if(processingId.indexOf(row[0].id)<0)
243 {
244 processingId.push(row[0].id)
245 mysqlConnection.query('UPDATE `depositoffers` SET `status`=2, `date`='+unixtime+' WHERE `id`='+row[0].id+'', function(err3){
246 if(err3)
247 {
248 console.log('Error'+err3)
249 setTimeout(function(){checkoffers()}, 2500);
250 return;
251 }
252 var items = (row[0].items).split(';');
253 var steamid = row[0].steamid;
254 var id = row[0].id;
255 var coins = row[0].coins;
256 handleDepositOffers(id, items, steamid, 5, coins);
257 setTimeout(function(){checkoffers()}, 2500);
258 return;
259 });
260 }
261 else
262 {
263 setTimeout(function(){checkoffers()}, 2500);
264 return;
265 }
266 }
267 else
268 {
269 mysqlConnection.query('SELECT * FROM `withdrawoffers` WHERE `status`=1 AND `bot`='+settings.botID+' LIMIT 1', function(err2,row2){
270 if(err2)
271 {
272 console.log('Error'+err2)
273 setTimeout(function(){checkoffers()}, 2500);
274 return;
275 }
276 if(row2.length>0)
277 {
278 if(processingId.indexOf(row2[0].id)<0)
279 {
280 processingId.push(row2[0].id)
281 mysqlConnection.query('UPDATE `withdrawoffers` SET `status`=2, `date`='+unixtime+' WHERE `id`='+row2[0].id+'', function(err4){
282 if(err4)
283 {
284 console.log('Error'+err4)
285 setTimeout(function(){checkoffers()}, 2500);
286 return;
287 }
288 var items = (row2[0].items).split(';');
289 var steamid = row2[0].steamid;
290 var id = row2[0].id;
291 var coins = row2[0].coins;
292 handleWithdrawOffers(id, items, steamid, 5, coins);
293 setTimeout(function(){checkoffers()}, 2500);
294 return;
295 });
296 }
297 }
298 else
299 {
300 setTimeout(function(){checkoffers()}, 2500);
301 return;
302 }
303 });
304 }
305 });
306 });
307}
308
309
310
311
312//Deposit offers handling
313function handleDepositOffers(id, items, steamid, retries, coins)
314{
315 if(!steamClient.loggedOn)
316 {
317 setTimeout(function(){handleDepositOffers(id, items, steamid, retries, coins)}, 5000);
318 return;
319 }
320 var item = [];
321 for(var i = 0; i < items.length - 1; i++)
322 {
323 item[i] = {
324 appid: 730,
325 contextid: 2,
326 amount: 1,
327 assetid: items[i]
328 }
329 }
330 mysqlConnection.query('SELECT `tlink` FROM `users` WHERE `steamid`='+steamid+'', function(er,row){
331 if(er)
332 {
333 console.log('Error on selecting tlink from db '+er);
334 processingId.exterminate(id);
335 return;
336 }
337 if(row.length<1)
338 {
339 processingId.exterminate(id);
340 return;
341 }
342 var token = row[0].tlink;
343 token = token.substr(token.indexOf('&token')+7);
344 var code = crypto.createHash('sha256').update(Math.random().toString()).digest('hex');
345 code = code.substr(1,5);
346 manager.getEscrowDuration(steamid, token, function(err, my, their){
347 if(err || their == undefined){
348 setTimeout(function(){
349 retries --;
350 if(retries > 0)
351 {
352 handleDepositOffers(id, items, steamid, retries, coins);
353 }
354 else
355 {
356 processingId.exterminate(id);
357 }
358
359 },15000);
360 return;
361 }
362 if(their > 0)
363 {
364 mysqlConnection.query('UPDATE `depositoffers` SET `msg`="Mobile auth is not enabled", `status`=4 WHERE `id`='+id+'', function(err){
365 if(err)
366 {
367 console.log('Error on updating offer msg in database '+err);
368 }
369 });
370 processingId.exterminate(id);
371 return;
372 }
373 var newoffer = manager.createOffer(steamid);
374 newoffer.addTheirItems(item);
375 newoffer.send('Security code: '+code, token, function(err, status){
376 if(err)
377 {
378 console.log('Send offer error: '+err);
379 setTimeout(function(){
380 retries --;
381 if(retries > 0){
382 handleDepositOffers(id, items, steamid, retries, coins);
383 }
384 else
385 {
386 processingId.exterminate(id);
387 mysqlConnection.query('UPDATE `depositoffers` SET `msg`="Error on sending the offer", `status`=4 WHERE `id`='+id+'', function(err){
388 if(err)
389 {
390 console.log('Error on updating offer msg in database '+err);
391 }
392 });
393 }
394 },15000)
395 }
396 else
397 {
398 mysqlConnection.query('UPDATE `depositoffers` SET `msg`="Security code: '+code+'", `offerId`="'+newoffer.id+'" WHERE `id`='+id+'', function(err){
399 if(err)
400 {
401 console.log('Error on updating security code for trade in database '+err);
402 }
403 });
404 }
405
406 })
407 })
408 })
409}
410//Withdraw offers handling
411function handleWithdrawOffers(id, items, steamid, retries, coins)
412{
413 if(!steamClient.loggedOn)
414 {
415 setTimeout(function(){handleWithdrawOffers(id, items, steamid, retries, coins)}, 5000);
416 return;
417 }
418 console.log("Sending items to: "+steamid+". Trade id in db: "+id+". Items: "+items);
419 var item = [];
420 for(var i = 0; i < items.length - 1; i++)
421 {
422 item[i] = {
423 appid: 730,
424 contextid: 2,
425 amount: 1,
426 assetid: items[i]
427 }
428 }
429 mysqlConnection.query('SELECT `tlink` FROM `users` WHERE `steamid`='+steamid+'', function(er,row){
430 if(er)
431 {
432 processingId.exterminate(id);
433 console.log('Error on selecting tlink from db '+er);
434 return;
435 }
436 if(row.length<1)
437 {
438 processingId.exterminate(id);
439 return;
440 }
441 var token = row[0].tlink;
442 token = token.substr(token.indexOf('&token')+7);
443 var code = crypto.createHash('sha256').update(Math.random().toString()).digest('hex');
444 code = code.substr(1,5);
445 manager.getEscrowDuration(steamid, token, function(err, my, their){
446 if(err || their == undefined){
447 setTimeout(function(){
448 retries --;
449 if(retries > 0)
450 {
451 handleWithdrawOffers(id, items, steamid, retries, coins);
452 }
453 else
454 {
455 returnCoins(coins, steamid);
456 processingId.exterminate(id);
457 }
458
459 },15000);
460 return;
461 }
462 if(their > 0)
463 {
464 mysqlConnection.query('UPDATE `withdrawoffers` SET `msg`="Mobile auth is not enabled", `status`=4 WHERE `id`='+id+'', function(err){
465 if(err)
466 {
467 console.log('Error on updating offer msg in database '+err);
468 }
469 });
470 returnCoins(coins, steamid);
471 processingId.exterminate(id);
472 return;
473 }
474 var newoffer = manager.createOffer(steamid);
475 newoffer.addMyItems(item);
476 newoffer.send('Security code: '+code, token, function(err, status){
477 if(err)
478 {
479 setTimeout(function(){
480 retries --;
481 if(retries > 0){
482 handleWithdrawOffers(id, items, steamid, retries, coins);
483 }
484 else
485 {
486 returnCoins(coins, steamid);
487 processingId.exterminate(id);
488 console.log('Send offer error: '+err);
489 mysqlConnection.query('UPDATE `withdrawoffers` SET `msg`="Error on sending the offer", `status`=4 WHERE `id`='+id+'', function(err){
490 if(err)
491 {
492 console.log('Error on updating offer msg in database '+err);
493 }
494 });
495 }
496 },15000)
497 }
498 else
499 {
500 mysqlConnection.query('UPDATE `withdrawoffers` SET `msg`="Security code: '+code+'", `offerId`="'+newoffer.id+'" WHERE `id`='+id+'', function(err){
501 if(err)
502 {
503 console.log('Error on updating security code for trade in database '+err);
504 }
505 });
506 }
507
508 })
509 })
510 })
511}
512//Tracking the offers
513manager.on('sentOfferChanged', function(offer, oldState) {
514 if(offer.state == TradeOfferManager.ETradeOfferState.Canceled || offer.state == TradeOfferManager.ETradeOfferState.Accepted || offer.state == TradeOfferManager.ETradeOfferState.Invalid || offer.state == TradeOfferManager.ETradeOfferState.Expired || offer.state == TradeOfferManager.ETradeOfferState.Declined || offer.state == TradeOfferManager.ETradeOfferState.InvalidItems || offer.state == TradeOfferManager.ETradeOfferState.CanceledBySecondFactor || offer.state == TradeOfferManager.ETradeOfferState.Countered)
515 {
516 mysqlConnection.query('SELECT * FROM `depositoffers` WHERE `offerId`='+offer.id+' AND `status`=2', function(err,row){
517 if(err)
518 {
519 console.log('Error'+err)
520 return;
521 }
522 mysqlConnection.query('SELECT * FROM `withdrawoffers` WHERE `offerId`='+offer.id+' AND `status`=2', function(err2,row2){
523 if(err2)
524 {
525 console.log('Error'+err2)
526 return;
527 }
528 if(row.length>0){
529 processingId.exterminate(row[0].id);
530 //deposit offer
531 mysqlConnection.query('UPDATE `depositoffers` SET `msg`="'+TradeOfferManager.getStateName(offer.state)+'", `status`=3 WHERE `offerId`='+offer.id+'', function(err){
532 if(err)
533 {
534 console.log('Error on updating offer msg in database '+err);
535 }
536 else
537 {
538 if(offer.state == TradeOfferManager.ETradeOfferState.Accepted)
539 {
540 updateBotInvDeposit(offer, row[0].steamid);
541 mysqlConnection.query('UPDATE `users` SET `coins`=`0` WHERE `steamid`='+row[0].steamid+'', function(err){
542 if(err)
543 {
544 console.log('Error on adding coins to user after deposit offer '+err);
545 }
546 });
547 mysqlConnection.query('UPDATE `siteinfo` SET `status`=`status`+'+row[0].coins+' WHERE `name`="deposited"', function(err) {
548 if(err)
549 {
550 return;
551 }
552 });
553 }
554 }
555 });
556 }
557 else if(row2.length>0){
558 processingId.exterminate(row2[0].id);
559 //withdraw offer
560 var items = (row2[0].items).split(';');
561
562 mysqlConnection.query('UPDATE `withdrawoffers` SET `msg`="'+TradeOfferManager.getStateName(offer.state)+'", `status`=3 WHERE `offerId`='+offer.id+'', function(err){
563 if(err)
564 {
565 console.log('Error on updating offer msg in database '+err);
566 }
567 else
568 {
569 if(offer.state == TradeOfferManager.ETradeOfferState.Canceled || offer.state == TradeOfferManager.ETradeOfferState.Invalid || offer.state == TradeOfferManager.ETradeOfferState.Expired || offer.state == TradeOfferManager.ETradeOfferState.Declined || offer.state == TradeOfferManager.ETradeOfferState.InvalidItems || offer.state == TradeOfferManager.ETradeOfferState.CanceledBySecondFactor || offer.state == TradeOfferManager.ETradeOfferState.Countered)
570 {
571 returnCoins(row2[0].coins, row2[0].steamid);
572 updateBotInvWithdraw(items);
573 }
574 else
575 {
576 removeItems(items, items.length-2);
577 }
578 }
579 });
580 }
581 })
582 });
583 };
584});
585
586manager.on('newOffer', function(offer) {
587 offer.decline(function(err){
588 if(err)
589 {
590 console.log(err);
591 }
592 })
593});
594
595function removeItems(items, counter){
596 mysqlConnection.query('DELETE FROM `bot'+settings.botID+'` WHERE `assetId`='+items[counter]+'', function(err){
597 if(err)
598 {
599 console.log(err);
600 }
601 else
602 {
603 counter--;
604 if(counter > -1)
605 {
606 removeItems(items, counter);
607 }
608 else
609 {
610 return;
611 }
612 }
613 });
614}
615function returnCoins(coins, steamid){
616 if(coins>0)
617 {
618 mysqlConnection.query('UPDATE `users` SET `coins`=`coins`+'+coins+' WHERE `steamid`='+steamid+'', function(err){
619 if(err)
620 {
621 console.log(err);
622 }
623 });
624 mysqlConnection.query('UPDATE `siteinfo` SET `status`=`status`-'+coins+' WHERE `name`="withdrawed"', function(err) {
625 if(err)
626 {
627 return;
628 }
629 });
630 }
631}
632function updateBotInvWithdraw(items){
633 for(var i = 0; i < items.length-1; i++)
634 {
635 mysqlConnection.query('UPDATE `bot'+settings.botID+'` SET `status`=1 WHERE `assetId`='+items[i]+'', function(err){
636 if(err)
637 {
638 console.log(err);
639 }
640 });
641 }
642}
643function updateBotInvDeposit(offer, steamid)
644{
645 offer.getReceivedItems(function(err, items) {
646 if(err) {
647 console.log("Couldn't get received items: " + err);
648 setTimeout(function(){
649 getItems(offer);
650 },2000)
651 }
652 else
653 {
654 for(var i =0; i < items.length; i++)
655 {
656 var post = {item_name: items[i].market_hash_name, assetId: items[i].assetid, icon_url: items[i].icon_url, status: '1', steamid: steamid, statusItem: 0}
657 mysqlConnection.query('INSERT INTO `bot'+settings.botID+'` SET ?',post, function(err){
658 if(err)
659 {
660 console.log('Error on adding items to bot inv '+err);
661 }
662 });
663 }
664 }
665 });
666}
667setInterval(function(){
668 relog();
669}, 3600000);
670
671setInterval(function(){
672 mysqlConnection.query('SELECT * FROM `bot'+settings.botID+'` WHERE 1', function(err, row){
673 if(err)
674 {
675 console.log(err);
676 return;
677 }
678 mysqlConnection.query('UPDATE `bots` SET `items`='+row.length+' WHERE `id`='+settings.botID+'', function(err2){
679 if(err2)
680 {
681 console.log(err2);
682 return;
683 }
684 });
685 });
686}, 5000);
687
688setInterval(function(){
689 mysqlConnection.query('SELECT * FROM `bots` WHERE `id`='+settings.botID+'', function(err, row){
690 if(err)
691 {
692 console.log(err);
693 return;
694 }
695 /* if(row[0].status==1)
696 {
697 mysqlConnection.query('UPDATE `bots` SET `status`=2 WHERE `id`='+settings.botID+'', function(){});
698 setTimeout(function(){
699 updateBot();
700 function updateBot(){
701 if (!steamClient.loggedOn) {
702 setTimeout(function(){updateBot()}, 5000)
703 }
704 else
705 {
706 manager.loadInventory(730, 2, true, function(err, items, currencies){
707 if(err) {
708 console.log('Couldn`t load items from bot inventory '+err);
709 mysqlConnection.query('UPDATE `bots` SET `status`=1 WHERE `id`='+settings.botID+'', function(){});
710 return;
711 }
712 var botItems=[],num=0;
713 itemsAmount = items.length;
714 for (var i = 0; i < items.length; i++) {
715 if (items[i].tradable) {
716 botItems[num] = [items[i].market_hash_name, items[i].id, items[i].icon_url, 1]
717 num++;
718 }
719 }
720 if(items.length> 0){
721 mysqlConnection.query("TRUNCATE TABLE `bot"+settings.botID+"`", function(err){
722 if(err){
723 console.log(err)
724 mysqlConnection.query('UPDATE `bots` SET `status`=1 WHERE `id`='+settings.botID+'', function(){});
725 return;
726 }
727 mysqlConnection.query("INSERT INTO `bot"+settings.botID+"` (item_name, assetID, icon_url, status) VALUES ?", [botItems], function(err2){
728 if(err2){
729 console.log(err2);
730 return;
731 }
732
733 })
734 });
735 }
736 mysqlConnection.query('UPDATE `bots` SET `status`=1 WHERE `id`='+settings.botID+'', function(){});
737 });
738 }
739 }
740 }, 240000)
741 }*/
742
743 })
744}, 7200000)
745
746
747function checkoldoffers(){
748 mysqlConnection.query('SELECT * FROM `bots` WHERE `id`='+settings.botID+'', function(e,r){
749 if(e)
750 {
751 console.log('Error'+e)
752 setTimeout(function(){checkoldoffers()}, 5000);
753 return;
754 }
755 if(r[0].status==0 || !steamClient.loggedOn)
756 {
757 setTimeout(function(){checkoldoffers()}, 5000);
758 return;
759 }
760 var unixtime = Math.round(new Date().getTime()/1000.0);
761 mysqlConnection.query('SELECT * FROM `depositoffers` WHERE `status`=2 AND `bot`='+settings.botID+' AND `date` < UNIX_TIMESTAMP( )-300 LIMIT 1', function(err,row){
762 if(err)
763 {
764 console.log('Error'+err)
765 setTimeout(function(){checkoldoffers()}, 5000);
766 return;
767 }
768
769 if(row.length>0)
770 {
771 if(processingIdOld.indexOf(row[0].id)<0)
772 {
773 processingIdOld.push(row[0].id)
774 var offerId = row[0].offerId;
775 var id = row[0].id;
776 handleOldOffer(id, offerId, 3, 0, 0, 0, 0);
777 setTimeout(function(){checkoldoffers()}, 5000);
778 return;
779 }
780 else
781 {
782 setTimeout(function(){checkoldoffers()}, 5000);
783 return;
784 }
785 }
786 else
787 {
788 mysqlConnection.query('SELECT * FROM `withdrawoffers` WHERE `status`=2 AND `bot`='+settings.botID+' AND `date` < UNIX_TIMESTAMP( )-300 LIMIT 1', function(err2,row2){
789 if(err2)
790 {
791 console.log('Error'+err2)
792 setTimeout(function(){checkoldoffers()}, 5000);
793 return;
794 }
795 if(row2.length>0)
796 {
797 if(processingIdOld.indexOf(row2[0].id)<0)
798 {
799 processingIdOld.push(row2[0].id)
800 var offerId = row2[0].offerId;
801 var id = row2[0].id;
802 var items = row2[0].items;
803 var coins = row2[0].coins;
804 var steamid = row2[0].steamid;
805 handleOldOffer(id, offerId, 3, 1, items, coins, steamid);
806 setTimeout(function(){checkoldoffers()}, 5000);
807 return;
808 }
809 }
810 else
811 {
812 setTimeout(function(){checkoldoffers()}, 5000);
813 return;
814 }
815 });
816 }
817 });
818 });
819}
820
821function handleOldOffer(id, offerid, retries, type, items, coins, steamid){
822 if(!steamClient.loggedOn)
823 {
824 setTimeout(function(){handleOldOffer(id, offerid, retries, type, items, coins, steamid)}, 5000);
825 return;
826 }
827 manager.getOffer(offerid, function(error, offer){
828 if(error)
829 {
830 retries--;
831 if(retries < 0)
832 {
833 console.log(error);
834 if(type == 0)
835 {
836 mysqlConnection.query('UPDATE `depositoffers` SET `status`=3, `msg`="There was an error while processing your offer." WHERE `id`='+id+'', function(err){
837 if(err)
838 {
839 console.log('Error on updating deposit offer '+err);
840 }
841 });
842 }
843 else
844 {
845 mysqlConnection.query('UPDATE `withdrawoffers` SET `status`=3, `msg`="There was an error while processing your offer." WHERE `id`='+id+'', function(err){
846 if(err)
847 {
848 console.log('Error on updating withdraw offer '+err);
849 }
850 });
851 items = items.split(';');
852 returnCoins(coins, steamid);
853 updateBotInvWithdraw(items);
854 }
855 processingIdOld.exterminate(id);
856 }
857 else
858 {
859 setTimeout(function(){
860 handleOldOffer(id, offerid, retries, type, items, coins, steamid);
861 }, 10000)
862 }
863 return;
864 }
865 if(offer.state == TradeOfferManager.ETradeOfferState.Canceled || offer.state == TradeOfferManager.ETradeOfferState.Accepted || offer.state == TradeOfferManager.ETradeOfferState.Invalid || offer.state == TradeOfferManager.ETradeOfferState.Expired || offer.state == TradeOfferManager.ETradeOfferState.Declined || offer.state == TradeOfferManager.ETradeOfferState.InvalidItems || offer.state == TradeOfferManager.ETradeOfferState.CanceledBySecondFactor || offer.state == TradeOfferManager.ETradeOfferState.Countered)
866 {
867 mysqlConnection.query('SELECT * FROM `depositoffers` WHERE `offerId`='+offer.id+'', function(err,row){
868 if(err)
869 {
870 console.log('Error'+err)
871 return;
872 }
873 mysqlConnection.query('SELECT * FROM `withdrawoffers` WHERE `offerId`='+offer.id+'', function(err2,row2){
874 if(err2)
875 {
876 console.log('Error'+err2)
877 return;
878 }
879 if(row.length>0){
880 processingIdOld.exterminate(id);
881 //deposit offer
882
883 mysqlConnection.query('UPDATE `depositoffers` SET `msg`="'+TradeOfferManager.getStateName(offer.state)+'", `status`=3 WHERE `offerId`='+offer.id+'', function(err){
884 if(err)
885 {
886 console.log('Error on updating offer msg in database '+err);
887 }
888 else
889 {
890 if(offer.state == TradeOfferManager.ETradeOfferState.Accepted)
891 {
892 updateBotInvDeposit(offer, row[0].steamid);
893 mysqlConnection.query('UPDATE `users` SET `coins`=0 WHERE `steamid`='+row[0].steamid+'', function(err){
894 if(err)
895 {
896 console.log('Error on adding coins to user after deposit offer '+err);
897 }
898 });
899 mysqlConnection.query('UPDATE `siteinfo` SET `status`=`status`+'+row[0].coins+' WHERE `name`="deposited"', function(err) {
900 if(err)
901 {
902 return;
903 }
904 });
905 }
906 }
907 });
908 }
909 else if(row2.length>0){
910 processingIdOld.exterminate(id);
911 //withdraw offer
912 var items = (row2[0].items).split(';');
913
914 mysqlConnection.query('UPDATE `withdrawoffers` SET `msg`="'+TradeOfferManager.getStateName(offer.state)+'", `status`=3 WHERE `offerId`='+offer.id+'', function(err){
915 if(err)
916 {
917 console.log('Error on updating offer msg in database '+err);
918 }
919 else
920 {
921 if(offer.state == TradeOfferManager.ETradeOfferState.Canceled || offer.state == TradeOfferManager.ETradeOfferState.Invalid || offer.state == TradeOfferManager.ETradeOfferState.Expired || offer.state == TradeOfferManager.ETradeOfferState.Declined || offer.state == TradeOfferManager.ETradeOfferState.InvalidItems || offer.state == TradeOfferManager.ETradeOfferState.CanceledBySecondFactor || offer.state == TradeOfferManager.ETradeOfferState.Countered)
922 {
923 returnCoins(row2[0].coins, row2[0].steamid);
924 updateBotInvWithdraw(items);
925 }
926 else
927 {
928 removeItems(items, items.length-2);
929 }
930 }
931 });
932 }
933 })
934 });
935 };
936 });
937}