Advertisement
Guest User

Untitled

a guest
Aug 24th, 2018
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.21 KB | None | 0 0
  1. const SteamUser = require('steam-user');
  2. const SteamTotp = require('steam-totp');
  3. const SteamCommunity = require('steamcommunity');
  4. const TradeOfferManager = require('steam-tradeoffer-manager');
  5. const client = new SteamUser();
  6. const community = new SteamCommunity();
  7. const manager = new TradeOfferManager({
  8. steam: client,
  9. community: community,
  10. language: 'en'
  11. });
  12.  
  13. const TeamFortress2 = require('tf2');
  14.  
  15. const tf2 = new TeamFortress2(client);
  16. const fs = require('fs');
  17. const colors = require('colors');
  18. const colours = require('colors/safe');
  19. const currencies = require('./Currencies.json')
  20. const config = require('./config');
  21.  
  22. var arrayOfObjects = [];
  23. var busy = false;
  24.  
  25. const readAndWrite = require('./readAndWrite.js');
  26. const ReadAndWrite = new readAndWrite();
  27. const logOnOptions = {
  28. accountName: config.accountName,
  29. password: config.password,
  30. twoFactorCode: SteamTotp.generateAuthCode(config.shared_secret)
  31. };
  32.  
  33. client.logOn(logOnOptions);
  34.  
  35. tf2.on("backpackLoaded", function() {
  36. tf2.sortBackpack(4);
  37. console.log("Backpack TF2 loaded and re-organized by type.");
  38. });
  39.  
  40. client.on('loggedOn', () => {
  41. client.setPersona(SteamUser.Steam.EPersonaState.LookingToTrade, config.botName);
  42. client.gamesPlayed("24x7 Automated Trading", 440);
  43. console.log(colours.bgGreen(config.botName) + ' is online and looking for trade.'.green);
  44.  
  45. });
  46. client.on('webSession', (sessionid, cookies) => {
  47. manager.setCookies(cookies);
  48. community.setCookies(cookies);
  49. });
  50.  
  51. client.on('friendRelationship', function(steamID, relationship) {
  52. if(relationship == 2) {
  53. console.log('You friend request from: ' + steamID + ' while you were online.');
  54. client.addFriend(steamID, function(err) {
  55. if(err) {
  56. console.log('Error adding friend ' + err.message);
  57. return;
  58. }
  59. client.chatMessage(steamID, 'Hi! I\'m a TF2 trading bot. I buy and sell items. To get started please type !help.');
  60. console.log('Added user: ' + steamID);
  61. });
  62. } else if(relationship == 0) {
  63. console.log('User: ' + steamID + ' removed the you from his/hers friends list while you were online.');
  64. }
  65. });
  66.  
  67. client.on('friendMessage', function(steamID, message) {
  68. if (message == "!help") {
  69. client.chatMessage(steamID, "Here's the list of available commands: !help, !howtotrade, !listings, !owner, !group and !donate.")
  70. } else if (message == "Hi") {
  71. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  72. } else if (message == "hi") {
  73. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  74. } else if (message == "Hello") {
  75. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  76. } else if (message == "hello") {
  77. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  78. } else if (message == "Hey") {
  79. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  80. } else if (message == "hey") {
  81. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  82. } else if (message == "sup") {
  83. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  84. } else if (message == "Sup") {
  85. client.chatMessage(steamID, "Hi! I'm a TF2 trading bot. I buy and sell items. To get started please type !help.")
  86. } else if (message == "fuck you") {
  87. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  88. } else if (message == "Fuck you") {
  89. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  90. } else if (message == "fuck") {
  91. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  92. } else if (message == "Fuck") {
  93. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  94. } else if (message == "bitch") {
  95. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  96. } else if (message == "Bitch") {
  97. client.chatMessage(steamID, "Watch your profanity please! :steamfacepalm:")
  98. } else if (message == "!owner") {
  99. client.chatMessage(steamID, "Here's my owner's profile: https://steamcommunity.com/profiles/76561198826375598")
  100. } else if (message == "!listings") {
  101. client.chatMessage(steamID, "Here's my backpack.tf listings: https://backpack.tf/classifieds?steamid=76561198855237690")
  102. } else if (message == "!howtotrade") {
  103. client.chatMessage(steamID, "You just need to send me a trade offer with correct value. You can do it so here: https://steamcommunity.com/tradeoffer/new/?partner=894971962&token=O0s4pwEc (I accept pure and overpay.)")
  104. } else if (message == "!group") {
  105. client.chatMessage(steamID, "Here join my group: https://steamcommunity.com/groups/DaAlmightyTrader")
  106. } else if (message == "!donate") {
  107. client.chatMessage(steamID, "You can donate by sending me a trade offer: https://steamcommunity.com/tradeoffer/new/?partner=894971962&token=O0s4pwEc (Thank you so much!)")
  108. } else {
  109. client.chatMessage(steamID, "Invalid command, please type !help for a list of available commands.")
  110. }
  111. }
  112. );
  113.  
  114. manager.on('newOffer', (offer) => {
  115. if (busy) {
  116. arrayOfObjects.push(offer);
  117. console.log(`Pushing offer #${offer.id}`);
  118. } else {
  119. processTradeOffer(offer);
  120. }
  121. });
  122.  
  123. //setInterval to parse incomming offers that were added to a queue.
  124. setInterval(function() {
  125.  
  126. if (arrayOfObjects.length > 0 && !busy) {
  127.  
  128. processTradeOffer(arrayOfObjects[0]);
  129. }
  130. }, 10000);
  131.  
  132. const processTradeOffer = function(offer) {
  133. busy = true;
  134. return getUserDetalles(offer)
  135. .then(function(escrowDays) {
  136. return identyOffer(offer, escrowDays);
  137. }).then(function(offerState) {
  138. return finishTradeOffer(offer, offerState);
  139. }).then(function() {
  140. if (arrayOfObjects.length > 0) {
  141. arrayOfObjects.splice(0, 1);
  142. }
  143. busy = false;
  144. }).catch(function() {
  145. busy = false;
  146. arrayOfObjects.push(offer);
  147. })
  148. }
  149.  
  150. const identyOffer = function(offer, escrowDays) {
  151. return new Promise(function(resolve, reject) {
  152. var offerState = 'undefined';
  153. if (offer.isGlitched() || offer.state === 11 || escrowDays > 0) {
  154. offerState = 'denegable';
  155. return resolve(offerState);
  156. } else if (offer.partner.getSteamID64() === config.id_bossAccount) {
  157. offerState = 'aceptable';
  158. return resolve(offerState);
  159. } else if (offer.itemsToGive.length < 1) {
  160. offerState = 'aceptable';
  161. console.log('Donation =)');
  162. return resolve(offerState);
  163.  
  164. } else {
  165. offerState = 'valida';
  166. return resolve(offerState);
  167. }
  168. })
  169. }
  170. const finishTradeOffer = function(offer, offerState) {
  171. switch (offerState) {
  172. case 'aceptable':
  173. return acceptTradeOffer(offer);
  174. case 'denegable':
  175. return declineTradeOffer(offer);
  176. case 'valida':
  177. return identifyItems(offer).then(function(offerState) {
  178. return finishTradeOffer(offer, offerState);
  179. });
  180. default:
  181. return Promise.reject();
  182. }
  183.  
  184. }
  185. const identifyItems = function(offer) {
  186. var getValueToGive = getValueItemsToGive(offer);
  187. var getValueToReceive = getValueItemsToReceive(offer);
  188. return Promise.all([getValueToGive, getValueToReceive])
  189. .then((results) => {
  190. return determinateOfferState(results[0], results[1]);
  191. }).catch(err => {
  192. if (arrayOfObjects.length > 0) {
  193. arrayOfObjects.splice(0, 1)
  194. }
  195. busy = false;
  196. })
  197. }
  198. const getUserDetalles = function(offer) {
  199. return new Promise(function(resolve, reject) {
  200. offer.getUserDetails(function(err, me, them) {
  201. if (them) {
  202. return resolve(them.escrowDays);
  203. } else {
  204. return reject();
  205. }
  206. })
  207. })
  208. }
  209. const determinateOfferState = function(valueToGive, valueToReceive) {
  210. var ToGive = getRight(valueToGive);
  211. var ToReceive = getRight(valueToReceive);
  212.  
  213. if (ToReceive >= ToGive) {
  214. console.log('Items to Give have a value of :'.bgRed + ToGive);
  215. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  216. offerState = 'aceptable';
  217. return Promise.resolve(offerState);
  218. } else {
  219. console.log('Items to Give have a value of :'.bgRed + ToGive);
  220. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  221. offerState = 'denegable';
  222. return Promise.resolve(offerState);
  223. }
  224. }
  225. const getValueItemsToGive = function(offer) {
  226. return new Promise(function(resolve, reject) {
  227. var filename = './DBPrices.json';
  228. var type = 'utf8';
  229. ReadAndWrite.readDataBase(filename, type)
  230. .then(function(database) {
  231. var promises = [];
  232. var arrItemsToGive = offer.itemsToGive;
  233.  
  234. for (var i = 0; i < arrItemsToGive.length; i++) {
  235.  
  236. var buying = false;
  237.  
  238. promises.push(getValueOfEachItem(database, arrItemsToGive[i], buying));
  239. }
  240. Promise.all(promises)
  241. .then((outgoingValue) => {
  242. return sumValues(outgoingValue);
  243. }).then(function(valueToGive) {
  244. return resolve(valueToGive);
  245. }).catch(err =>
  246. console.log(err));
  247. })
  248. })
  249.  
  250. }
  251. const getValueItemsToReceive = function(offer) {
  252. return new Promise(function(resolve, reject) {
  253. var filename = './DBPrices.json';
  254. var type = 'utf8';
  255. ReadAndWrite.readDataBase(filename, type)
  256. .then(function(database) {
  257.  
  258. var arrItemsToReceive = offer.itemsToReceive;
  259. var promises = [];
  260. for (var i in arrItemsToReceive) {
  261. var buying = true;
  262.  
  263. promises.push(getValueOfEachItem(database, arrItemsToReceive[i], buying))
  264. }
  265. Promise.all(promises)
  266. .then((incomingValue) => {
  267. return sumValues(incomingValue);
  268. }).then(function(valueToReceive) {
  269. return resolve(valueToReceive);
  270. }).catch(err => console.log(err));
  271. })
  272. })
  273.  
  274. }
  275. const getValueOfEachItem = function(database, object, buying) {
  276.  
  277. return new Promise(function(resolve, reject) {
  278.  
  279. setItemDetails(object)
  280. .then((item) => {
  281. if (!buying) {
  282. if (currencies[item.name]) {
  283. return resolve(currencies[item.name].value);
  284. } else if (database[item.name]) {
  285. if (database[item.name].craftable == item.craft) {
  286. return resolve(database[item.name].sell);
  287. } else {
  288. console.log(item.name + item.craft);
  289. return resolve(999999);
  290. }
  291. } else {
  292. console.log(item.name + 'User is taking an unkown item from us');
  293. return resolve(999999);
  294. }
  295. } else {
  296. if (item.appid != '440') {
  297. console.log('User is giving us an item from other Steam Game');
  298. return resolve(0);
  299. } else {
  300. if (currencies[item.name]) {
  301. return resolve(currencies[item.name].value);
  302. } else if (database[item.name]) {
  303. if (database[item.name].craftable == item.craft) {
  304.  
  305. return resolve(database[item.name].buy)
  306.  
  307. } else {
  308. console.log('Item name in DBPrices with no coincidence in craft');
  309.  
  310. console.log(item.name + item.craft);
  311. return resolve(0);
  312. }
  313. } else {
  314. console.log('User is giving us an unknown item. add to DBPrices');
  315. console.log(item.name + item.craft);
  316. return resolve(0);
  317.  
  318. }
  319. }
  320. }
  321. })
  322.  
  323.  
  324. })
  325. }
  326.  
  327. const setItemDetails = function(object) {
  328. return new Promise(function(resolve, reject) {
  329. var item ={};
  330. var desc = object.descriptions;
  331. item.appid = object.appid;
  332. item.name = object.market_hash_name;
  333. item.craft = 'Craftable';
  334. var found = desc.some(function(el) {
  335. return el.value === '( Not Usable in Crafting )'
  336. });
  337. if (found) {
  338. item.craft = 'Non-Craftable';
  339. }
  340. return resolve(item);
  341.  
  342.  
  343. })
  344. }
  345. const sumValues = function(arrNumbers) {
  346. return new Promise(function(resolve, reject) {
  347. if (arrNumbers.length > 0) {
  348. const sum = arrNumbers.reduce((total, amount) => total + amount);
  349. return resolve(sum);
  350. } else {
  351. return resolve(0);
  352. }
  353. })
  354. }
  355.  
  356. function getRight(v) {
  357.  
  358. var i = Math.floor(v),
  359. f = Math.round((v - i) / 0.11);
  360. return i + (f === 9 || f * 0.11);
  361.  
  362. }
  363. const acceptTradeOffer = function(offer) {
  364.  
  365. offer.accept(false, function(error, status) {
  366. if (error) {
  367. console.log(`\nError: Failed to accept the trade offer #${offer.id}\n`);
  368. console.log(error);
  369. return Promise.reject();
  370.  
  371. } else if (status === 'pending') {
  372. console.log(`StatusMsg : The trade offer #${offer.id} is accepted but needs confirmation`);
  373.  
  374. community.acceptConfirmationForObject(config.identity_secret, offer.id, function(error) {
  375.  
  376. if (error) {} else {
  377. console.log(`StatusMsg : The trade offer #${offer.id} is confirmed`.green);
  378. return Promise.resolve();
  379. }
  380. });
  381.  
  382. } else {
  383. console.log(`StatusMsg : The trade offer #${offer.id} is accepted`.green);
  384. return Promise.resolve();
  385. }
  386. });
  387.  
  388. }
  389. const declineTradeOffer = function(offer) {
  390.  
  391. offer.decline(function(error) {
  392.  
  393. if (error) {
  394. console.log(`\nError: Failed to decline the trade offer #${offer.id}\n`);
  395. console.log(error);
  396. declineTradeOffer(offer);
  397. } else {
  398. console.log(`StatusMsg : The trade offer #${offer.id} is declined`.red);
  399. return Promise.resolve();
  400. }
  401.  
  402.  
  403. })
  404. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement