Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2018
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.94 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 == "!howtotrade") {
  101. client.chatMessage(steamID, "Here's my backpack.tf listings: https://backpack.tf/classifieds?steamid=76561198855237690")
  102. } else if (message == "!group") {
  103. client.chatMessage(steamID, "Here join my group: https://steamcommunity.com/groups/DaAlmightyTrader")
  104. } else if (message == "!donate") {
  105. 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!)")
  106. } else {
  107. client.chatMessage(steamID, "Sorry i didn't understand what you said please type !help.")
  108. }
  109. }
  110. });
  111.  
  112. manager.on('newOffer', (offer) => {
  113. if (busy) {
  114. arrayOfObjects.push(offer);
  115. console.log(`Pushing offer #${offer.id}`);
  116. } else {
  117. processTradeOffer(offer);
  118. }
  119. });
  120.  
  121. //setInterval to parse incomming offers that were added to a queue.
  122. setInterval(function() {
  123.  
  124. if (arrayOfObjects.length > 0 && !busy) {
  125.  
  126. processTradeOffer(arrayOfObjects[0]);
  127. }
  128. }, 10000);
  129.  
  130. const processTradeOffer = function(offer) {
  131. busy = true;
  132. return getUserDetalles(offer)
  133. .then(function(escrowDays) {
  134. return identyOffer(offer, escrowDays);
  135. }).then(function(offerState) {
  136. return finishTradeOffer(offer, offerState);
  137. }).then(function() {
  138. if (arrayOfObjects.length > 0) {
  139. arrayOfObjects.splice(0, 1);
  140. }
  141. busy = false;
  142. }).catch(function() {
  143. busy = false;
  144. arrayOfObjects.push(offer);
  145. })
  146. }
  147.  
  148. const identyOffer = function(offer, escrowDays) {
  149. return new Promise(function(resolve, reject) {
  150. var offerState = 'undefined';
  151. if (offer.isGlitched() || offer.state === 11 || escrowDays > 0) {
  152. offerState = 'denegable';
  153. return resolve(offerState);
  154. } else if (offer.partner.getSteamID64() === config.id_bossAccount) {
  155. offerState = 'aceptable';
  156. return resolve(offerState);
  157. } else if (offer.itemsToGive.length < 1) {
  158. offerState = 'aceptable';
  159. console.log('Donation =)');
  160. return resolve(offerState);
  161.  
  162. } else {
  163. offerState = 'valida';
  164. return resolve(offerState);
  165. }
  166. })
  167. }
  168. const finishTradeOffer = function(offer, offerState) {
  169. switch (offerState) {
  170. case 'aceptable':
  171. return acceptTradeOffer(offer);
  172. case 'denegable':
  173. return declineTradeOffer(offer);
  174. case 'valida':
  175. return identifyItems(offer).then(function(offerState) {
  176. return finishTradeOffer(offer, offerState);
  177. });
  178. default:
  179. return Promise.reject();
  180. }
  181.  
  182. }
  183. const identifyItems = function(offer) {
  184. var getValueToGive = getValueItemsToGive(offer);
  185. var getValueToReceive = getValueItemsToReceive(offer);
  186. return Promise.all([getValueToGive, getValueToReceive])
  187. .then((results) => {
  188. return determinateOfferState(results[0], results[1]);
  189. }).catch(err => {
  190. if (arrayOfObjects.length > 0) {
  191. arrayOfObjects.splice(0, 1)
  192. }
  193. busy = false;
  194. })
  195. }
  196. const getUserDetalles = function(offer) {
  197. return new Promise(function(resolve, reject) {
  198. offer.getUserDetails(function(err, me, them) {
  199. if (them) {
  200. return resolve(them.escrowDays);
  201. } else {
  202. return reject();
  203. }
  204. })
  205. })
  206. }
  207. const determinateOfferState = function(valueToGive, valueToReceive) {
  208. var ToGive = getRight(valueToGive);
  209. var ToReceive = getRight(valueToReceive);
  210.  
  211. if (ToReceive >= ToGive) {
  212. console.log('Items to Give have a value of :'.bgRed + ToGive);
  213. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  214. offerState = 'aceptable';
  215. return Promise.resolve(offerState);
  216. } else {
  217. console.log('Items to Give have a value of :'.bgRed + ToGive);
  218. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  219. offerState = 'denegable';
  220. return Promise.resolve(offerState);
  221. }
  222. }
  223. const getValueItemsToGive = function(offer) {
  224. return new Promise(function(resolve, reject) {
  225. var filename = './DBPrices.json';
  226. var type = 'utf8';
  227. ReadAndWrite.readDataBase(filename, type)
  228. .then(function(database) {
  229. var promises = [];
  230. var arrItemsToGive = offer.itemsToGive;
  231.  
  232. for (var i = 0; i < arrItemsToGive.length; i++) {
  233.  
  234. var buying = false;
  235.  
  236. promises.push(getValueOfEachItem(database, arrItemsToGive[i], buying));
  237. }
  238. Promise.all(promises)
  239. .then((outgoingValue) => {
  240. return sumValues(outgoingValue);
  241. }).then(function(valueToGive) {
  242. return resolve(valueToGive);
  243. }).catch(err =>
  244. console.log(err));
  245. })
  246. })
  247.  
  248. }
  249. const getValueItemsToReceive = function(offer) {
  250. return new Promise(function(resolve, reject) {
  251. var filename = './DBPrices.json';
  252. var type = 'utf8';
  253. ReadAndWrite.readDataBase(filename, type)
  254. .then(function(database) {
  255.  
  256. var arrItemsToReceive = offer.itemsToReceive;
  257. var promises = [];
  258. for (var i in arrItemsToReceive) {
  259. var buying = true;
  260.  
  261. promises.push(getValueOfEachItem(database, arrItemsToReceive[i], buying))
  262. }
  263. Promise.all(promises)
  264. .then((incomingValue) => {
  265. return sumValues(incomingValue);
  266. }).then(function(valueToReceive) {
  267. return resolve(valueToReceive);
  268. }).catch(err => console.log(err));
  269. })
  270. })
  271.  
  272. }
  273. const getValueOfEachItem = function(database, object, buying) {
  274.  
  275. return new Promise(function(resolve, reject) {
  276.  
  277. setItemDetails(object)
  278. .then((item) => {
  279. if (!buying) {
  280. if (currencies[item.name]) {
  281. return resolve(currencies[item.name].value);
  282. } else if (database[item.name]) {
  283. if (database[item.name].craftable == item.craft) {
  284. return resolve(database[item.name].sell);
  285. } else {
  286. console.log(item.name + item.craft);
  287. return resolve(999999);
  288. }
  289. } else {
  290. console.log(item.name + 'User is taking an unkown item from us');
  291. return resolve(999999);
  292. }
  293. } else {
  294. if (item.appid != '440') {
  295. console.log('User is giving us an item from other Steam Game');
  296. return resolve(0);
  297. } else {
  298. if (currencies[item.name]) {
  299. return resolve(currencies[item.name].value);
  300. } else if (database[item.name]) {
  301. if (database[item.name].craftable == item.craft) {
  302.  
  303. return resolve(database[item.name].buy)
  304.  
  305. } else {
  306. console.log('Item name in DBPrices with no coincidence in craft');
  307.  
  308. console.log(item.name + item.craft);
  309. return resolve(0);
  310. }
  311. } else {
  312. console.log('User is giving us an unknown item. add to DBPrices');
  313. console.log(item.name + item.craft);
  314. return resolve(0);
  315.  
  316. }
  317. }
  318. }
  319. })
  320.  
  321.  
  322. })
  323. }
  324.  
  325. const setItemDetails = function(object) {
  326. return new Promise(function(resolve, reject) {
  327. var item ={};
  328. var desc = object.descriptions;
  329. item.appid = object.appid;
  330. item.name = object.market_hash_name;
  331. item.craft = 'Craftable';
  332. var found = desc.some(function(el) {
  333. return el.value === '( Not Usable in Crafting )'
  334. });
  335. if (found) {
  336. item.craft = 'Non-Craftable';
  337. }
  338. return resolve(item);
  339.  
  340.  
  341. })
  342. }
  343. const sumValues = function(arrNumbers) {
  344. return new Promise(function(resolve, reject) {
  345. if (arrNumbers.length > 0) {
  346. const sum = arrNumbers.reduce((total, amount) => total + amount);
  347. return resolve(sum);
  348. } else {
  349. return resolve(0);
  350. }
  351. })
  352. }
  353.  
  354. function getRight(v) {
  355.  
  356. var i = Math.floor(v),
  357. f = Math.round((v - i) / 0.11);
  358. return i + (f === 9 || f * 0.11);
  359.  
  360. }
  361. const acceptTradeOffer = function(offer) {
  362.  
  363. offer.accept(false, function(error, status) {
  364. if (error) {
  365. console.log(`\nError: Failed to accept the trade offer #${offer.id}\n`);
  366. console.log(error);
  367. return Promise.reject();
  368.  
  369. } else if (status === 'pending') {
  370. console.log(`StatusMsg : The trade offer #${offer.id} is accepted but needs confirmation`);
  371.  
  372. community.acceptConfirmationForObject(config.identity_secret, offer.id, function(error) {
  373.  
  374. if (error) {} else {
  375. console.log(`StatusMsg : The trade offer #${offer.id} is confirmed`.green);
  376. return Promise.resolve();
  377. }
  378. });
  379.  
  380. } else {
  381. console.log(`StatusMsg : The trade offer #${offer.id} is accepted`.green);
  382. return Promise.resolve();
  383. }
  384. });
  385.  
  386. }
  387. const declineTradeOffer = function(offer) {
  388.  
  389. offer.decline(function(error) {
  390.  
  391. if (error) {
  392. console.log(`\nError: Failed to decline the trade offer #${offer.id}\n`);
  393. console.log(error);
  394. declineTradeOffer(offer);
  395. } else {
  396. console.log(`StatusMsg : The trade offer #${offer.id} is declined`.red);
  397. return Promise.resolve();
  398. }
  399.  
  400.  
  401. })
  402. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement