Advertisement
Guest User

Untitled

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