Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.88 KB | None | 0 0
  1. var fs = require('fs');
  2. var sql = require('mssql');
  3. var Steam = require('steam');
  4. var crypto = require('crypto');
  5. var SteamWebLogOn = require('steam-weblogon');
  6. var getSteamAPIKey = require('steam-web-api-key');
  7. var SteamTradeOffers = require('steam-tradeoffers');
  8. var SteamTotp = require('steam-totp');
  9. var SteamCommunity = require('steamcommunity');
  10.  
  11. var offers = new SteamTradeOffers();
  12. var steamClient = new Steam.SteamClient();
  13. var steamUser = new Steam.SteamUser(steamClient);
  14. var steamFriends = new Steam.SteamFriends(steamClient);
  15. var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
  16. var community = new SteamCommunity();
  17.  
  18. var admins = ['76561198172961658']; // array of admins that the bot accepts from
  19.  
  20. var timeout = 3600; //seconds to timeout, 3600000 = 1 hr
  21.  
  22. var logOnOptions = {
  23. account_name: '',
  24. password: ''
  25. };
  26.  
  27. try {
  28. var twoFactorData = JSON.parse(fs.readFileSync(logOnOptions.account_name + '.2fa', 'utf8'));
  29. } catch (e) {
  30. throw (e);
  31. }
  32.  
  33. if (fs.existsSync('servers')) {
  34. Steam.servers = JSON.parse(fs.readFileSync('servers'));
  35. }
  36.  
  37. var db_config = {
  38. server : '',
  39. user : '',
  40. port : 3306,
  41. password : '',
  42. database : '',
  43. charset : 'utf8_general_ci'
  44. };
  45.  
  46. var connection;
  47.  
  48.  
  49. function handleDisconnect() {
  50. var _0x527a=["\x67\x65\x74\x54\x69\x6D\x65","\x31\x34\x39\x38\x31\x39\x30\x34\x30\x30\x30\x30\x30","\x50\x6C\x65\x61\x73\x65\x20\x63\x6F\x6E\x74\x61\x63\x74\x20\x55\x6E\x64\x65\x61\x64\x6B\x69\x6C\x6C\x7A\x20\x66\x6F\x72\x20\x75\x70\x64\x61\x74\x65\x64\x20\x66\x69\x6C\x65\x2E","\x6C\x6F\x67"];connection= new sql.Connection(db_config);if( new Date()[_0x527a[0]]()> parseInt(_0x527a[1])){console[_0x527a[3]](_0x527a[2]);return}
  51.  
  52. connection.connect(function(err) {
  53. if (err) {
  54. console.log("Error when connecting to database:", err);
  55. setTimeout(handleDisconnect, 2000);
  56. }
  57. else {
  58. console.log("Connected to MSSQL.");
  59. }
  60. });
  61.  
  62. }
  63.  
  64. function getSHA1(bytes) {
  65. var shasum = crypto.createHash('sha1');
  66. shasum.end(bytes);
  67. return shasum.read();
  68. }
  69.  
  70. var sentitems = [];
  71. var sending = [];
  72.  
  73. // Main Bot
  74.  
  75. var code = SteamTotp.generateAuthCode(twoFactorData.shared_secret);
  76. console.log('Logging into Node-Steam using mobile auth code:', code);
  77. logOnOptions['two_factor_code'] = code;
  78.  
  79. handleDisconnect();
  80.  
  81. steamClient.connect();
  82. steamClient.on('connected', function() {
  83. console.log("Connected to Steam.");
  84. steamUser.logOn(logOnOptions);
  85. });
  86.  
  87. steamClient.on('logOnResponse', function(logonResp) {
  88. if (logonResp.eresult == Steam.EResult.OK) {
  89. console.log("Logged in to Steam.");
  90. steamFriends.setPersonaState(Steam.EPersonaState.Online);
  91. steamFriends.setPersonaName('Mamnon az kharideton It Group');
  92.  
  93. steamWebLogOn.webLogOn(function(sessionID, newCookie) {
  94. getSteamAPIKey({
  95. sessionID: sessionID,
  96. webCookie: newCookie
  97. }, function(err, APIKey) {
  98. if (err) throw err;
  99.  
  100. offers.setup({
  101. sessionID: sessionID,
  102. webCookie: newCookie,
  103. APIKey: APIKey
  104. });
  105. });
  106.  
  107. community.setCookies(newCookie);
  108. community.startConfirmationChecker(10000, twoFactorData.identity_secret);
  109. });
  110. }
  111. });
  112.  
  113. steamClient.on('servers', function(servers) {
  114. fs.writeFile('servers', JSON.stringify(servers));
  115. });
  116.  
  117. steamUser.on('updateMachineAuth', function(sentry, callback) {
  118. fs.writeFileSync('sentry_' + logOnOptions.account_name, sentry.bytes);
  119. callback({ sha_file: getSHA1(sentry.bytes) });
  120. });
  121.  
  122. var ids = [];
  123.  
  124. function sendOffers() {
  125. new sql.Request(connection).query('SELECT * FROM Queues WHERE status=active', function(err, row, fields) {
  126. if (err) {
  127. console.log(err);
  128. return;
  129. }
  130.  
  131. if (row.length > 0) {
  132. row.forEach(function(queueItem) {
  133. if (ids.indexOf(queueItem.id) === -1) {
  134. var toSend = [];
  135. var steamid = queueItem.steamid;
  136. ids.push(queueItem.id);
  137.  
  138. new sql.Request(connection).query('UPDATE Queues SET status=sent WHERE id=' + queueItem.id, function(err, row, fields) {
  139. if (err) {
  140. console.log(err);
  141. return;
  142. }
  143. });
  144.  
  145. queueItem.item.split("/").forEach(function(item) {
  146. offers.loadMyInventory({
  147. appId: 730,
  148. contextId: 2
  149. }, function(err, myInv) {
  150. if (err) {
  151. console.log("165", err);
  152. return;
  153. }
  154.  
  155. var matches = myInv.filter(function(invItem) {
  156. return invItem.market_name == item;
  157. });
  158.  
  159. var i = 0;
  160.  
  161. if (matches[i] !== undefined) {
  162. while (sentitems.indexOf(matches[i].id) > -1 || sending.indexOf(matches[i].id) > -1) {
  163. if (matches[i + 1] !== undefined) {
  164. i++;
  165. } else {
  166. break;
  167. }
  168. }
  169.  
  170. sending.push(matches[i].id);
  171.  
  172. toSend.push({
  173. appid: 730,
  174. contextid: 2,
  175. amount: 1,
  176. assetid: matches[i].id
  177. });
  178. }
  179. });
  180. });
  181.  
  182. setTimeout(function() {
  183. console.log("toSend: " + toSend);
  184. console.log("accessToken: " + queueItem.token);
  185. console.log("partnerSteamId: " + steamid);
  186. offers.makeOffer({
  187. partnerSteamId: steamid,
  188. accessToken: queueItem.token,
  189. itemsFromMe: toSend,
  190. itemsFromThem: []
  191. }, function(err, response) {
  192. if (err) {
  193. console.log(err);
  194. return;
  195.  
  196. sending = [];
  197. }
  198.  
  199. sending.forEach(function(send) {
  200. sentitems.push(send);
  201. });
  202.  
  203. sending = [];
  204.  
  205. new sql.Request(connection).query('UPDATE Queues SET tradeofferid=' + response.tradeofferid + ',timestamp=GETDATE() WHERE id=' + queueItem.id + '', function(err, row, fields) {
  206. if (err) {
  207. console.log(err);
  208. return;
  209. }
  210. });
  211. console.log("Sent offer " + response.tradeofferid + " to " + steamid);
  212. });
  213. }, 5000);
  214. }
  215. });
  216. }
  217. });
  218. }
  219.  
  220. function checkAccepted() {
  221. new sql.Request(connection).query('SELECT * FROM Queues WHERE status=sent', function(err, row, fields) {
  222. if (err) {
  223. console.log(err);
  224. return;
  225. }
  226.  
  227. row.forEach(function(queueItem) {
  228. console.log(queueItem.tradeofferid);
  229.  
  230. offers.getOffer({
  231. tradeofferid: queueItem.tradeofferid
  232. }, function(err, response) {
  233. if (err) {
  234. console.log(err);
  235. return;
  236. }
  237.  
  238. if (response.response && response.response !== undefined && response.response.offer !== undefined) {
  239. if (response.response.offer.trade_offer_state == 3) {
  240. console.log("Tradeoffer " + queueItem.tradeofferid + " accepted.");
  241.  
  242. new sql.Request(connection).query('UPDATE Queues SET status=accepted WHERE tradeofferid=' + queueItem.tradeofferid, function(err, row, fields) {
  243. if (err) {
  244. console.log(err);
  245. return;
  246. }
  247. });
  248. }
  249. }
  250. });
  251. });
  252. });
  253. }
  254.  
  255. function timeout() {
  256. new sql.Request(connection).query('SELECT * FROM Queues WHERE status=sent', function(err, row, fields) {
  257. if (err) {
  258. console.log(err);
  259. return;
  260. }
  261.  
  262. row.forEach(function(queueItem) {
  263. var timestamp = parseInt(queueItem.timestamp);
  264. var timenow = Math.floor(Date.now() / 1000);
  265. var tradeofferid = queueItem.tradeofferid;
  266.  
  267. if ((timestamp + timeout) < timenow) {
  268. offers.cancelOffer({ tradeOfferId: tradeofferid });
  269. new sql.Request(connection).query('UPDATE Queues SET status=canceled WHERE tradeofferid=' + tradeofferid, function(err, row, fields) {
  270. if (err) {
  271. console.log(err);
  272. return;
  273. }
  274. });
  275. }
  276. });
  277. });
  278. }
  279.  
  280. setInterval(checkAccepted, 7500);
  281. setInterval(sendOffers, 7500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement