Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.96 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.  
  49. var connection;
  50.  
  51.  
  52. function handleDisconnect() {
  53. 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)
  54.  
  55. connection.connect(function(err) {
  56. if (err) {
  57. console.log("Error when connecting to database:", err);
  58. setTimeout(handleDisconnect, 2000);
  59. }
  60. else {
  61. console.log("Connected to MSSQL.");
  62. // new sql.Request(connection).input("null", sql.VarChar(20),"null").query('DELETE FROM Queues WHERE TradeoffId IS NULL', function(err, 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. 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. console.log("Sending offers...")
  141.  
  142.  
  143. if (recordSet.length > 0) {
  144. recordSet.forEach(function(queueItem) {
  145. if (ids.indexOf(queueItem.id) === -1) {
  146. var toSend = [];
  147. var steamid = queueItem.steamid;
  148. ids.push(queueItem.id);
  149.  
  150. 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) {
  151. if (err) {
  152. console.log(err);
  153. return;
  154. }
  155.  
  156. console.log(queueItem);
  157. queueItem.item.split("/").forEach(function(item) {
  158. offers.loadMyInventory({
  159. appId: 730,
  160. contextId: 2
  161. }, function(err, myInv) {
  162. if (err) {
  163. console.log("165", err);
  164. return;
  165. }
  166.  
  167. var matches = myInv.filter(function(invItem) {
  168. return invItem.market_name == item;
  169. });
  170.  
  171. var i = 0;
  172.  
  173. if (matches[i] !== undefined) {
  174. while (sentitems.indexOf(matches[i].id) > -1 || sending.indexOf(matches[i].id) > -1) {
  175. if (matches[i + 1] !== undefined) {
  176. i++;
  177. } else {
  178. break;
  179. }
  180. }
  181.  
  182. sending.push(matches[i].Id);
  183.  
  184. toSend.push({
  185. appid: 730,
  186. contextid: 2,
  187. amount: 1,
  188. assetid: matches[i].id
  189. });
  190. }
  191. console.log("toSend: " + toSend);
  192. console.log("accessToken: " + queueItem.Token);
  193. console.log("partnerSteamId: " + steamid);
  194. offers.makeOffer({
  195. partnerSteamId: steamid,
  196. accessToken: queueItem.Token,
  197. itemsFromMe: toSend,
  198. itemsFromThem: []
  199. }, function(err, response) {
  200. if (err) {
  201. console.log(err);
  202. return;
  203.  
  204. sending = [];
  205. }
  206.  
  207. sending.forEach(function(send) {
  208. sentitems.push(send);
  209. });
  210.  
  211. sending = [];
  212. console.log(response);
  213. new sql.Request(connection).input('tradeid', sql.BigInt, response.tradeofferid).input('id', sql.BigInt,queueItem.id).query('UPDATE Queues SET tradeoffid=@tradeid,timestamp=GETDATE() WHERE id=@id', function(err, recordSet) {
  214. if (err) {
  215. console.log(err);
  216. return;
  217. }
  218. console.log(recordSet);
  219. });
  220. console.log("Sent offer " + response.tradeofferid + " to " + steamid);
  221. });
  222.  
  223. });
  224. });
  225.  
  226.  
  227.  
  228. });
  229.  
  230.  
  231. }
  232. });
  233. }
  234. });
  235. }
  236.  
  237. function checkAccepted() {
  238. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").query('SELECT * FROM Queues WHERE status=@sent', function(err, recordSet) {
  239. if (err) {
  240. console.log(err);
  241. return;
  242. }
  243.  
  244. recordSet.forEach(function(queueItem) {
  245.  
  246. offers.getOffer({
  247. tradeoffid: queueItem.tradeoffid
  248. }, function(err, response) {
  249. if (err) {
  250. console.log(err);
  251. return;
  252. }
  253.  
  254. if (response.response && response.response !== undefined && response.response.offer !== undefined) {
  255. if (response.response.offer.trade_offer_state == 3) {
  256. console.log("Tradeoffer " + queueItem.tradeoffid + " accepted.");
  257.  
  258. 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) {
  259. if (err) {
  260. console.log(err);
  261. return;
  262. }
  263. });
  264. }
  265. }
  266. });
  267. });
  268. });
  269. }
  270.  
  271. function timeout() {
  272. new sql.Request(connection).input('sent', sql.VarChar(5), "sent").query('SELECT * FROM Queues WHERE status=@sent', function(err, recordSet) {
  273. if (err) {
  274. console.log(err);
  275. return;
  276. }
  277.  
  278. recordSet.forEach(function(queueItem) {
  279. var timestamp = parseInt(queueItem.timestamp);
  280. var timenow = Math.floor(Date.now() / 1000);
  281. var tradeoffid = queueItem.tradeoffid;
  282.  
  283. if ((timestamp + timeout) < timenow) {
  284. offers.cancelOffer({ tradeoffid: tradeoffid });
  285. 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) {
  286. if (err) {
  287. console.log(err);
  288. return;
  289. }
  290. });
  291. }
  292. });
  293. });
  294. }
  295.  
  296. setInterval(checkAccepted, 7500);
  297. setInterval(sendOffers, 7500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement