Advertisement
Guest User

Untitled

a guest
Sep 19th, 2016
800
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.26 KB | None | 0 0
  1. /* START EDITING */
  2.  
  3. // Put your 64-bit SteamID here so the bot can accept your offers
  4. var fs = require('fs');
  5. var crypto = require('crypto');
  6.  
  7. var Steam = require('steam');
  8. var SteamID = require('steamid');
  9. var SteamWebLogOn = require('steam-weblogon');
  10. var getSteamAPIKey = require('steam-web-api-key');
  11. var SteamTradeOffers = require('steam-tradeoffers');
  12. var SteamGuard = require('steam-totp');
  13.  
  14. var SteamConfirm = require('steamcommunity-mobile-confirmations');
  15. var steamConfirm;
  16.  
  17. var mySteamID = ''; //STEAM ID OF THE BOT
  18. var sharedSecret = ""; //SHARED SECRET OF THE BOT
  19. var identitySecret = ""; //IDENTITY SECRET OF THE BOT
  20.  
  21. var SteamConnect = false;
  22.  
  23. steamConnect(true);
  24.  
  25. var logOnOptions = {
  26. account_name: "", //login
  27. password: "", //password
  28. sha_sentryfile: getSHA1(fs.readFileSync('sentry'))
  29. };
  30.  
  31. function steamTwoFactor(callback) {
  32. SteamGuard.getTimeOffset(function(err, offset, latency) {
  33. if(!err) {
  34. var two_factor = SteamGuard.generateAuthCode(sharedSecret, offset);
  35. callback(null, two_factor)
  36. } else {
  37. callback(new Error("getTimeOffset"))
  38. }
  39. });
  40. }
  41.  
  42. function steamConnect(type) {
  43. steamTwoFactor(function(err, two_factor) {
  44. if(!err) {
  45. logOnOptions.two_factor_code = two_factor;
  46. if(type) {
  47. steamClient.connect();
  48. }
  49. } else {
  50. steamConnect(type);
  51. }
  52. });
  53. }
  54.  
  55.  
  56.  
  57.  
  58. var sentryFileName = 'sentry'; // steam guard data file name
  59.  
  60. try {
  61. logOnOptions.sha_sentryfile = getSHA1(fs.readFileSync(sentryFileName));
  62. } catch (e) {
  63. if (authCode !== '') {
  64. logOnOptions.auth_code = authCode;
  65. }
  66. }
  67.  
  68. if(fs.existsSync('servers')) {
  69. Steam.servers = JSON.parse(fs.readFileSync('servers'));
  70. }
  71.  
  72. var steamClient = new Steam.SteamClient();
  73. var steamUser = new Steam.SteamUser(steamClient);
  74. var steamFriends = new Steam.SteamFriends(steamClient);
  75. var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
  76. var offers = new SteamTradeOffers();
  77.  
  78. steamClient.connect();
  79. steamClient.on('connected', function() {
  80. steamUser.logOn(logOnOptions);
  81. });
  82.  
  83. steamClient.on('logOnResponse', function(logonResp) {
  84. if(logonResp.eresult === Steam.EResult.OK) {
  85. console.log('Logged in!');
  86. steamFriends.setPersonaState(Steam.EPersonaState.Online);
  87. steamWebLogOn.webLogOn(function(sessionID, newCookie) {
  88. var loadSteamApiKey = function() {
  89. getSteamAPIKey({
  90. sessionID: sessionID,
  91. webCookie: newCookie
  92. }, function(err, APIKey) {
  93. if(!err) {
  94. SteamConnect = true;
  95. steamConfirm = new SteamConfirm({
  96. steamid: mySteamID,
  97. identity_secret: identitySecret,
  98. device_id: SteamGuard.getDeviceID(new SteamID(mySteamID)),
  99. webCookie: newCookie,
  100. });
  101. offers.setup({
  102. sessionID: sessionID,
  103. webCookie: newCookie,
  104. APIKey: APIKey
  105. });
  106. } else {
  107. setTimeout(function() {
  108. loadSteamApiKey();
  109. }, 2000);
  110. }
  111. });
  112. }
  113. loadSteamApiKey();
  114. });
  115. } else if(logonResp.eresult === Steam.EResult.AccountLoginDeniedNeedTwoFactor) {
  116. steamConnect(false);
  117. } else if(logonResp.eresult === Steam.EResult.TwoFactorActivationCodeMismatch) {
  118. steamConnect(false);
  119. }
  120. });
  121.  
  122. steamClient.on('servers', function(servers) {
  123. fs.writeFile('servers', JSON.stringify(servers));
  124. });
  125.  
  126. steamUser.on('updateMachineAuth', function(sentry, callback) {
  127. fs.writeFileSync(sentryFileName, sentry.bytes);
  128. callback({ sha_file: getSHA1(sentry.bytes) });
  129. });
  130.  
  131. steamUser.on('tradeOffers', function(number) {
  132. if (number > 0) {
  133. handleOffers();
  134. }
  135. });
  136.  
  137. function handleOffers() {
  138. offers.getOffers({
  139. get_received_offers: 1,
  140. active_only: 1,
  141. time_historical_cutoff: Math.round(Date.now() / 1000),
  142. get_descriptions: 1
  143. }, function(error, body) {
  144. if (error) {
  145. return log(error);
  146. }
  147.  
  148. if (
  149. body
  150. && body.response
  151. && body.response.trade_offers_received
  152. ) {
  153. var descriptions = {};
  154.  
  155. body.response.descriptions = body.response.descriptions || [];
  156.  
  157. body.response.descriptions.forEach(function (desc) {
  158. descriptions[
  159. desc.appid + ';' + desc.classid + ';' + desc.instanceid
  160. ] = desc;
  161. });
  162.  
  163. body.response.trade_offers_received.forEach(function (offer) {
  164. if (offer.trade_offer_state !== 2) {
  165. return;
  166. }
  167.  
  168. var offerMessage = 'Got an offer ' + offer.tradeofferid +
  169. ' from ' + offer.steamid_other + '\n';
  170.  
  171. if (offer.items_to_receive) {
  172. offerMessage += 'Items to receive: ' +
  173. offer.items_to_receive.map(function (item) {
  174. var desc = descriptions[
  175. item.appid + ';' + item.classid + ';' + item.instanceid
  176. ];
  177. return desc.name + ' (' + desc.type + ')';
  178. }).join(', ') + '\n';
  179. }
  180.  
  181. if (offer.items_to_give) {
  182. offerMessage += 'Items to give: ' +
  183. offer.items_to_give.map(function (item) {
  184. var desc = descriptions[
  185. item.appid + ';' + item.classid + ';' + item.instanceid
  186. ];
  187. return desc.name + ' (' + desc.type + ')';
  188. }).join(', ') + '\n';
  189. }
  190.  
  191. if (offer.message && offer.message !== '') {
  192. offerMessage += 'Message: ' + offer.message;
  193. }
  194.  
  195. log(offerMessage);
  196.  
  197. if (offer.steamid_other === admin || !offer.items_to_give) {
  198. offers.acceptOffer({
  199. tradeOfferId: offer.tradeofferid
  200. }, function (error, result) {
  201. if (error) {
  202. return log(error);
  203. }
  204.  
  205. log('Offer ' + offer.tradeofferid + ' accepted');
  206.  
  207. offers.getOffer({
  208. tradeofferid: offer.tradeofferid
  209. }, function (error, result) {
  210. if (error) {
  211. return log(error);
  212. }
  213.  
  214. if (result
  215. && result.response
  216. && result.response.offer
  217. && result.response.offer.tradeid
  218. ) {
  219. offers.getItems({
  220. tradeId: result.response.offer.tradeid
  221. }, function (error, result) {
  222. if (error) {
  223. return log(error);
  224. }
  225.  
  226. var items = 'Got items:\n' +
  227. result.map(function (item) {
  228. return 'http://steamcommunity.com/profiles/' +
  229. item.owner + '/inventory/#' +
  230. item.appid + '_' + item.contextid + '_' + item.id;
  231. }).join('\n');
  232.  
  233. log(items);
  234. });
  235. }
  236. });
  237. });
  238. } else {
  239. offers.declineOffer({
  240. tradeOfferId: offer.tradeofferid
  241. }, function (error, result) {
  242. if (error) {
  243. return log(error);
  244. }
  245.  
  246. log('Offer ' + offer.tradeofferid + ' declined');
  247. });
  248. }
  249. });
  250. }
  251. });
  252. }
  253.  
  254. function log (message) {
  255. console.log(new Date().toString() + ' - ' + message);
  256. steamFriends.sendMessage(admin, message.toString());
  257. }
  258.  
  259. function getSHA1(bytes) {
  260. var shasum = crypto.createHash('sha1');
  261. shasum.end(bytes);
  262. return shasum.read();
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement