Advertisement
Guest User

Untitled

a guest
Jun 17th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.88 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(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, config.greetMessage);
  60. console.log('Added user: ' + steamID + ' to your friends list & greeted them with: ' + config.greetMessage);
  61. });
  62. } else if(relationship == 3) {
  63. client.inviteToGroup(steamID, config.groupID);
  64. } else if(relationship == 0) {
  65. console.log('User: ' + steamID + ' removed the you from his/hers friends list while you were online.');
  66. }
  67. });
  68.  
  69. client.on('friendMessage', function(steamID, message) {
  70. switch(message) {
  71. case "!help":
  72. client.chatMessage(steamID, "You can use the following command - !commands");
  73. break;
  74. case "!commands":
  75. client.chatMessage(steamID, "!help, !commands, !howto, !prices, !owner");
  76. break;
  77. case "!owner":
  78. client.chatMessage(steamID, "In case something went wrong, please contact my owner: OWNERS STEAM PROFILE LINK");
  79. break;
  80. case "!howto":
  81. client.chatMessage(steamID, "How to trade: Look up my prices and send me a trade offer!");
  82. break;
  83. case "!prices":
  84. client.chatMessage(steamID, "You can find my prices here: BP.TF LINK");
  85. break;
  86. default:
  87. client.chatMessage(steamID, "Please enter a valid command, use !commands for a list of useful commands, or use !help more general help.");
  88. break;
  89. }
  90. });
  91.  
  92. manager.on('newOffer', (offer) => {
  93. if (busy) {
  94. arrayOfObjects.push(offer);
  95. console.log(`Pushing offer #${offer.id}`);
  96. } else {
  97. processTradeOffer(offer);
  98. }
  99. });
  100.  
  101. //setInterval to parse incomming offers that were added to a queue.
  102. setInterval(function() {
  103.  
  104. if (arrayOfObjects.length > 0 && !busy) {
  105.  
  106. processTradeOffer(arrayOfObjects[0]);
  107. }
  108. }, 10000);
  109.  
  110. const processTradeOffer = function(offer) {
  111. busy = true;
  112. return getUserDetalles(offer)
  113. .then(function(escrowDays) {
  114. return identyOffer(offer, escrowDays);
  115. }).then(function(offerState) {
  116. return finishTradeOffer(offer, offerState);
  117. }).then(function() {
  118. if (arrayOfObjects.length > 0) {
  119. arrayOfObjects.splice(0, 1);
  120. }
  121. busy = false;
  122. }).catch(function() {
  123. busy = false;
  124. arrayOfObjects.push(offer);
  125. })
  126. }
  127.  
  128. const identyOffer = function(offer, escrowDays) {
  129. return new Promise(function(resolve, reject) {
  130. var offerState = 'undefined';
  131. if (offer.isGlitched() || offer.state === 11 || escrowDays > 0) {
  132. offerState = 'denegable';
  133. return resolve(offerState);
  134. } else if (offer.partner.getSteamID64() === config.id_bossAccount) {
  135. offerState = 'aceptable';
  136. return resolve(offerState);
  137. } else if (offer.itemsToGive.length < 1) {
  138. offerState = 'aceptable';
  139. console.log('Donation =)');
  140. return resolve(offerState);
  141.  
  142. } else {
  143. offerState = 'valida';
  144. return resolve(offerState);
  145. }
  146. })
  147. }
  148. const finishTradeOffer = function(offer, offerState) {
  149. switch (offerState) {
  150. case 'aceptable':
  151. return acceptTradeOffer(offer);
  152. case 'denegable':
  153. return declineTradeOffer(offer);
  154. case 'valida':
  155. return identifyItems(offer).then(function(offerState) {
  156. return finishTradeOffer(offer, offerState);
  157. });
  158. default:
  159. return Promise.reject();
  160. }
  161.  
  162. }
  163. const identifyItems = function(offer) {
  164. var getValueToGive = getValueItemsToGive(offer);
  165. var getValueToReceive = getValueItemsToReceive(offer);
  166. return Promise.all([getValueToGive, getValueToReceive])
  167. .then((results) => {
  168. return determinateOfferState(results[0], results[1]);
  169. }).catch(err => {
  170. if (arrayOfObjects.length > 0) {
  171. arrayOfObjects.splice(0, 1)
  172. }
  173. busy = false;
  174. })
  175. }
  176. const getUserDetalles = function(offer) {
  177. return new Promise(function(resolve, reject) {
  178. offer.getUserDetails(function(err, me, them) {
  179. if (them) {
  180. return resolve(them.escrowDays);
  181. } else {
  182. return reject();
  183. }
  184. })
  185. })
  186. }
  187. const determinateOfferState = function(valueToGive, valueToReceive) {
  188. var ToGive = getRight(valueToGive);
  189. var ToReceive = getRight(valueToReceive);
  190.  
  191. if (ToReceive >= ToGive) {
  192. console.log('Items to Give have a value of :'.bgRed + ToGive);
  193. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  194. offerState = 'aceptable';
  195. return Promise.resolve(offerState);
  196. } else {
  197. console.log('Items to Give have a value of :'.bgRed + ToGive);
  198. console.log('Items to Receive have a value of :'.bgGreen + ToReceive);
  199. offerState = 'denegable';
  200. return Promise.resolve(offerState);
  201. }
  202. }
  203. const getValueItemsToGive = function(offer) {
  204. return new Promise(function(resolve, reject) {
  205. var filename = './DBPrices.json';
  206. var type = 'utf8';
  207. ReadAndWrite.readDataBase(filename, type)
  208. .then(function(database) {
  209. var promises = [];
  210. var arrItemsToGive = offer.itemsToGive;
  211.  
  212. for (var i = 0; i < arrItemsToGive.length; i++) {
  213.  
  214. var buying = false;
  215.  
  216. promises.push(getValueOfEachItem(database, arrItemsToGive[i], buying));
  217. }
  218. Promise.all(promises)
  219. .then((outgoingValue) => {
  220. return sumValues(outgoingValue);
  221. }).then(function(valueToGive) {
  222. return resolve(valueToGive);
  223. }).catch(err =>
  224. console.log(err));
  225. })
  226. })
  227.  
  228. }
  229. const getValueItemsToReceive = function(offer) {
  230. return new Promise(function(resolve, reject) {
  231. var filename = './DBPrices.json';
  232. var type = 'utf8';
  233. ReadAndWrite.readDataBase(filename, type)
  234. .then(function(database) {
  235.  
  236. var arrItemsToReceive = offer.itemsToReceive;
  237. var promises = [];
  238. for (var i in arrItemsToReceive) {
  239. var buying = true;
  240.  
  241. promises.push(getValueOfEachItem(database, arrItemsToReceive[i], buying))
  242. }
  243. Promise.all(promises)
  244. .then((incomingValue) => {
  245. return sumValues(incomingValue);
  246. }).then(function(valueToReceive) {
  247. return resolve(valueToReceive);
  248. }).catch(err => console.log(err));
  249. })
  250. })
  251.  
  252. }
  253. const getValueOfEachItem = function(database, object, buying) {
  254.  
  255. return new Promise(function(resolve, reject) {
  256.  
  257. setItemDetails(object)
  258. .then((item) => {
  259. if (!buying) {
  260. if (currencies[item.name]) {
  261. return resolve(currencies[item.name].value);
  262. } else if (database[item.name]) {
  263. if (database[item.name].craftable == item.craft) {
  264. return resolve(database[item.name].sell);
  265. } else {
  266. console.log(item.name + item.craft);
  267. return resolve(999999);
  268. }
  269. } else {
  270. console.log(item.name + 'User is taking an unkown item from us');
  271. return resolve(999999);
  272. }
  273. } else {
  274. if (item.appid != '440') {
  275. console.log('User is giving us an item from other Steam Game');
  276. return resolve(0);
  277. } else {
  278. if (currencies[item.name]) {
  279. return resolve(currencies[item.name].value);
  280. } else if (database[item.name]) {
  281. if (database[item.name].craftable == item.craft) {
  282.  
  283. return resolve(database[item.name].buy)
  284.  
  285. } else {
  286. console.log('Item name in DBPrices with no coincidence in craft');
  287.  
  288. console.log(item.name + item.craft);
  289. return resolve(0);
  290. }
  291. } else {
  292. console.log('User is giving us an unknown item. add to DBPrices');
  293. console.log(item.name + item.craft);
  294. return resolve(0);
  295.  
  296. }
  297. }
  298. }
  299. })
  300.  
  301.  
  302. })
  303. }
  304.  
  305. const setItemDetails = function(object) {
  306. return new Promise(function(resolve, reject) {
  307. var item ={};
  308. var desc = object.descriptions;
  309. item.appid = object.appid;
  310. item.name = object.market_hash_name;
  311. item.craft = 'Craftable';
  312. var found = desc.some(function(el) {
  313. return el.value === '( Not Usable in Crafting )'
  314. });
  315. if (found) {
  316. item.craft = 'Non-Craftable';
  317. }
  318. return resolve(item);
  319.  
  320.  
  321. })
  322. }
  323. const sumValues = function(arrNumbers) {
  324. return new Promise(function(resolve, reject) {
  325. if (arrNumbers.length > 0) {
  326. const sum = arrNumbers.reduce((total, amount) => total + amount);
  327. return resolve(sum);
  328. } else {
  329. return resolve(0);
  330. }
  331. })
  332. }
  333.  
  334. function getRight(v) {
  335.  
  336. var i = Math.floor(v),
  337. f = Math.round((v - i) / 0.11);
  338. return i + (f === 9 || f * 0.11);
  339.  
  340. }
  341. const acceptTradeOffer = function(offer) {
  342.  
  343. offer.accept(false, function(error, status) {
  344. if (error) {
  345. console.log(`\nError: Failed to accept the trade offer #${offer.id}\n`);
  346. console.log(error);
  347. return Promise.reject();
  348.  
  349. } else if (status === 'pending') {
  350. console.log(`StatusMsg : The trade offer #${offer.id} is accepted but needs confirmation`);
  351.  
  352. community.acceptConfirmationForObject(config.identity_secret, offer.id, function(error) {
  353.  
  354. if (error) {} else {
  355. console.log(`StatusMsg : The trade offer #${offer.id} is confirmed`.green);
  356. return Promise.resolve();
  357. }
  358. });
  359.  
  360. } else {
  361. console.log(`StatusMsg : The trade offer #${offer.id} is accepted`.green);
  362. return Promise.resolve();
  363. }
  364. });
  365.  
  366. }
  367. const declineTradeOffer = function(offer) {
  368.  
  369. offer.decline(function(error) {
  370.  
  371. if (error) {
  372. console.log(`\nError: Failed to decline the trade offer #${offer.id}\n`);
  373. console.log(error);
  374. declineTradeOffer(offer);
  375. } else {
  376. console.log(`StatusMsg : The trade offer #${offer.id} is declined`.red);
  377. return Promise.resolve();
  378. }
  379.  
  380.  
  381. });
  382. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement