Advertisement
Guest User

Untitled

a guest
Mar 5th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.05 KB | None | 0 0
  1. var SteamCommunity = require('steamcommunity');
  2. var SteamTotp = require('steam-totp');
  3. var mysql = require('mysql');
  4. var log4js = require('log4js');
  5. var SteamTradeOffers = require('steam-tradeoffers');
  6. var async = require('async');
  7.  
  8. var pool = mysql.createPool({
  9. connectionLimit : 10,
  10. database: 'roulette',
  11. host: 'localhost',
  12. user: 'root',
  13. password: 'k4pp4aBMz'
  14. });
  15.  
  16. var community = new SteamCommunity();
  17. var offers = new SteamTradeOffers();
  18. log4js.configure({
  19. appenders: [
  20. { type: 'console' },
  21. { type: 'file', filename: 'logs/bot_'+process.argv[2]+'.log' }
  22. ]
  23. });
  24. var logger = log4js.getLogger();
  25.  
  26. var express = require('express');
  27. var app = express();
  28.  
  29.  
  30.  
  31. app.get('/KrZiF09MTtc4VKrSJkaRaPbm3eTiNu1eJjenO8kldlO6aQeOBEDQxKtKvXZo/', function (req, res) { //DEPOSIT
  32. var assetids = req.query['assetids'];
  33. assetids = assetids.split(',');
  34. var partner = req.query['partner'];
  35. var token = req.query['token'];
  36. var checksum = req.query['checksum'];
  37. var steamid = req.query['steamid'];
  38. var senditems = [];
  39. for(var i = 0; i < assetids.length; i++) {
  40. if(assetids[i] == "") continue;
  41. senditems.push({
  42. appid: 730,
  43. contextid: 2,
  44. assetid: assetids[i]
  45. });
  46. }
  47. var code = makecode();
  48. console.log(partner, token, checksum, assetids, senditems);
  49. offers.makeOffer({
  50. partnerAccountId: partner,
  51. accessToken: token,
  52. itemsFromThem: senditems,
  53. itemsFromMe: [],
  54. message: 'Code: '+code
  55. }, function(err, r) {
  56. if(err) {
  57. logger.error('Error sending trade');
  58. logger.debug(err);
  59. res.json({
  60. success: false,
  61. error: err.toString()
  62. });
  63. } else {
  64. offers.loadPartnerInventory({
  65. partnerSteamId: steamid,
  66. tradeOfferId: r.tradeofferid,
  67. appId: 730,
  68. contextId: 2,
  69. language: 'russian'
  70. }, function(err, rr) {
  71. if(err) {
  72. logger.debug(err);
  73. res.json({
  74. success: false,
  75. error: err.toString()
  76. });
  77. } else {
  78. var names = [];
  79. for(var i = 0; i < senditems.length; i++) {
  80. for(var a = 0; a < rr.length; a++) {
  81. if((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  82. names.push({market_hash_name: rr[a].market_hash_name, assetid: 0,icon_url: rr[a].icon_url});
  83. rr[a].ss = 1;
  84. continue;
  85. }
  86. }
  87. }
  88. res.json({
  89. success: true,
  90. code: code,
  91. amount: checksum,
  92. tid: r.tradeofferid,
  93. items: names
  94. });
  95. }
  96. });
  97. }
  98. });
  99. });
  100.  
  101. app.get('/zDJfyssnQKTdjBlhsI1ZbqXMiqqHCk3h7fPtk4oNRl9pCHjy6WCI1IutdAfG/', function (req, res) { //WITHDRAW
  102. var names = req.query['names'];
  103. names = names.split(',');
  104. var partner = req.query['partner'];
  105. var token = req.query['token'];
  106. var checksum = req.query['checksum'];
  107. offers.loadMyInventory({
  108. appId: 730,
  109. contextId: 2
  110. }, function(err, items) {
  111. if(err) {
  112. logger.error('Error sending trade');
  113. logger.debug(err);
  114. res.json({
  115. success: false,
  116. error: err.toString()
  117. });
  118. } else {
  119. var senditems = [];
  120. for(var i = 0; i < names.length; i++) {
  121. if(names[i] == "") continue;
  122. senditems.push({
  123. appid: 730,
  124. contextid: 2,
  125. assetid: names[i]
  126. });
  127. }
  128. var code = makecode();
  129. console.log(partner, token, checksum, names, senditems);
  130. offers.makeOffer({
  131. partnerAccountId: partner,
  132. accessToken: token,
  133. itemsFromThem: [],
  134. itemsFromMe: senditems,
  135. message: 'Code: '+code
  136. }, function(err, r) {
  137. if(err) {
  138. logger.error('Error sending trade');
  139. logger.debug(err);
  140. res.json({
  141. success: false,
  142. error: err.toString()
  143. });
  144. } else {
  145. res.json({
  146. success: true,
  147. code: code,
  148. amount: -checksum,
  149. tid: r.tradeofferid,
  150. state: 2
  151. });
  152. }
  153. });
  154. }
  155. });
  156. });
  157.  
  158. app.get('/DxsvabAv4sR85QyciiUO04dkQIWXcesA29P41eHHjfLZPR4Bh9mPSx4zGzP1/', function (req, res) { //CONFIRM
  159. var tid = req.query['tid'];
  160. offers.getOffer({
  161. tradeofferid: tid
  162. }, function(err, trade) {
  163. if(err) {
  164. logger.error('Error checking trade');
  165. logger.debug(err);
  166. res.json({
  167. success: false,
  168. error: err.toString()
  169. });
  170. } else {
  171. logger.debug(trade);
  172. if(trade.response.offer.trade_offer_state == 3) { //Wenn Trade fertig
  173.  
  174. offers.loadMyInventory({
  175. appId: 730,
  176. contextId: 2
  177. }, function(err, items) {
  178.  
  179. if(err) {
  180. res.json({
  181. success: false,
  182. error: 'Steam error, try again later.'
  183. });
  184. } else
  185. {
  186.  
  187. query('SELECT status FROM `trades` WHERE `id` = '+ tid, function(err6, res6)
  188. {
  189.  
  190. var tradeitemname, tradeitemid, inventoryitemname, inventoryitemassetid;
  191.  
  192.  
  193. if(res6[0].status == 0)
  194. { //DEPOSIT
  195.  
  196. query('SELECT * FROM `items` WHERE `trade` = '+ tid, function(errtradeitems, tradeitems)
  197. {
  198. console.log('loaded items: tradesize: '+ tradeitems.length +' inventorysize: ' + items.length);
  199.  
  200. for(var i = 0; i < tradeitems.length; i++) //every trade item
  201. {
  202.  
  203. tradeitemname = tradeitems[i].market_hash_name;
  204. tradeitemid = tradeitems[i].id;
  205.  
  206. console.log('tradeitem >>>>> ' + tradeitemname);
  207.  
  208. for(var a = 0; a < items.length; a++) //every item in the bot
  209. {
  210.  
  211. inventoryitemname = items[a].market_hash_name;
  212. inventoryitemassetid = items[a].id;
  213.  
  214. console.log('inventory <<<<< ' + inventoryitemname);
  215.  
  216. if(tradeitemname == inventoryitemname) //names are equal
  217. {
  218. console.log('names ======= equal');
  219.  
  220. var queryfunction = function (callback)
  221. {
  222. query('SELECT * FROM `items` WHERE `assetid` = '+ inventoryitemassetid, function(errassetidcheck, assetidcheck)
  223. {
  224. callback(null, assetidcheck.length);
  225. });
  226. }
  227. async.parallel([queryfunction], function (error_async, result_async)
  228. {
  229. if(result_async[0] == 0)
  230. {
  231. console.log('assetid not found: item: id = ' + tradeitemid +', name = '+ tradeitemname + ' inventory: name = ' + inventoryitemname +', assetid = '+ inventoryitemassetid);
  232. query('UPDATE items SET assetid = ' + inventoryitemassetid + ' WHERE id = '+ tradeitemid, function(error, result){
  233. if(error)
  234. {
  235. console.log('###########FATAL ERROR########');
  236. }
  237. });
  238.  
  239. inventoryitemname = "done";
  240. inventoryitemassetid = 0;
  241. console.log('it worked');
  242. } else
  243. {
  244. console.log(result_async[0]);
  245. console.log('assetid found: item: id = ' + tradeitemid +', name = '+ tradeitemname + ' inventory: name = ' + inventoryitemname +', assetid = '+ inventoryitemassetid);
  246. }
  247. });
  248. } else
  249. {
  250. console.log('names !!!!!!!! equal');
  251. }
  252. items[a].market_hash_name = inventoryitemname;
  253. items[a].id = inventoryitemassetid;
  254. }
  255. }
  256. });
  257. }
  258. });
  259. console.log('finished');
  260. //SUCCESS
  261. res.json({
  262. success: true,
  263. action: 'accept',
  264. result: 'Trade was successful.'
  265. });
  266. }
  267. });
  268. } else if(trade.response.offer.trade_offer_state == 7) {
  269. res.json({
  270. success: true,
  271. result: 'You are declined trade',
  272. action: 'cross'
  273. });
  274. } else {
  275. res.json({
  276. success: false,
  277. error: 'You are not accept trade'
  278. });
  279. }
  280. }
  281. });
  282. });
  283.  
  284.  
  285.  
  286. function cancelTrade(offerid) {
  287. offers.declineOffer({
  288. tradeOfferId: offerid
  289. }, function(err, log) {
  290. if (err) {
  291. logger.error('Не смогли отменить трейд #'+offerid);
  292. logger.debug(err);
  293. return;
  294. }
  295. logger.debug(log);
  296. logger.trace('Offer #'+offerid+' canceled');
  297. });
  298. }
  299.  
  300. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  301. if((err) || (!res[0])) {
  302. logger.error('Cant find account');
  303. process.exit(0);
  304. return;
  305. }
  306. account = res[0];
  307. app.listen(15987+account.id);
  308. logger.trace('We got account info');
  309. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  310. account.auth = false;
  311. logger.debug(account);
  312. community.login(account, login);
  313. });
  314.  
  315. community.on('confKeyNeeded', function(tag, callback) {
  316. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  317. });
  318.  
  319. community.on('newConfirmation', function(confirmation) {
  320. var time = time();
  321. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  322. confirmation.respond(time, key, true, function(err) {
  323. if(err) {
  324. logger.error('Error on mobile auth');
  325. logger.debug(err);
  326. return;
  327. }
  328. logger.trace('Trade sucesfully confirmed');
  329. });
  330. });
  331.  
  332. function query(sql, callback) {
  333. if (typeof callback === 'undefined') {
  334. callback = function() {};
  335. }
  336. pool.getConnection(function(err, connection) {
  337. if(err) return callback(err);
  338. logger.info('DB connection ID: '+connection.threadId);
  339. connection.query(sql, function(err, rows) {
  340. if(err) return callback(err);
  341. connection.release();
  342. return callback(null, rows);
  343. });
  344. });
  345. }
  346.  
  347. function login(err, sessionID, cookies, steamguard) {
  348. if(err) {
  349. logger.error('Auth error');
  350. logger.debug(err);
  351. if(err.message == "SteamGuardMobile") {
  352. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  353. logger.warn('Error in auth: '+account.twoFactorCode);
  354. setTimeout(function() {
  355. community.login(account, login);
  356. }, 5000);
  357. return;
  358. }
  359. process.exit(0);
  360. }
  361. logger.trace('Sucesfully auth');
  362. account.sessionID = sessionID;
  363. account.cookies = cookies;
  364. community.getWebApiKey('tmcrew.eu', webApiKey);
  365. community.startConfirmationChecker(10000, account.identity_secret);
  366. }
  367.  
  368. function webApiKey(err, key) {
  369. if(err) {
  370. logger.error('Cant make apikey')
  371. logger.debug(err);
  372. process.exit(0);
  373. return;
  374. }
  375. account.key = key;
  376. logger.trace('API key bot '+account.accountName+' '+account.key);
  377. offersSetup();
  378. community.loggedIn(checkLoggedIn);
  379. }
  380.  
  381. function offersSetup() {
  382. logger.trace('Loaded steam-tradeoffers');
  383. offers.setup({
  384. sessionID: account.sessionID,
  385. webCookie: account.cookies,
  386. APIKey: account.key
  387. });
  388. }
  389.  
  390. function checkLoggedIn(err, loggedIn, familyView) {
  391. if((err) || (!loggedIn)) {
  392. logger.error('We arent logged in')
  393. process.exit(0);
  394. } else {
  395. logger.trace('Logged in');
  396. account.auth = true;
  397. }
  398. }
  399.  
  400. function makecode() {
  401. var text = "";
  402. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  403.  
  404. for(var i=0; i < 5; i++)
  405. text += possible.charAt(Math.floor(Math.random() * possible.length));
  406.  
  407. return text;
  408. }
  409.  
  410. function time() {
  411. return parseInt(new Date().getTime()/1000)
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement