Advertisement
Guest User

Untitled

a guest
Jun 26th, 2016
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.90 KB | None | 0 0
  1. var settings = require('./settings.js');
  2. var util = require('util');
  3. var crypto = require('crypto');
  4. var fs = require('fs');
  5. //MySQL connection
  6. var mysqlInfo;
  7. mysqlInfo = {
  8. host : settings.DBhost,
  9. user : settings.DBuser,
  10. password : settings.DBpassword,
  11. database : settings.DBdatabase,
  12. charset : settings.DBcharset
  13. };
  14. var mysql = require('mysql');
  15. var mysqlConnection = mysql.createConnection(mysqlInfo);
  16. setInterval(function () {
  17. mysqlConnection.query('SELECT 1');
  18. }, 5000);
  19. ////
  20. Array.prototype.exterminate = function (value) {
  21. this.splice(this.indexOf(value), 2);
  22. }
  23. var log_stdout = process.stdout;
  24. console.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
  35. var getSteamAPIKey = require('steam-web-api-key');
  36. var SteamTradeOffers = require('steam-tradeoffers');
  37. var offers = new SteamTradeOffers();
  38. var SteamCommunity = require('steamcommunity');
  39. var community = new SteamCommunity();
  40. var SteamTotp = require('steam-totp');
  41. var Steam = require('steam');
  42. var TradeOfferManager = require('steam-tradeoffer-manager/lib/index.js');
  43. var steamClient = new Steam.SteamClient();
  44. var steamUser = new Steam.SteamUser(steamClient);
  45. var steamFriends = new Steam.SteamFriends(steamClient);
  46. var SteamWebLogOn = require('steam-weblogon');
  47. var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
  48. var mySteamID, itemsAmount;
  49. var relogretry = 0, reloggin = 0;;
  50. var processingId = [];
  51. var processingIdOld = [];
  52. steamClient.connect();
  53. steamClient.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.  
  62. steamClient.on('error', function(error){
  63. console.log('Error!' + error);
  64. steamClient.connect();
  65. })
  66.  
  67. steamClient.on('loggedOff', function(error){
  68. console.log('disconnected!' + error);
  69. steamClient.connect();
  70. })
  71. var manager = new TradeOfferManager({
  72. "steam": steamUser, // Polling every 30 seconds is fine since we get notifications from Steam
  73. "domain": "CSGO-Duel.com", // 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. });
  81. function 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. }
  98. steamClient.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. })
  128. steamUser.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.  
  137. steamUser.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. })
  145. steamFriends.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
  150. function 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. }); */
  188. setTimeout(function(){
  189. onStart2();
  190. }, 5000)
  191. });
  192. }
  193. function 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
  218. function 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
  313. function 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 `tradelink` FROM `users` WHERE `steamid`='+steamid+'', function(er,row){
  331. if(er)
  332. {
  333. console.log('Error on selecting tradelink 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].tradelink;
  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
  411. function 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 `tradelink` FROM `users` WHERE `steamid`='+steamid+'', function(er,row){
  430. if(er)
  431. {
  432. processingId.exterminate(id);
  433. console.log('Error on selecting tradelink from db '+er);
  434. return;
  435. }
  436. if(row.length<1)
  437. {
  438. processingId.exterminate(id);
  439. return;
  440. }
  441. var token = row[0].tradelink;
  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
  513. manager.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.  
  586. manager.on('newOffer', function(offer) {
  587. offer.decline(function(err){
  588. if(err)
  589. {
  590. console.log(err);
  591. }
  592. })
  593. });
  594.  
  595. function 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. }
  615. function 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. }
  632. function 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. }
  643. function 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: 1}
  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. }
  667. setInterval(function(){
  668. relog();
  669. }, 3600000);
  670.  
  671. setInterval(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.  
  688. setInterval(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.  
  747. function 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.  
  821. function 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement