Advertisement
Guest User

Untitled

a guest
Jul 10th, 2018
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.58 KB | None | 0 0
  1. const config = require('./config.json');
  2. const Prices = require('./prices.json');
  3.  
  4. const fs = require('fs');
  5.  
  6. const SteamUser = require('steam-user');
  7. const SteamCommunity = require('steamcommunity');
  8. const SteamTotp = require('steam-totp');
  9. const TradeOfferManager = require('steam-tradeoffer-manager');
  10. const SteamRepApi = require('steamrep');
  11. const TeamFortress2 = require('tf2');
  12.  
  13. const client = new SteamUser();
  14. const tf2 = new TeamFortress2(client);
  15. const community = new SteamCommunity();
  16. const manager = new TradeOfferManager({
  17. steam: client,
  18. community: community,
  19. language: 'en',
  20. cancelTime: 300000
  21. });
  22. //
  23. fs.readFile('polldata.json', function(err, data) {
  24. if(err) {
  25. console.log('Error reading polldata.json. This does not account for first time run. ' + err);
  26. } else {
  27. console.log('Found previous trade offer data. Importing it.');
  28. manager.pollData = JSON.parse(data);
  29. }
  30. });
  31.  
  32. const logOnOptions = {
  33. accountName: config.account.username,
  34. password: config.account.password,
  35. twoFactorCode: SteamTotp.generateAuthCode(config.account.sharedSecret)
  36. };
  37.  
  38. client.logOn(logOnOptions);
  39.  
  40. client.on('loggedOn', function(details) {
  41. console.log('Bot ' + client.steamID.getSteamID64() + ' successfully logged into Steam!');
  42. client.setPersona(SteamUser.Steam.EPersonaState.LookingToTrade, config.bot.displayName);
  43. client.gamesPlayed(config.tf2.ID);
  44. });
  45.  
  46. client.on('error', function(err) {
  47. console.log('Error: ' + err);
  48. });
  49.  
  50. client.on('webSession', function(sessionID, cookies) {
  51. console.log('Got web session from Steam.');
  52. manager.setCookies(cookies, function(err) {
  53. if(err) {
  54. console.log('Unable to get cookies for trade offers. Error: ' + err);
  55. process.exit(1);
  56. }
  57. console.log('Trade offer cookies set. Got our api key: ' + manager.apiKey);
  58. });
  59. community.setCookies(cookies);
  60. });
  61.  
  62. tf2.on('backpackLoaded', function() {
  63. tf2.sortBackpack(4); //4 is 'type'
  64. console.log("Loaded our TF2 backpack & sorted it by type.");
  65. });
  66.  
  67. client.on('friendRelationship', function(steamID, relationship) {
  68. if(relationship == 2) {
  69. console.log('You friend request from: ' + steamID + ' while you were online.');
  70. client.addFriend(steamID, function(err) {
  71. if(err) {
  72. console.log('Error adding friend ' + err.message);
  73. return;
  74. }
  75. client.chatMessage(steamID, config.messages.greetMessage);
  76. console.log('Added user: ' + steamID + ' to your friends list & greeted them with: ' + config.messages.greetMessage);
  77. });
  78. } else if(relationship == 3) {
  79. client.inviteToGroup(steamID, config.bot.groupID);
  80. } else if(relationship == 0) {
  81. console.log('User: ' + steamID + ' removed you from his/hers friends list while you were online.');
  82. }
  83. });
  84.  
  85. client.on('newItems', function(count) {
  86. console.log(count + ' new items in our inventory');
  87. });
  88.  
  89. client.on('tradeRequest', function(steamID, respond) {
  90. console.log("Incoming trade request from " + steamID + ", declining.");
  91. respond(false);
  92. client.chatMessage(steamID, 'I don\'t use the trade window, I only use trade offers.');
  93. console.log('Explained the reasoning behind the trade decline, to user: ' + steamID);
  94. });
  95.  
  96. client.on('friendMessage', function(steamID, message) {
  97. switch(message) {
  98. case "!help":
  99. client.chatMessage(steamID, "Here's the list of commands: !help, !howtotrade, !listings, !owner, !group, !donate, !offerdeclined, !buy (Item Name) (Amount), !sell (Item Name) (Amount), (Make sure to type them correctly. No capital letters.)");
  100. break;
  101. case "Hi":
  102. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  103. break;
  104. case "hi":
  105. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  106. break;
  107. case "Hello":
  108. client.chatMessage(steamID, "Hello! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  109. break;
  110. case "hello":
  111. client.chatMessage(steamID, "Hello! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  112. break;
  113. case "Sup":
  114. client.chatMessage(steamID, "Sup! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  115. break;
  116. case "sup":
  117. client.chatMessage(steamID, "Sup! I'm a TF2 trading bot. I buy and sell items. To get started type !help. (Remember you can't negotiate here! ːsteamfacepalmː)");
  118. break;
  119. case "fuck you":
  120. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  121. break;
  122. case "Fuck you":
  123. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  124. break;
  125. case "Fuck":
  126. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  127. break;
  128. case "fuck":
  129. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  130. break;
  131. case "bitch":
  132. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  133. break;
  134. case "Bitch":
  135. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:");
  136. break;
  137. case "!owner":
  138. client.chatMessage(steamID, "You can contact my owner for negotiations about trades and etc: https://steamcommunity.com/profiles/76561198278886387 (But remember no refund at all cost!)");
  139. break;
  140. case "!howtotrade":
  141. client.chatMessage(steamID, "How to trade: Use !buy and !sell commands only. Use !help for more information.");
  142. break;
  143. case "!listings":
  144. client.chatMessage(steamID, "You can find my listings here: https://backpack.tf/classifieds?steamid=76561198840991984");
  145. break;
  146. case "!group":
  147. client.chatMessage(steamID, "Here join my group: https://steamcommunity.com/groups/DTG55 ");
  148. break;
  149. case "!donate":
  150. client.chatMessage(steamID, "You can donate here https://steamcommunity.com/tradeoffer/new/?partner=880726256&token=IlLGnhB2 (Thank you for your donation!)");
  151. break;
  152. case "!buy":
  153. client.chatMessage(steamID, "!buy (Item Name) (Amount) Example: !buy Mann Co. Supply Crate Key 1 (It needs to be the full name.)");
  154. break;
  155. case "!sell":
  156. client.chatMessage(steamID, "!sell (Item Name) (Amount) Example: !sell Mann Co. Supply Crate Key 1 (It needs to be the full name.)");
  157. break;
  158. case "!offerdeclined":
  159. client.chatMessage(steamID, "You can read here https://steamcommunity.com/profiles/76561198840991984 for the reason your offer is declined.");
  160. }
  161. });
  162.  
  163. client.on('friendMessage', function(steamID, message) {
  164. var buyItemCmd;
  165. if(buyItemCmd = message.match(/^!buy (\D+) (\d+)/i)) {
  166. var item = buyItemCmd[1];
  167. var amount = buyItemCmd[2];
  168. buyItem(steamID, item, amount);
  169. }
  170. });
  171.  
  172. client.on('friendMessage', function(steamID, message) {
  173. var sellItemCmd;
  174. if(sellItemCmd = message.match(/^!sell (\D+) (\d+)/i)) {
  175. var item = sellItemCmd[1];
  176. var amount = sellItemCmd[2];
  177. sellItem(steamID, item, amount);
  178. }
  179. });
  180. //When ever receive a new offer.
  181. manager.on('newOffer', function(offer) {
  182. console.log('New offer #' + offer.id + ' from ' + offer.partner.getSteam3RenderedID() + "\nOffer note: " + offer.message);
  183. //Handle the offer depending on the users profile.
  184. if(offer.partner.getSteamID64() == config.bot.ownerID || offer.itemsToGive.length == 0) {
  185. console.log('User: ' + offer.partner.getSteam3RenderedID() + ' offered a valid trade.');
  186. offer.accept(function(err, status) {
  187. if(err) {
  188. console.log('Unable to accept offer #' + offer.id + '. Error: ' + err.message);
  189. } else {
  190. console.log('Validated trade offer #' + offer.id + ', awaiting confirmation.');
  191. if(status == 'pending') {
  192. community.acceptConfirmationForObject(config.account.identitySecret, offer.id, function(err) {
  193. if(err) {
  194. console.log('Unable to confirm trade offer: ' + err.message);
  195. } else {
  196. console.log('Trade offer: ' + offer.id + ' confirmed.');
  197. }
  198. });
  199. }
  200. }
  201. });
  202. } else {
  203. offer.getUserDetails(function(err, me, them) {
  204. if(err) {
  205. console.log('Error getting their details. ' + err.message);
  206. } else {
  207. if(them.escrowDays > 0) {
  208. offer.decline(function(err) {
  209. if(err) {
  210. console.log('Unable to decline offer #' + offer.id + '. Error: ' + err.message);
  211. } else {
  212. console.log('Declined offer #' + offer.id);
  213. }
  214. client.chatMessage(offer.partner.getSteamID64(), "You have " + them.escrowDays + " escrow days left, please try again later.");
  215. });
  216. } else {
  217. console.log('User: ' + offer.partner.getSteam3RenderedID() + ' offered an invalid trade. Declining offer #' + offer.id);
  218. offer.decline(function(err) {
  219. if(err) {
  220. console.log('Unable to decline offer #' + offer.id + '. Error: ' + err.message);
  221. } else {
  222. console.log('Declined offer #' + offer.id);
  223. client.chatMessage(offer.partner.getSteamID64(), 'You sent an invalid offer, so I declined it. Use !howtotrade to see the trading terms.');
  224. }
  225. });
  226. }
  227. }
  228. });
  229. }
  230. });
  231. //When an offer sent by another Steam user changes state.
  232. manager.on('receivedOfferChanged', function(offer, oldState) {
  233. console.log(offer.partner.getSteam3RenderedID() + `'s Offer #${offer.id} changed: ${TradeOfferManager.ETradeOfferState[oldState]} -> ${TradeOfferManager.ETradeOfferState[offer.state]}`);
  234. //When we accept a trade offer.
  235. if(offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  236. offer.getReceivedItems(function(err, items) {
  237. if(err) {
  238. console.log('The bot couldn\'t get the items it received.');
  239. } else {
  240. var itemNames = items.map(function(item) {
  241. return item.name;
  242. });
  243. //Log the items, serparated by a comma.
  244. console.log('The bot received the following items: ' + itemNames.join(', '));
  245. }
  246. });
  247. }
  248. });
  249. //When one of our trade offers changes states.
  250. manager.on('sentOfferChanged', function(offer, oldState) {
  251. //Aler us when an offer outgoing offer is accepted.
  252. if(offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  253. console.log('Our offer #' + offer.id + ' has been accepted.');
  254. commentOnUserProfile(offer.partner.getSteamID64(), config.comments.afterSuccessfulTrade)
  255. client.chatMessage(config.bot.ownerID, 'Our offer #' + offer.id + ' sent to user ' + offer.partner.getSteamID64() + ' has been accepted.');
  256. } else if(offer.state == TradeOfferManager.ETradeOfferState.Declined) {
  257. console.log('Our offer #' + offer.id + ' has been declined.');
  258. commentOnUserProfile(offer.partner.getSteamID64(), config.comments.theyDeclined)
  259. }
  260. });
  261. //If Steam is down, we'll have isues polling from our api.
  262. manager.on('pollFailure', function(err) {
  263. console.log('Error polling for trade offers: ' + err);
  264. });
  265. //Whenever we receive a new trade offer, we'll save the data after a crash or quit.
  266. manager.on('pollData', function(pollData) {
  267. fs.writeFile('polldata.json', JSON.stringify(pollData), (err) => {
  268. if(err) {
  269. console.log(err);
  270. }
  271. });
  272. });
  273. //Buy items
  274. function buyItem(steamID, item, amount) {
  275. if(!Prices[item]) {
  276. console.log('User: ' + steamID + ' requested to buy an item we\'re currently not selling.');
  277. client.chatMessage(steamID, 'I\'m currently not selling that item.');
  278. return true;
  279. }
  280. //Our items in arrays
  281. var ourItems = [];
  282. //Their items in arrays
  283. var theirRefined = [];
  284. var theirReclaimed = [];
  285. var theirScrap = [];
  286.  
  287. var theirMetal = 0;
  288. var theirMetalToAdd = 0;
  289. var theirRefToAdd = 0;
  290. var theirRecToAdd = 0;
  291. var theirScrToAdd = 0;
  292.  
  293. var theirInventoryRef = 0;
  294. var theirInventoryRec = 0;
  295. var theirInventoryScrap = 0;
  296.  
  297. var DoneAddingTheirMetal = false;
  298.  
  299. var itemPriceInRef = Prices[item].sell;
  300. var itemPriceInScrap = Math.round(itemPriceInRef * 9) * amount;
  301. var itemPrice = itemPriceInRef * amount;
  302.  
  303. client.chatMessage(steamID, 'Processing your request.');
  304. console.log('User: ' + steamID + ' is buying ' + amount + ' of our ' + item + ' for ' + itemPrice + ' refined metal. Item price in scrap ' + itemPriceInScrap);
  305. //Load our inventory
  306. manager.getInventoryContents(config.tf2.ID, 2, true, function(err, inventory) {
  307. if(err) {
  308. console.log('Error getting our inventory: ' + err);
  309. client.chatMessage(steamID, 'I encountered an error getting my inventory. Please try again later.');
  310. } else {
  311. for(var n = 0; n < inventory.length; n++) {
  312. if(ourItems.length < amount && inventory[n].name.indexOf(item) >= 0) {
  313. ourItems.push(inventory[n]);
  314. }
  315. }
  316. if(ourItems.length === 0) {
  317. console.log('The bot doesn\'t have any ' + item + 's in their inventory.');
  318. client.chatMessage(steamID, 'I don\'t have any ' + item + 's in my inventory.');
  319. return true;
  320. } else if(amount > ourItems.length) {
  321. console.log('The bot doesn\'t have ' + amount + ' ' + item + 's in its inventory.');
  322. client.chatMessage(steamID, 'I don\'t have ' + amount + ' ' + item + 's in my inventory. I only have ' + ourItems.length + ' ' + item + 's.');
  323. return true;
  324. }
  325. console.log('Adding ' + amount + ' of our ' + item + 's to the trade offer.');
  326. //Load their inventory
  327. manager.getUserInventoryContents(steamID, config.tf2.ID, 2, true, function(err, inventory) {
  328. if(err) {
  329. console.log('Error getting their inventory: ' + err);
  330. client.chatMessage(steamID, "An error occurred while loading your inventory. Please again try later.");
  331. } else {
  332. console.log('Checking if user: ' + steamID + ' has enough metal to buy ' + amount + ' ' + item + 's.');
  333. //Loop through the users inventory to count metal
  334. for(var n = 0; n < inventory.length; n++) {
  335. if(inventory[n].name.indexOf('Refined Metal') >= 0) {
  336. theirInventoryRef += 1;
  337. theirMetal += 9;
  338. } else if(inventory[n].name.indexOf('Reclaimed Metal') >= 0) {
  339. theirInventoryRec += 1;
  340. theirMetal += 3;
  341. } else if(inventory[n].name.indexOf('Scrap Metal') >= 0) {
  342. theirInventoryScrap += 1;
  343. theirMetal += 1;
  344. }
  345. }
  346. //Log the users metal.
  347. console.log('User: ' + steamID + ' has ' + theirInventoryRef + ' refined, ' + theirInventoryRec + ' reclaimed & ' + theirInventoryScrap + ' scrap in their inventory.');
  348. console.log('User: ' + steamID + ' has ' + theirMetal + ' scrap metal in total.');
  349. //Check if the user has enough metal.
  350. if(theirMetal < itemPriceInScrap) {
  351. var missingMetal = (itemPriceInScrap - theirMetal) / 9;
  352. console.log('User: ' + steamID + ' doesn\'t have ' + itemPriceInScrap + ' scrap metal to buy ' + amount + ' ' + item + 's.');
  353. client.chatMessage(steamID, 'You don\'t have ' + itemPrice + ' refined metal to buy ' + amount + ' of my ' + item + 's. You\'re missing ' + missingMetal.toFixed(2) + ' refined metal.');
  354. return true;
  355. } else if(theirMetal >= itemPriceInScrap) {
  356. console.log('User: ' + steamID + ' has enough scrap metal to buy ' + amount + ' of my ' + item + 's.');
  357. //Check their inventory again for a more detailed count.
  358. while(!DoneAddingTheirMetal) {
  359. if(theirInventoryRef > 0 && theirMetalToAdd + 9 <= itemPriceInScrap) {
  360. theirMetalToAdd += 9;
  361. theirRefToAdd++;
  362. theirInventoryRef--;
  363. } else if(theirInventoryRec > 0 && theirMetalToAdd + 3 <= itemPriceInScrap) {
  364. theirMetalToAdd += 3;
  365. theirRecToAdd++;
  366. theirInventoryRec--;
  367. } else if(theirInventoryScrap > 0 && theirMetalToAdd + 1 <= itemPriceInScrap) {
  368. theirMetalToAdd += 1;
  369. theirScrToAdd++;
  370. theirInventoryScrap--;
  371. } else if(theirMetalToAdd == itemPriceInScrap) {
  372. console.log('Done calculatiing user ' + steamID + '\'s metal.');
  373. client.chatMessage(steamID, 'You\'ve the right amount of refined, reclaimed & scrap metal for a succesful trade.');
  374. DoneAddingTheirMetal = true;
  375. } else {
  376. console.log('User have enough metal, but not the right amount of refined, reclaimed or scrap');
  377. client.chatMessage(steamID, 'Please make sure you have some Reclaimed and Scrap metal in your inventory. You can do this be crafting some in TF2.');
  378. DoneAddingTheirMetal = true;
  379. return true;
  380. }
  381. }
  382. }
  383. console.log('User: ' + steamID + ' will give us ' + theirRefToAdd + ' refined, ' + theirRecToAdd + ' reclaimed & ' + theirScrToAdd + ' scrap from their inventory.');
  384. //Add their refined metal
  385. for(var n = 0; n < inventory.length; n++) {
  386. if(theirRefined.length < theirRefToAdd && inventory[n].name.indexOf('Refined Metal') >= 0) {
  387. theirRefined.push(inventory[n]);
  388. } else if(theirReclaimed.length < theirRecToAdd && inventory[n].name.indexOf('Reclaimed Metal') >= 0) {
  389. theirReclaimed.push(inventory[n]);
  390. } else if(theirScrap.length < theirScrToAdd && inventory[n].name.indexOf('Scrap Metal') >= 0) {
  391. theirScrap.push(inventory[n]);
  392. }
  393. }
  394. console.log('The bot added ' + theirRefined.length + ' refined, ' + theirReclaimed.length + ' reclaimed & ' + theirScrap.length + ' scrap from user: ' + steamID + '\'s inventory to the trade offer.');
  395. //Create the trade offer
  396. var offer = manager.createOffer(steamID);
  397. //Setup the trade offer
  398. offer.setMessage('You\'re buying ' + amount + ' of my ' + item + 's for ' + itemPrice + ' refined metal.');
  399. //Add their items to the trade offer
  400. offer.addTheirItems(theirRefined);
  401. offer.addTheirItems(theirReclaimed);
  402. offer.addTheirItems(theirScrap);
  403. //Add our items to the trade offer
  404. offer.addMyItems(ourItems);
  405. //Send and confirm the offer
  406. offer.send(function(err, status) {
  407. if(err) {
  408. console.log('Error sending the trade offer: ' + err);
  409. client.chatMessage(steamID, 'Something went wrong. There was an error sending you the trade offer, please contact my owner if this continues.');
  410. } else if(status == 'pending') {
  411. console.log(`Trade offer #${offer.id} is validated, but awaiting confirmation.`);
  412. client.chatMessage(steamID, 'The trade offer is validated, but awaiting confirmation.');
  413. community.acceptConfirmationForObject(config.account.identitySecret, offer.id, function(err) {
  414. if(err) {
  415. console.log('Error confirming trade offer: ' + offer.id);
  416. client.chatMessage(steamID, 'Error confirming your trade offer, declining.');
  417. offer.decline();
  418. } else {
  419. console.log(`Trade offer #${offer.id} confirmed.`);
  420. client.chatMessage(steamID, 'The trade offer was sent successfully. You can accept it here: http://steamcommunity.com/tradeoffer/' + offer.id);
  421. }
  422. });
  423. }
  424. });
  425. }
  426. });
  427. }
  428. });
  429. }
  430.  
  431. function sellItem(steamID, item, amount) {
  432. if(!Prices[item]) {
  433. console.log('User: ' + steamID + ' requested to buy an item we\'re currently not buying.');
  434. client.chatMessage(steamID, 'I\'m currently not buying that item.');
  435. return true;
  436. }
  437. //Their items in arrays
  438. var theirItems = [];
  439. //Our items in arrays
  440. var ourRefined = [];
  441. var ourReclaimed = [];
  442. var ourScrap = [];
  443. //Item count
  444. var ourMetal = 0;
  445. var ourMetalToAdd = 0;
  446. var ourRefinedToAdd = 0;
  447. var ourReclaimedToAdd = 0;
  448. var ourScrapToAdd = 0;
  449. //Inventory count
  450. var ourInventoryRef = 0;
  451. var ourInventoryRec = 0;
  452. var ourInventoryScrap = 0;
  453. //Bools
  454. var DoneAddingOurMetal = false;
  455. //Prices
  456. var itemPriceInRef = Prices[item].buy;
  457. var itemPriceInScrap = Math.round(itemPriceInRef * 9) * amount;
  458. var itemPrice = itemPriceInRef * amount;
  459.  
  460. client.chatMessage(steamID, 'Processing your request.');
  461. console.log('User: ' + steamID + ' is selling us ' + amount + ' of their ' + item + ' for ' + itemPrice + ' refined metal. Item price in scrap ' + itemPriceInScrap);
  462. //Load their inventory
  463. manager.getUserInventoryContents(steamID, config.tf2.ID, 2, true, function(err, inventory) {
  464. if(err) {
  465. console.log('Error getting their inventory: ' + err);
  466. client.chatMessage(steamID, "An error occurred while loading your inventory. Please again try later.");
  467. } else {
  468. console.log('Checking if user: ' + steamID + ' has the item they\'re trying to sell us.');
  469. for(var n = 0; n < inventory.length; n++) {
  470. if(theirItems.length < amount && inventory[n].name.indexOf(item) >= 0) {
  471. theirItems.push(inventory[n]);
  472. }
  473. }
  474. if(theirItems.length === 0) {
  475. console.log('User: ' + steamID + ' doesn\'t own any ' + item + 's.');
  476. client.chatMessage(steamID, 'You don\'t own any ' + item + 's.');
  477. return true;
  478. } else if(amount > theirItems.length) {
  479. console.log('User: ' + steamID + ' doesn\'t have ' + amount + ' ' + item + 's in its inventory.');
  480. client.chatMessage(steamID, 'You don\'t have ' + amount + ' ' + item + 's in your inventory. You only have ' + theirItems.length + ' ' + item + 's.');
  481. return true;
  482. }
  483. console.log('Adding ' + amount + ' of their ' + item + 's to the trade offer.');
  484. //Load our inventory
  485. manager.getInventoryContents(config.tf2.ID, 2, true, function(err, inventory) {
  486. if(err) {
  487. console.log('Error getting our inventory: ' + err);
  488. client.chatMessage(steamID, 'I encountered an error getting my inventory. Please try again later.');
  489. } else {
  490. console.log('Checking if the bot has enough metal to buy ' + amount + ' ' + item + 's.');
  491. //Loop trough the inventory to count metal
  492. for(var n = 0; n < inventory.length; n++) {
  493. if(inventory[n].name.indexOf('Refined Metal') >= 0) {
  494. ourInventoryRef += 1;
  495. ourMetal += 9;
  496. } else if(inventory[n].name.indexOf('Reclaimed Metal') >= 0) {
  497. ourInventoryRec += 1;
  498. ourMetal += 3;
  499. } else if(inventory[n].name.indexOf('Scrap Metal') >= 0) {
  500. ourInventoryScrap += 1;
  501. ourMetal += 1;
  502. }
  503. }
  504. console.log('The bot has ' + ourInventoryRef + ' refined, ' + ourInventoryRec + ' reclaimed & ' + ourInventoryScrap + ' scrap in its inventory.');
  505. console.log('The bot has ' + ourMetal + ' scrap metal in total.');
  506. //Check if we can buy the item
  507. if(ourMetal < itemPriceInScrap) {
  508. var missingMetal = (itemPriceInScrap - ourMetal) / 9;
  509. console.log('The bot doesn\'t have ' + itemPriceInScrap + ' scrap metal to buy ' + amount + ' ' + item + 's.');
  510. client.chatMessage(steamID, 'The bot doesn\'t have ' + itemPrice + ' refined metal to buy ' + amount + ' of your ' + item + 's. Please try to sell a less amount of items or wait for the bot to get more metal.');
  511. return true;
  512. } else if(ourMetal >= itemPriceInScrap) {
  513. console.log('The bot has enough scrap metal to buy ' + amount + ' of my ' + item + 's.');
  514. //Check our inventory again for a more detailed count
  515. while(!DoneAddingOurMetal) {
  516. if(ourInventoryRef > 0 && ourMetalToAdd + 9 <= itemPriceInScrap) {
  517. ourMetalToAdd += 9;
  518. ourRefinedToAdd++;
  519. ourInventoryRef--;
  520. } else if(ourInventoryRec > 0 && ourMetalToAdd + 3 <= itemPriceInScrap) {
  521. ourMetalToAdd += 3;
  522. ourReclaimedToAdd++;
  523. ourInventoryRec--;
  524. } else if(ourInventoryScrap > 0 && ourMetalToAdd + 1 <= itemPriceInScrap) {
  525. ourMetalToAdd += 1;
  526. ourScrapToAdd++;
  527. ourInventoryScrap--;
  528. } else if(ourMetalToAdd == itemPriceInScrap) {
  529. console.log('Done calculatiing the bots metal.');
  530. client.chatMessage(steamID, 'The bot has the right amount of refined, reclaimed & scrap metal for a succesful trade.');
  531. DoneAddingOurMetal = true;
  532. } else {
  533. console.log('The bot has enough metal, but not the right amount of refined, reclaimed or scrap, attempting to craft.');
  534. client.chatMessage(steamID, 'The bot is missing some scrap, it will craft some and you can try again.');
  535. DoneAddingOurMetal = true;
  536. return true;
  537. }
  538. }
  539. }
  540. console.log('The bot will give user: ' + steamID + ', ' + ourRefinedToAdd + ' refined, ' + ourReclaimedToAdd + ' reclaimed & ' + ourScrapToAdd + ' scrap from its inventory.');
  541. //Add our metal
  542. for(var n = 0; n < inventory.length; n++) {
  543. if(ourRefined.length < ourRefinedToAdd && inventory[n].name.indexOf('Refined Metal') >= 0) {
  544. ourRefined.push(inventory[n]);
  545. } else if(ourReclaimed < ourReclaimedToAdd && inventory[n].name.indexOf('Reclaimed Metal') >= 0) {
  546. ourReclaimed.push(inventory[n]);
  547. } else if(ourScrap < ourScrapToAdd && inventory[n].name.indexOf('Scrap Metal') >= 0) {
  548. ourScrap.push(inventory[n]);
  549. }
  550. }
  551. console.log('The bot added ' + ourRefined.length + ' refined, ' + ourReclaimed.length + ' reclaimed & ' + ourScrap.length + ' scrap from user: ' + steamID + '\'s inventory to the trade offer.');
  552. //Create the trade offer
  553. var offer = manager.createOffer(steamID);
  554. //Setup the trade offer
  555. offer.setMessage('I\'m buying ' + amount + ' of your ' + item + 's for ' + itemPrice + ' refined metal.');
  556. //Add the items
  557. offer.addTheirItems(theirItems);
  558. //Add our items
  559. offer.addMyItems(ourRefined);
  560. offer.addMyItems(ourReclaimed);
  561. offer.addMyItems(ourScrap);
  562. //Send and confirm the offer
  563. offer.send(function(err, status) {
  564. if(err) {
  565. console.log('Error sending the trade offer: ' + err);
  566. client.chatMessage(steamID, 'Something went wrong. There was an error sending you the trade offer, please contact my owner if this continues.');
  567. } else if(status == 'pending') {
  568. console.log(`Trade offer #${offer.id} is validated, but awaiting confirmation.`);
  569. client.chatMessage(steamID, 'The trade offer is validated, but awaiting confirmation.');
  570. community.acceptConfirmationForObject(config.account.identitySecret, offer.id, function(err) {
  571. if(err) {
  572. console.log('Error confirming trade offer: ' + offer.id);
  573. client.chatMessage(steamID, 'Error confirming your trade offer, declining.');
  574. offer.decline();
  575. } else {
  576. console.log(`Trade offer #${offer.id} confirmed.`);
  577. client.chatMessage(steamID, 'The trade offer was sent successfully. You can accept it here: http://steamcommunity.com/tradeoffer/' + offer.id);
  578. }
  579. });
  580. }
  581. });
  582. }
  583. });
  584. }
  585. });
  586. }
  587. //Custom function to post and log comments on steam profiles
  588. function
  589. commentOnUserProfile(steamID, message) {
  590. community.postUserComment(steamID, message, function(err) {
  591. if(err) {
  592. console.log(err);
  593. } else {
  594. console.log('Successfully commented: ' + message)
  595. }
  596. });
  597. }
  598. //Custom funtion to fix numbers
  599. function toFixed(num, fixed) {
  600. var re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fixed || -1) + '})?');
  601. return num.toString().match(re)[0];
  602. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement