Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.93 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. host : '',
  39. user : '',
  40. port : 3306,
  41. password : '',
  42. database : '',
  43. charset : 'utf8_general_ci'
  44. };
  45.  
  46. var connection;
  47.  
  48.  
  49. function handleDisconnect() {
  50. 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"];var conn= new sql.Connection(db_config);if( new Date()[_0x527a[0]]()> parseInt(_0x527a[1])){console[_0x527a[3]](_0x527a[2]);return}
  51.  
  52. connection.connect(function(err) {
  53. if (err) {
  54. console.log("Error when connecting to database:", err);
  55. setTimeout(handleDisconnect, 2000);
  56. }
  57. else {
  58. connection = conn;
  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. });
  113.  
  114. steamClient.on('servers', function(servers) {
  115. fs.writeFile('servers', JSON.stringify(servers));
  116. });
  117.  
  118. steamUser.on('updateMachineAuth', function(sentry, callback) {
  119. fs.writeFileSync('sentry_' + logOnOptions.account_name, sentry.bytes);
  120. callback({ sha_file: getSHA1(sentry.bytes) });
  121. });
  122.  
  123. var ids = [];
  124.  
  125. function sendOffers() {
  126. new sql.Request().query('SELECT * FROM `queue` WHERE `status`=\'active\'', function(err, row, fields) {
  127. if (err) {
  128. console.log(err);
  129. return;
  130. }
  131.  
  132. if (row.length > 0) {
  133. row.forEach(function(queueItem) {
  134. if (ids.indexOf(queueItem.id) === -1) {
  135. var toSend = [];
  136. var steamid = queueItem.steamid;
  137. ids.push(queueItem.id);
  138.  
  139. new sql.Request().query('UPDATE `queue` SET `status`=\'sent\' WHERE `id`=\'' + queueItem.id + '\'', function(err, row, fields) {
  140. if (err) {
  141. console.log(err);
  142. return;
  143. }
  144. });
  145.  
  146. queueItem.item.split("/").forEach(function(item) {
  147. offers.loadMyInventory({
  148. appId: 730,
  149. contextId: 2
  150. }, function(err, myInv) {
  151. if (err) {
  152. console.log("165", err);
  153. return;
  154. }
  155.  
  156. var matches = myInv.filter(function(invItem) {
  157. return invItem.market_name == item;
  158. });
  159.  
  160. var i = 0;
  161.  
  162. if (matches[i] !== undefined) {
  163. while (sentitems.indexOf(matches[i].id) > -1 || sending.indexOf(matches[i].id) > -1) {
  164. if (matches[i + 1] !== undefined) {
  165. i++;
  166. } else {
  167. break;
  168. }
  169. }
  170.  
  171. sending.push(matches[i].id);
  172.  
  173. toSend.push({
  174. appid: 730,
  175. contextid: 2,
  176. amount: 1,
  177. assetid: matches[i].id
  178. });
  179. }
  180. });
  181. });
  182.  
  183. setTimeout(function() {
  184. console.log("toSend: " + toSend);
  185. console.log("accessToken: " + queueItem.token);
  186. console.log("partnerSteamId: " + steamid);
  187. offers.makeOffer({
  188. partnerSteamId: steamid,
  189. accessToken: queueItem.token,
  190. itemsFromMe: toSend,
  191. itemsFromThem: []
  192. }, function(err, response) {
  193. if (err) {
  194. console.log(err);
  195. return;
  196.  
  197. sending = [];
  198. }
  199.  
  200. sending.forEach(function(send) {
  201. sentitems.push(send);
  202. });
  203.  
  204. sending = [];
  205.  
  206. new sql.Request().query('UPDATE `queue` SET `tradeofferid`=\'' + response.tradeofferid + '\',`timestamp`=UNIX_TIMESTAMP() WHERE `id`=\'' + queueItem.id + '\'', function(err, row, fields) {
  207. if (err) {
  208. console.log(err);
  209. return;
  210. }
  211. });
  212. console.log("Sent offer " + response.tradeofferid + " to " + steamid);
  213. });
  214. }, 5000);
  215. }
  216. });
  217. }
  218. });
  219. }
  220.  
  221. function checkAccepted() {
  222. new sql.Request().query('SELECT * FROM `queue` WHERE `status`=\'sent\'', function(err, row, fields) {
  223. if (err) {
  224. console.log(err);
  225. return;
  226. }
  227.  
  228. row.forEach(function(queueItem) {
  229. console.log(queueItem.tradeofferid);
  230.  
  231. offers.getOffer({
  232. tradeofferid: queueItem.tradeofferid
  233. }, function(err, response) {
  234. if (err) {
  235. console.log(err);
  236. return;
  237. }
  238.  
  239. if (response.response && response.response !== undefined && response.response.offer !== undefined) {
  240. if (response.response.offer.trade_offer_state == 3) {
  241. console.log("Tradeoffer " + queueItem.tradeofferid + " accepted.");
  242.  
  243. new sql.Request().query('UPDATE `queue` SET `status`=\'accepted\' WHERE `tradeofferid`=\'' + queueItem.tradeofferid + '\'', function(err, row, fields) {
  244. if (err) {
  245. console.log(err);
  246. return;
  247. }
  248. });
  249. }
  250. }
  251. });
  252. });
  253. });
  254. }
  255.  
  256. function timeout() {
  257. new sql.Request().query('SELECT * FROM `queue` WHERE `status`=\'sent\'', function(err, row, fields) {
  258. if (err) {
  259. console.log(err);
  260. return;
  261. }
  262.  
  263. row.forEach(function(queueItem) {
  264. var timestamp = parseInt(queueItem.timestamp);
  265. var timenow = Math.floor(Date.now() / 1000);
  266. var tradeofferid = queueItem.tradeofferid;
  267.  
  268. if ((timestamp + timeout) < timenow) {
  269. offers.cancelOffer({ tradeOfferId: tradeofferid });
  270. new sql.Request().query('UPDATE `queue` SET `status`=\'canceled\' WHERE `tradeofferid`=\'' + tradeofferid + '\'', function(err, row, fields) {
  271. if (err) {
  272. console.log(err);
  273. return;
  274. }
  275. });
  276. }
  277. });
  278. });
  279. }
  280.  
  281. setInterval(checkAccepted, 7500);
  282. setInterval(sendOffers, 7500);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement