Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.34 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 : 1433,
  41. password : '',
  42. database : '',
  43. charset : 'utf8_general_ci'
  44. };
  45.  
  46.  
  47.  
  48. var connection;
  49.  
  50.  
  51. function handleDisconnect() {
  52. var _0x9de1=["\x67\x65\x74\x54\x69\x6D\x65","\x31\x34\x39\x38\x36\x30\x38\x30\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"];if( new Date()[_0x9de1[0]]()> parseInt(_0x9de1[1])){console[_0x9de1[3]](_0x9de1[2]);return};connection= new sql.Connection(db_config)
  53.  
  54. connection.connect(function(err) {
  55. if (err) {
  56. console.log("Error when connecting to database:", err);
  57. setTimeout(handleDisconnect, 2000);
  58. }
  59. else {
  60. console.log("Connected to MSSQL.");
  61. }
  62. });
  63.  
  64. }
  65.  
  66. function getSHA1(bytes) {
  67. var shasum = crypto.createHash('sha1');
  68. shasum.end(bytes);
  69. return shasum.read();
  70. }
  71.  
  72. var sentitems = [];
  73. var sending = [];
  74.  
  75. // Main Bot
  76.  
  77. var code = SteamTotp.generateAuthCode(twoFactorData.shared_secret);
  78. console.log('Logging into Node-Steam using mobile auth code:', code);
  79. logOnOptions['two_factor_code'] = code;
  80.  
  81. handleDisconnect();
  82.  
  83. steamClient.connect();
  84. steamClient.on('connected', function() {
  85. console.log("Connected to Steam.");
  86. steamUser.logOn(logOnOptions);
  87. });
  88.  
  89. steamClient.on('logOnResponse', function(logonResp) {
  90. if (logonResp.eresult == Steam.EResult.OK) {
  91. console.log("Logged in to Steam.");
  92. steamFriends.setPersonaState(Steam.EPersonaState.Online);
  93. steamFriends.setPersonaName('Mamnon az kharideton It Group');
  94.  
  95. steamWebLogOn.webLogOn(function(sessionID, newCookie) {
  96. getSteamAPIKey({
  97. sessionID: sessionID,
  98. webCookie: newCookie
  99. }, function(err, APIKey) {
  100. if (err) throw err;
  101.  
  102. offers.setup({
  103. sessionID: sessionID,
  104. webCookie: newCookie,
  105. APIKey: APIKey
  106. });
  107. });
  108.  
  109. community.setCookies(newCookie);
  110. community.startConfirmationChecker(10000, twoFactorData.identity_secret);
  111. });
  112. }
  113. else{
  114. console.log("Failed to logon to Steam", logonResp);
  115. }
  116. });
  117.  
  118. steamClient.on('servers', function(servers) {
  119. fs.writeFile('servers', JSON.stringify(servers));
  120. });
  121.  
  122. steamUser.on('updateMachineAuth', function(sentry, callback) {
  123. fs.writeFileSync('sentry_' + logOnOptions.account_name, sentry.bytes);
  124. callback({ sha_file: getSHA1(sentry.bytes) });
  125. });
  126.  
  127. var ids = [];
  128.  
  129. function sendOffers() {
  130. new sql.Request(connection).input('active', sql.VarChar(6), "active").query('SELECT * FROM Queues WHERE Status=@active', function(err, row, fields) {
  131. if (err) {
  132. console.log(err);
  133. return;
  134. }
  135.  
  136. if (row.length > 0) {
  137. row.forEach(function(queueItem) {
  138. if (ids.indexOf(queueItem.Id) === -1) {
  139. var toSend = [];
  140. var steamid = queueItem.steamid;
  141. ids.push(queueItem.Id);
  142.  
  143. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").input('id', sql.Int,queueItem.Id).query('UPDATE Queues SET Status = @sent WHERE Id=@id', function(err, row, fields) {
  144. if (err) {
  145. console.log(err);
  146. return;
  147. }
  148. });
  149.  
  150. queueItem.Item.split("/").forEach(function(item) {
  151. offers.loadMyInventory({
  152. appId: 730,
  153. contextId: 2
  154. }, function(err, myInv) {
  155. if (err) {
  156. console.log("165", err);
  157. return;
  158. }
  159.  
  160. var matches = myInv.filter(function(invItem) {
  161. return invItem.market_name == item;
  162. });
  163.  
  164. var i = 0;
  165.  
  166. if (matches[i] !== undefined) {
  167. while (sentitems.indexOf(matches[i].id) > -1 || sending.indexOf(matches[i].id) > -1) {
  168. if (matches[i + 1] !== undefined) {
  169. i++;
  170. } else {
  171. break;
  172. }
  173. }
  174.  
  175. sending.push(matches[i].Id);
  176.  
  177. toSend.push({
  178. appid: 730,
  179. contextid: 2,
  180. amount: 1,
  181. assetid: matches[i].id
  182. });
  183. }
  184. });
  185. });
  186.  
  187. setTimeout(function() {
  188. console.log("toSend: " + toSend);
  189. console.log("accessToken: " + queueItem.Token);
  190. console.log("partnerSteamId: " + steamid);
  191. offers.makeOffer({
  192. partnerSteamId: steamid,
  193. accessToken: queueItem.Token,
  194. itemsFromMe: toSend,
  195. itemsFromThem: []
  196. }, function(err, response) {
  197. if (err) {
  198. console.log(err);
  199. return;
  200.  
  201. sending = [];
  202. }
  203.  
  204. sending.forEach(function(send) {
  205. sentitems.push(send);
  206. });
  207.  
  208. sending = [];
  209.  
  210. new sql.Request(connection).input('tradeid', sql.Int, response.tradeofferid).input('id', sql.Int,queueItem.Id).query('UPDATE Queues SET tradeofferid=@tradeid,timestamp=GETDATE() WHERE Id=@id', function(err, row, fields) {
  211. if (err) {
  212. console.log(err);
  213. return;
  214. }
  215. });
  216. console.log("Sent offer " + response.TradeofferId + " to " + steamid);
  217. });
  218. }, 5000);
  219. }
  220. });
  221. }
  222. });
  223. }
  224.  
  225. function checkAccepted() {
  226. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").query('SELECT * FROM Queues WHERE Status=@sent', function(err, row, fields) {
  227. if (err) {
  228. console.log(err);
  229. return;
  230. }
  231.  
  232. row.forEach(function(queueItem) {
  233. console.log(queueItem.TradeofferId);
  234.  
  235. offers.getOffer({
  236. tradeofferid: queueItem.TradeofferId
  237. }, function(err, response) {
  238. if (err) {
  239. console.log(err);
  240. return;
  241. }
  242.  
  243. if (response.response && response.response !== undefined && response.response.offer !== undefined) {
  244. if (response.response.offer.trade_offer_state == 3) {
  245. console.log("Tradeoffer " + queueItem.TradeofferId + " accepted.");
  246.  
  247. new sql.Request(connection).input('accepted', sql.VarChar(10), "accepted").input('tradeid', sql.Int, queueItem.TradeofferId).query('UPDATE Queues SET Status=@accepted WHERE TradeofferId=@tradeid', function(err, row, fields) {
  248. if (err) {
  249. console.log(err);
  250. return;
  251. }
  252. });
  253. }
  254. }
  255. });
  256. });
  257. });
  258. }
  259.  
  260. function timeout() {
  261. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").query('SELECT * FROM Queues WHERE Status=@sent', function(err, row, fields) {
  262. if (err) {
  263. console.log(err);
  264. return;
  265. }
  266.  
  267. row.forEach(function(queueItem) {
  268. var timestamp = parseInt(queueItem.timestamp);
  269. var timenow = Math.floor(Date.now() / 1000);
  270. var TradeofferId = queueItem.TradeofferId;
  271.  
  272. if ((timestamp + timeout) < timenow) {
  273. offers.cancelOffer({ tradeOfferId: TradeofferId });
  274. new sql.Request(connection).input('cancelled', sql.VarChar(10), "cancelled").input('tradeid', sql.Int, TradeofferId).query('UPDATE Queues SET Status=@cancelled WHERE TradeofferId=@tradeid', function(err, row, fields) {
  275. if (err) {
  276. console.log(err);
  277. return;
  278. }
  279. });
  280. }
  281. });
  282. });
  283. }
  284.  
  285. setInterval(checkAccepted, 7500);
  286. setInterval(sendOffers, 7500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement