Advertisement
Guest User

Untitled

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