Advertisement
Guest User

Untitled

a guest
Feb 5th, 2017
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.23 KB | None | 0 0
  1. //basics
  2. var config = require('./config');
  3. var server = require('http').createServer();
  4. var io = require('socket.io')(server);
  5. var fs = require('fs');
  6. var request = require('request');
  7. var mysql = require('mysql');
  8.  
  9. //BOT init start
  10. var SteamCommunity = require('steamcommunity');
  11. var community = new SteamCommunity();
  12. var SteamUser = require('steam-user');
  13. var TradeOfferManager = require('steam-tradeoffer-manager');
  14. var SteamTotp = require('steam-totp');
  15.  
  16. //SITE SETTINGS
  17. var prices = JSON.parse(fs.readFileSync(__dirname + '/prices.txt'));
  18. var isSteamRIP = false;
  19. var bot_online = true;
  20. var steamid_sockets = {};
  21. var assigns = {};
  22. var orders = '';
  23. var orderDetails = {};
  24. var connection = mysql.createConnection({
  25. host : config.host,
  26. user : config.user,
  27. password : config.password,
  28. database : config.db
  29. });
  30.  
  31. //PAYMENT BOT ADMIN
  32. var padmin = config.padmin;
  33. var polling_interval = config.polling_interval; //confirmation checker
  34.  
  35. //PAYMENT BOT ACCOUNT DETALIS
  36. var pdetails = {
  37. "accountName" : config.pbot_username,
  38. "password" : config.pbot_password,
  39. "twoFactorCode" : SteamTotp.generateAuthCode(config.psharedsecret)
  40. };
  41. //BOT CLIENT INIT
  42. var pclient = new SteamUser();
  43. //BOT MANAGER INIT
  44. var pmanager = new TradeOfferManager({
  45. "steam" : pclient,
  46. "domain" : config.manager_domain,
  47. "language" : config.manager_lang,
  48. "cancelTime" : config.manager_cancelTime
  49. });
  50. /*
  51. //BOOST BOT ADMIN
  52. var badmin = config.badmin;
  53.  
  54. //BOOST BOT ACCOUNT DETALIS
  55. var bdetails = {
  56. "accountName" : config.bbot_username,
  57. "password" : config.bbot_password,
  58. "twoFactorCode" : SteamTotp.generateAuthCode(config.bsharedsecret)
  59. };
  60. //BOT CLIENT INIT
  61. var bclient = new SteamUser();
  62. //BOT MANAGER INIT
  63. var bmanager = new TradeOfferManager({
  64. "steam" : bclient,
  65. "domain" : config.manager_domain,
  66. "language" : config.manager_lang,
  67. "cancelTime" : config.manager_cancelTime
  68. }); */
  69.  
  70. pclient.logOn(pdetails); //bot login
  71. //bclient.logOn(bdetails); //boost bot login
  72.  
  73. //ranks
  74. var ranks = [[1, 'Silver 1', 10],
  75. [2, 'Silver 2', 20],
  76. [3, 'Silver 3', 30],
  77. [4, 'Silver 4', 40],
  78. [5, 'Silver Elite', 50],
  79. [11, 'Silver Elite Master', 60],
  80. [10, 'Gold Nova 1', 75],
  81. [12, 'Gold Nova 2', 90],
  82. [13, 'Gold Nova 3', 105],
  83. [14, 'Gold Nova Master', 120],
  84. [15, 'Master Guardian 1', 140],
  85. [16, 'Master Guardian 2', 160],
  86. [17, 'Master Guardian Elite', 180],
  87. [18, 'Distinguished Master Guardian', 210],
  88. [19, 'Legendary Eagle', 250],
  89. [20, 'Legendary Eagle Master', 290],
  90. [21, 'Supreme Master First Class', 350],
  91. [22, 'Global Elite', 420]];
  92.  
  93. io.on('connection', function(socket){
  94. socket.on('disconnect', function(socket){
  95.  
  96. });
  97. socket.on('get value', function(beg,end,prime){
  98. io.emit('value', calcPrice(beg,end,prime));
  99. });
  100. socket.on('load inventory', function(steamid, force){
  101. var forcereload, inventory, res;
  102. if(!steamid) return;
  103. if(typeof(steamid) !== 'string') return;
  104. if (res = /^(7656119\d{10})/.exec(steamid)) {
  105. if(!force) forcereload = false;
  106. if ((fs.existsSync('cache/'+steamid+'.txt')) && (forcereload === false)) {
  107. inventory = JSON.parse(fs.readFileSync('cache/'+steamid+'.txt'));
  108. socket.emit('inventory',{inventory: inventory.inventory, prices: inventory.prices});
  109. socket.emit('notify','info','Inventory loaded from cache.');
  110. } else {
  111. var steamid_substr = ''+steamid;
  112. steamid_substr = steamid_substr.substr(7);
  113. steamid_substr = parseInt(steamid_substr);
  114. var tradelink = 'https://steamcommunity.com/tradeoffer/new/?partner='+(steamid_substr - 7960265728);
  115. var app = pmanager.createOffer(tradelink);
  116. app.getPartnerInventoryContents('730','2',function(get_err,inventory) {
  117. if(get_err){
  118. console.log('error occured while loading items');
  119. console.log(get_err);
  120. socket.emit('notify','danger','Error while loading your inventory.');
  121. return;
  122. } else {
  123. var output_prices = [];
  124. for(key in inventory){
  125. var obj = inventory[key];
  126. if(prices[obj['market_hash_name']])
  127. var a_price = prices[obj['market_hash_name']];
  128. else var a_price = 0;
  129. if(a_price < 0.10){
  130. a_price = 0;
  131. }
  132. output_prices.push({
  133. market_hash_name: obj['market_hash_name'],
  134. price: ''+a_price
  135. })
  136. }
  137. fs.writeFile('cache/'+steamid+'.txt', JSON.stringify({inventory: inventory, prices: output_prices}), function(fserr) {
  138. if(fserr) {
  139. socket.emit('notify','danger','Error while loading your inventory.');
  140. return console.log(fserr);
  141. }
  142. });
  143. socket.emit('inventory',{inventory: inventory, prices: output_prices});
  144. socket.emit('notify','success','Inventory loaded.');
  145. }
  146. });
  147. }
  148. } else return;
  149. });
  150.  
  151. socket.on('deposit items', function(items,steamid,tradeurl,beg,end,prime,note,steamid2) {
  152. var token, token_regex, token_regex2, res;
  153. if(!steamid) return [ socket.emit('notify','danger','Please specify your SteamID.'), socket.emit('deposit error') ];
  154. if(!steamid2) return [ socket.emit('notify','danger','Please specify your SteamID.'), socket.emit('deposit error') ];
  155. if(items.length < 1) return [ socket.emit('notify','danger','No items selected.'), socket.emit('deposit error') ];
  156. if(Object.prototype.toString.call(items) !== '[object Array]') return [ socket.emit('notify','danger','No items selected.'), socket.emit('deposit error') ];
  157. if(typeof(steamid) !== 'string') return [ socket.emit('notify','danger','Please specify your SteamID.'), socket.emit('deposit error') ];
  158. if(typeof(steamid2) !== 'string') return [ socket.emit('notify','danger','Please specify your SteamID.'), socket.emit('deposit error') ];
  159. if (!(res = /^(7656119\d{10})/.exec(steamid2))) return [ socket.emit('notify','danger','Please specify your SteamID.'), socket.emit('deposit error') ];
  160. if (res = /^(7656119\d{10})/.exec(steamid)) {
  161. if(isSteamRIP === false){
  162. if(!tradeurl) return [ socket.emit('notify','danger','Please specify your tradelink.'), socket.emit('deposit error') ];
  163. if(typeof(tradeurl) !== 'string') return [ socket.emit('notify','danger','Please specify your tradelink.'), socket.emit('deposit error') ];
  164. token_regex = /token=([\w-]+)/.exec(tradeurl);
  165. if (token_regex) {
  166. token = token_regex[1];
  167. token_regex2 = /^(.{4,8})$/.exec(token);
  168. if(token_regex2){
  169. token = token_regex2[1];
  170. } else return [ socket.emit('notify','danger','Please specify your tradelink.'), socket.emit('deposit error') ];
  171. } else return [ socket.emit('notify','danger','Please specify your tradelink.'), socket.emit('deposit error') ];
  172. connection.query('SELECT * FROM `trade_history` WHERE `offer_partner` = '+connection.escape(steamid)+' AND (`offer_state` = \'sent\' OR `offer_state` = \'pending\' OR `offer_state` = \'2\' OR `offer_state` = \'9\')', function(offer_err, offers) {
  173. if(offer_err){
  174. console.log(offer_err);
  175. return [ socket.emit('notify','danger','Please try again.'), socket.emit('deposit error') ];
  176. } else if(offers.length > 0){
  177. return [ socket.emit('notify','danger','You already have a pending offer!'), socket.emit('deposit error') ];
  178. } else {
  179. var steamid_substr = ''+steamid;
  180. steamid_substr = steamid_substr.substr(7);
  181. steamid_substr = parseInt(steamid_substr);
  182. var tradelink = 'https://steamcommunity.com/tradeoffer/new/?partner='+(steamid_substr - 7960265728)+'&token='+token;
  183. var app = pmanager.createOffer(tradelink);
  184. app.getPartnerInventoryContents('730','2',function(get_err,inventory) {
  185. if(get_err){
  186. console.log('error occured while deposit');
  187. console.log(get_err);
  188. return [ socket.emit('notify','danger','Please try again.'), socket.emit('deposit error') ];
  189. } else {
  190. var names = [];
  191. var hacker = false;
  192. items.forEach(function(item) {
  193. for(key in inventory){
  194. var object = inventory[key];
  195. if(object.id == item){
  196. if(prices[object.market_hash_name])
  197. var a_price = prices[object.market_hash_name];
  198. else var a_price = 0;
  199. if(a_price < 0.10){
  200. hacker = true;
  201. }
  202. names.push({
  203. market_hash_name: object.market_hash_name,
  204. id: parseInt(object.id),
  205. price: a_price
  206. });
  207. }
  208. }
  209. });
  210. var total_price = 0;
  211. var after_items = [];
  212. names.forEach(function(name) {
  213. total_price+=name.price;
  214. after_items.push(name.id);
  215. });
  216. total_price = total_price.toFixed(2);
  217. after_items.sort(function (a, b) { return a - b; });
  218. items.sort(function (a, b) { return a - b; });
  219. if (items.length == after_items.length
  220. && items.every(function(u, i) {
  221. return u === after_items[i];
  222. })
  223. ) {
  224. var i_price = calcPrice(beg,end,prime);
  225. if(i_price < 10) return [ socket.emit('notify','danger','You need to pay more for this boost! Please reload your inventory!'), socket.emit('deposit error') ];;
  226. if((total_price < i_price) || (hacker)){
  227. return [ socket.emit('notify','danger','You need to pay more for this boost!'), socket.emit('deposit error') ];
  228. } else {
  229. console.log(total_price);
  230. items.forEach(function(target) {
  231. app.addTheirItem({
  232. appid: 730,
  233. contextid: 2,
  234. amount: 1,
  235. assetid: target
  236. });
  237. });
  238. app.setToken(token);
  239. app.getUserDetails(function(a_err,me,them) {
  240. if(a_err){
  241. console.log('error occured while deposit');
  242. console.log(a_err);
  243. return [ socket.emit('notify','danger','Unknown error occurred.'), socket.emit('deposit error') ];
  244. } else {
  245. if(them.escrowDays == 0){
  246. app.send(function(error, status) {
  247. if(error){
  248. console.log('error occured while deposit');
  249. console.log(error);
  250. return [ socket.emit('notify','danger','Unknown error occurred.'), socket.emit('deposit error') ];
  251. } else {
  252. console.log('Deposit request, items: '+items);
  253. var is_prime = (prime) ? 'non-prime' : 'prime';
  254. note = note.substring(0,1000);
  255. connection.query('INSERT INTO `trade_history` SET `offer_id`='+connection.escape(app.id)+',`offer_partner`='+connection.escape(steamid)+',`offer_state`='+connection.escape(status)+',`worth`='+total_price+',`beg`='+connection.escape(beg)+',`end`='+connection.escape(end)+',`prime`='+connection.escape(is_prime)+',`note`='+connection.escape(note)+',`boost_steamid`='+connection.escape(steamid2), function(err1) {
  256. if(err1){
  257. console.log('error occured while deposit');
  258. console.log(err1);
  259. return [ socket.emit('notify','danger','Unknown error occurred.'), socket.emit('deposit error') ];
  260. } else {
  261. if(!steamid_sockets[steamid]) {
  262. steamid_sockets[steamid] = {
  263. socket: [],
  264. }
  265. }
  266. steamid_sockets[steamid]['socket'].push(socket.id);
  267. socket.emit('notify','success','Offer #'+app.id+' sent!');
  268. socket.emit('deposit success');
  269. }
  270. });
  271. }
  272. });
  273. } else {
  274. return [ socket.emit('notify','danger','You need mobile authentication enabled to use zasuboost.com!'), socket.emit('deposit error') ];
  275. }
  276. }
  277. });
  278. } } else {
  279. if(items.length == after_items.length){
  280. console.log('error here');
  281. console.log(items);
  282. console.log(after_items);
  283. }
  284. return [ socket.emit('notify','danger','These items are not longer available!'), socket.emit('deposit error') ];
  285. return;
  286. }
  287. }
  288. });
  289. }
  290. });
  291. } else {
  292. return [ socket.emit('notify','danger','Steam is actually offline, please try again later!'), socket.emit('deposit error') ];
  293. }
  294. } else return;
  295. });
  296.  
  297. });
  298.  
  299. var steam_check_interval = 5000;
  300. setInterval(function() {
  301. request('http://is.steam.rip/api/v1/?request=IsSteamRip', function(rip_error, response, body) {
  302. if(rip_error){
  303. return;
  304. } else {
  305. if(body){
  306. if(body.result){
  307. if(body.result.success === true){
  308. if(body.result.isSteamRip === true){
  309. isSteamRIP = true; //o nie! Steam nie zyje!
  310. steam_check_interval = 20000;
  311. } else {
  312. isSteamRIP = false; //uff. Steam zyje!
  313. }
  314. }
  315. }
  316. }
  317. }
  318. });
  319. },steam_check_interval);
  320.  
  321. function init(){
  322. server.listen(8080);
  323. console.log('Loaded.');
  324. }
  325.  
  326. function calcPrice(beg,end,prime){
  327. if((!beg) || (!end)) return 0;
  328. if((typeof(beg) !== "string") || (typeof(end) !== "string")) return 0;
  329. var total = 0;
  330. ranks.forEach(function(rank){
  331. if(rank[1] === beg) total -= rank[2];
  332. if(rank[1] === end) total += rank[2];
  333. });
  334. if(total < 1) total = 0;
  335. if((prime) && (total)) total = total + (total*0.15);
  336. return total;
  337. }
  338.  
  339. pclient.on("loggedOn", function() {
  340. console.log("Payment bot logged in!");
  341. pclient.addFriend(config.padmin);
  342. pclient.setPersona(3);
  343. connection.connect(function() {
  344. init();
  345. });
  346. });
  347. pclient.on("friendMessage", function(steamid, wiadomosc) {
  348. if(steamid == config.padmin){
  349. var alt_regex = /(\d{17}):(.+)/.exec(wiadomosc);
  350. var add_regex = /^\/add ([0-9]{17})/.exec(wiadomosc);
  351. var remove_regex = /^\/remove ([0-9]{17})/.exec(wiadomosc);
  352. var assign_regex = /^\/assign ([0-9]{17}) ([0-9]{17})/.exec(wiadomosc);
  353. var rmassign_regex = /^\/removeassign ([0-9]{17})/.exec(wiadomosc);
  354. var order_regex = /^\/info (.+)/.exec(wiadomosc);
  355. var rmorder_regex = /^\/orderRemove (.+)/.exec(wiadomosc);
  356. if (0 == wiadomosc.indexOf("/code")) {
  357. var kod = SteamTotp.generateAuthCode(config.psharedsecret);
  358. pclient.chatMessage(config.padmin, "[BOT] Auth code: (try again if dont work): " + kod);
  359. } else if (0 == wiadomosc.indexOf("/online")) {
  360. pclient.setPersona(6);
  361. bot_online = true;
  362. } else if (0 == wiadomosc.indexOf("/offline")) {
  363. pclient.setPersona(3);
  364. bot_online = false;
  365. } else if (0 == wiadomosc.indexOf("/orders")) {
  366. pclient.chatMessage(config.padmin, orders);
  367. } else if (order_regex) {
  368. if(orderDetails[order_regex[1]]) pclient.chatMessage(config.padmin, orderDetails[order_regex[1]]);
  369. else pclient.chatMessage(config.padmin, 'Order doesn\'t exists.');
  370. } else if (rmorder_regex) {
  371. if(orderDetails[rmorder_regex[1]]) {
  372. delete orderDetails[rmorder_regex[1]];
  373. orders.replace(','+rmorder_regex[1],'');
  374. pclient.chatMessage(config.padmin, 'Order removed.');
  375. }
  376. else pclient.chatMessage(config.padmin, 'Order doesn\'t exists.');
  377. } else if (assign_regex) {
  378. assigns[assign_regex[1]] = {
  379. booster: assign_regex[2],
  380. player: assign_regex[1]
  381. }
  382. pclient.chatMessage(config.padmin, 'Assigned.');
  383. } else if (rmassign_regex) {
  384. if(assigns[rmassign_regex[1]]){
  385. delete assigns[rmassign_regex[1]];
  386. pclient.chatMessage(config.padmin, 'Assign removed.');
  387. } else {
  388. pclient.chatMessage(config.padmin, 'Assign doesn\'t exists.');
  389. }
  390. } else if (add_regex) {
  391. pclient.addFriend(add_regex[1]);
  392. } else if (remove_regex) {
  393. pclient.removeFriend(remove_regex[1]);
  394. } else if(alt_regex) {
  395. pclient.chatMessage(alt_regex[1], alt_regex[2]);
  396. }
  397. } else {
  398. var alt_regex = /(\d{17}):(.+)/.exec(wiadomosc);
  399. if((alt_regex) && (assigns[alt_regex[1]]) && (assigns[alt_regex[1]].booster == steamid)){
  400. pclient.getPersonas([steamid,alt_regex[1]], function(callback) {
  401. pclient.chatMessage(alt_regex[1], alt_regex[2]);
  402. pclient.chatMessage(config.padmin, callback[steamid.toString()].player_name+' ('+steamid+'): "'+alt_regex[2]+'" to: '+alt_regex[1]+' ('+callback[alt_regex[1].toString()].player_name+').');
  403. })
  404. } else {
  405. if(!bot_online) pclient.chatMessage(steamid,'Bot is offline. You probably must wait some time for reply.');
  406. pclient.getPersonas([steamid], function(callback) {
  407. pclient.chatMessage(config.padmin, callback[steamid.toString()].player_name+' ('+steamid+')'+':'+wiadomosc);
  408. if(assigns[steamid.toString()]) pclient.chatMessage(assigns[steamid.toString()].booster, callback[steamid.toString()].player_name+' ('+steamid+')'+':'+wiadomosc);
  409. });
  410. }
  411. }
  412. });
  413. pclient.on("webSession", function(dataAndEvents, depName) {
  414. pmanager.setCookies(depName, function(reply) {
  415. if (reply) {
  416. return console.log("error setCookies: " + reply), void process.exit(1);
  417. }
  418. var cb = pmanager.apiKey;
  419. community.setCookies(depName);
  420. community.startConfirmationChecker(polling_interval, config.pidentitysecret);
  421. console.log("cookies set.");
  422. });
  423. });
  424. pmanager.on("newOffer", function(oferta) {
  425. console.log('received new offer #'+oferta.id+' from '+oferta.partner.toString());
  426. if(oferta.partner.toString() == config.padmin){
  427. oferta.accept(true, function(blad, status){
  428. if(blad){
  429. console.log("[BOT] error while accepting trade offer from admin: " + blad);
  430. } else console.log('[BOT] accepted offer from admin: '+oferta.partner.toString()+' ('+status+').');
  431. });
  432. } else {
  433. oferta.decline(function(blad){
  434. if(blad){
  435. console.log('[BOT] error while canceling: '+offer.partner.toString()+' ('+blad+').');
  436. } else console.log('[BOT] canceled trade from '+offer.partner.toString());
  437. });
  438. }
  439. });
  440. community.on("newConfirmation", function(d) {
  441. var time = Math.round(Date.now() / 1E3);
  442. var data = SteamTotp.getConfirmationKey(identitysecret, time, "allow");
  443. community.respondToConfirmation(d.id, d.key, time, data, true, function(error) {
  444. console.log("[BOT] accepting outgoing offer: "+ d.key);
  445. if (error) {
  446. console.log("[BOT] error while accepting outgoing offer: " + error);
  447. pclient.webLogOn();
  448. }
  449. });
  450. });
  451. pmanager.on("sentOfferChanged", function(data,oldState) {
  452. console.log("[BOT] offer state changed #"+data.id+" from: "+data.partner+" changed: " + data.state + " before: " + oldState);
  453. var string_state = {1:'Invalid',2:'Active',3:'Accepted',4:'Countered',5:'Expired',6:'Canceled',7:'Declined',8:'InvalidItems',9:'Needs Confirmation',10:'Canceled',11:'In Escrow'};
  454. if (steamid_sockets[data.partner]) {
  455. steamid_sockets[data.partner].socket.forEach(function(asocket) {
  456. if(io.sockets.connected[asocket])
  457. io.sockets.connected[asocket].emit('notify', 'info', 'Your offer '+data.id+' changed state from "'+string_state[oldState]+'" to "'+string_state[data.state]+'"');
  458. });
  459. }
  460. connection.query('SELECT * FROM `trade_history` WHERE `offer_id` = '+data.id, function(err,rows){
  461. if(err){
  462. console.log('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  463. console.log(err);
  464. return;
  465. } else if(rows.length < 1){
  466. return;
  467. } else {
  468. connection.query('UPDATE `trade_history` SET `offer_state` = '+data.state+' WHERE `offer_id` = '+data.id, function(error){
  469. if(error){
  470. console.log('IMPORTANT ERROR AT SENT OFFER CHANGED EVENT');
  471. console.log(error);
  472. return;
  473. }
  474. });
  475. if(data.state == 3){
  476. data.getReceivedItems(function(items_error, receiveditems) {
  477. if(items_error){
  478. console.log('IMPORTANT ERROR AT DEPOSIT getReceivedItems, USER: '+rows[0].offer_partner);
  479. console.log(items_error);
  480. } else {
  481. if (steamid_sockets[data.partner]) {
  482. steamid_sockets[data.partner].socket.forEach(function(asocket) {
  483. if(io.sockets.connected[asocket])
  484. io.sockets.connected[asocket].emit('deposit complete');
  485. });
  486. }
  487. orders += ','+rows[0].offer_id;
  488. orderDetails[rows[0].offer_id] = "(ORDER ID:"+rows[0].offer_id+") Paid by: "+rows[0].offer_partner+", boost for: "+rows[0].boost_steamid+", hes rank: "+rows[0].beg+", he want: "+rows[0].end+", prime account? "+rows[0].prime+", note to order: "+rows[0].note+", he paid: "+rows[0].worth+"$, buyed at: "+rows[0].created_at;
  489. pclient.addFriend(rows[0].boost_steamid);
  490. pclient.chatMessage(config.padmin, "New order! (ORDER ID:"+rows[0].offer_id+") Paid by: "+rows[0].offer_partner+", boost for: "+rows[0].boost_steamid+", hes rank: "+rows[0].beg+", he want: "+rows[0].end+", prime account? "+rows[0].prime+", note to order: "+rows[0].note+", he paid: "+rows[0].worth+"$, buyed at: "+rows[0].created_at);
  491. setTimeout(function() {
  492. if(steamid_sockets[data.partner]) delete steamid_sockets[data.partner];
  493. }, 3000);
  494. }
  495. });
  496. }
  497. }
  498. });
  499. });
  500. community.on("confKeyNeeded", function(deepDataAndEvents, updateFunc) {
  501. console.log("confKeyNeeded");
  502. var progressContexts = Math.floor(Date.now() / 1E3);
  503. updateFunc(null, progressContexts, SteamTotp.getConfirmationKey(identitysecret, progressContexts, deepDataAndEvents));
  504. });
  505. community.on("sessionExpired", function(err) {
  506. if(err) return;
  507. console.log('session expired, logging in...');
  508. pclient.webLogOn();
  509. });
  510. //bclient.on("loggedOn", function() {
  511. // console.log("Boost bot logged in!");
  512. //});
  513.  
  514. //update prices every day
  515. setInterval(function() {
  516. request('https://api.csgofast.com/price/all', function(error, response, body) {
  517. if(body){
  518. prices = JSON.parse(body);
  519. fs.writeFileSync('prices.txt', body);
  520. }
  521. });
  522. }, 86400);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement