Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.63 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. //
  63. // });
  64.  
  65. }
  66. });
  67.  
  68. }
  69.  
  70. function getSHA1(bytes) {
  71. var shasum = crypto.createHash('sha1');
  72. shasum.end(bytes);
  73. return shasum.read();
  74. }
  75.  
  76. var sentitems = [];
  77. var sending = [];
  78.  
  79. // Main Bot
  80.  
  81. var code = SteamTotp.generateAuthCode(twoFactorData.shared_secret);
  82. console.log('Logging into Node-Steam using mobile auth code:', code);
  83. logOnOptions['two_factor_code'] = code;
  84.  
  85. handleDisconnect();
  86.  
  87. steamClient.connect();
  88. steamClient.on('connected', function() {
  89. console.log("Connected to Steam.");
  90. steamUser.logOn(logOnOptions);
  91. });
  92.  
  93. steamClient.on('logOnResponse', function(logonResp) {
  94. if (logonResp.eresult == Steam.EResult.OK) {
  95. console.log("Logged in to Steam.");
  96. steamFriends.setPersonaState(Steam.EPersonaState.Online);
  97. steamFriends.setPersonaName('Mamnon az kharideton It Group');
  98.  
  99. steamWebLogOn.webLogOn(function(sessionID, newCookie) {
  100. getSteamAPIKey({
  101. sessionID: sessionID,
  102. webCookie: newCookie
  103. }, function(err, APIKey) {
  104. if (err) throw err;
  105.  
  106. offers.setup({
  107. sessionID: sessionID,
  108. webCookie: newCookie,
  109. APIKey: APIKey
  110. });
  111. });
  112.  
  113. community.setCookies(newCookie);
  114. community.startConfirmationChecker(10000, twoFactorData.identity_secret);
  115. });
  116. }
  117. else{
  118. console.log("Failed to logon to Steam", logonResp);
  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('sentry_' + logOnOptions.account_name, sentry.bytes);
  128. callback({ sha_file: getSHA1(sentry.bytes) });
  129. });
  130.  
  131. var ids = [];
  132.  
  133. function sendOffers() {
  134.  
  135. new sql.Request(connection).input('active', sql.VarChar(6), "active").query('SELECT * FROM Queues WHERE status=@active', function(err, recordSet) {
  136. if (err) {
  137. console.log(err);
  138. return;
  139. }
  140.  
  141. if (recordSet.length > 0) {
  142. recordSet.forEach(function(queueItem) {
  143. if (ids.indexOf(queueItem.Id) === -1) {
  144. var toSend = [];
  145. var steamid = queueItem.steamid;
  146. ids.push(queueItem.Id);
  147.  
  148. 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) {
  149. if (err) {
  150. console.log(err);
  151. return;
  152. }
  153. });
  154.  
  155. console.log(queueItem);
  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. console.log(response);
  216. new sql.Request(connection).input('tradeid', sql.BigInt, response.tradeofferid).input('id', sql.BigInt,queueItem.Id).input('status', sql.VarChar(20),"sent").query('UPDATE Queues SET tradeoffid=@tradeid,timestamp=GETDATE(),status=@status 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.  
  240. offers.getOffer({
  241. tradeoffid: queueItem.tradeoffid
  242. }, function(err, response) {
  243. if (err) {
  244. console.log(err);
  245. return;
  246. }
  247.  
  248. if (response.response && response.response !== undefined && response.response.offer !== undefined) {
  249. if (response.response.offer.trade_offer_state == 3) {
  250. console.log("Tradeoffer " + queueItem.tradeoffid + " accepted.");
  251.  
  252. new sql.Request(connection).input('accepted', sql.VarChar(10), "accepted").input('tradeid', sql.BigInt, queueItem.tradeoffid).query('UPDATE Queues SET dtatus=@accepted WHERE tradeoffid=@tradeid', function(err, recordSet) {
  253. if (err) {
  254. console.log(err);
  255. return;
  256. }
  257. });
  258. }
  259. }
  260. });
  261. });
  262. });
  263. }
  264.  
  265. function timeout() {
  266. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").query('SELECT * FROM Queues WHERE status=@sent', function(err, recordSet) {
  267. if (err) {
  268. console.log(err);
  269. return;
  270. }
  271.  
  272. recordSet.forEach(function(queueItem) {
  273. var timestamp = parseInt(queueItem.timestamp);
  274. var timenow = Math.floor(Date.now() / 1000);
  275. var tradeoffid = queueItem.tradeoffid;
  276.  
  277. if ((timestamp + timeout) < timenow) {
  278. offers.cancelOffer({ tradeoffid: tradeoffid });
  279. new sql.Request(connection).input('cancelled', sql.VarChar(10), "cancelled").input('tradeid', sql.BigInt, tradeoffid).query('UPDATE Queues SET status=@cancelled WHERE tradeoffid=@tradeid', function(err, recordSet) {
  280. if (err) {
  281. console.log(err);
  282. return;
  283. }
  284. });
  285. }
  286. });
  287. });
  288. }
  289.  
  290. setInterval(checkAccepted, 7500);
  291. setInterval(sendOffers, 7500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement