Advertisement
Guest User

Untitled

a guest
Mar 5th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.78 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` = '+ assetid, 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)
  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.  
  234. items[a].market_hash_name = "done";
  235. items[a].id = 0;
  236. console.log('it worked');
  237. } else
  238. {
  239. console.log(result_async);
  240. console.log('assetid found: item: id = ' + tradeitemid +', name = '+ tradeitemname + ' inventory: name = ' + inventoryitemname +', assetid = '+ inventoryitemassetid);
  241. }
  242. });
  243. } else
  244. {
  245. console.log('names !!!!!!!! equal');
  246. }
  247. }
  248. }
  249. });
  250. }
  251. });
  252. console.log('finished');
  253. //SUCCESS
  254. res.json({
  255. success: true,
  256. action: 'accept',
  257. result: 'Trade was successful.'
  258. });
  259. }
  260. });
  261. } else if(trade.response.offer.trade_offer_state == 7) {
  262. res.json({
  263. success: true,
  264. result: 'You are declined trade',
  265. action: 'cross'
  266. });
  267. } else {
  268. res.json({
  269. success: false,
  270. error: 'You are not accept trade'
  271. });
  272. }
  273. }
  274. });
  275. });
  276.  
  277.  
  278.  
  279. function cancelTrade(offerid) {
  280. offers.declineOffer({
  281. tradeOfferId: offerid
  282. }, function(err, log) {
  283. if (err) {
  284. logger.error('Не смогли отменить трейд #'+offerid);
  285. logger.debug(err);
  286. return;
  287. }
  288. logger.debug(log);
  289. logger.trace('Offer #'+offerid+' canceled');
  290. });
  291. }
  292.  
  293. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  294. if((err) || (!res[0])) {
  295. logger.error('Cant find account');
  296. process.exit(0);
  297. return;
  298. }
  299. account = res[0];
  300. app.listen(15987+account.id);
  301. logger.trace('We got account info');
  302. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  303. account.auth = false;
  304. logger.debug(account);
  305. community.login(account, login);
  306. });
  307.  
  308. community.on('confKeyNeeded', function(tag, callback) {
  309. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  310. });
  311.  
  312. community.on('newConfirmation', function(confirmation) {
  313. var time = time();
  314. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  315. confirmation.respond(time, key, true, function(err) {
  316. if(err) {
  317. logger.error('Error on mobile auth');
  318. logger.debug(err);
  319. return;
  320. }
  321. logger.trace('Trade sucesfully confirmed');
  322. });
  323. });
  324.  
  325. function query(sql, callback) {
  326. if (typeof callback === 'undefined') {
  327. callback = function() {};
  328. }
  329. pool.getConnection(function(err, connection) {
  330. if(err) return callback(err);
  331. logger.info('DB connection ID: '+connection.threadId);
  332. connection.query(sql, function(err, rows) {
  333. if(err) return callback(err);
  334. connection.release();
  335. return callback(null, rows);
  336. });
  337. });
  338. }
  339.  
  340. function login(err, sessionID, cookies, steamguard) {
  341. if(err) {
  342. logger.error('Auth error');
  343. logger.debug(err);
  344. if(err.message == "SteamGuardMobile") {
  345. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  346. logger.warn('Error in auth: '+account.twoFactorCode);
  347. setTimeout(function() {
  348. community.login(account, login);
  349. }, 5000);
  350. return;
  351. }
  352. process.exit(0);
  353. }
  354. logger.trace('Sucesfully auth');
  355. account.sessionID = sessionID;
  356. account.cookies = cookies;
  357. community.getWebApiKey('tmcrew.eu', webApiKey);
  358. community.startConfirmationChecker(10000, account.identity_secret);
  359. }
  360.  
  361. function webApiKey(err, key) {
  362. if(err) {
  363. logger.error('Cant make apikey')
  364. logger.debug(err);
  365. process.exit(0);
  366. return;
  367. }
  368. account.key = key;
  369. logger.trace('API key bot '+account.accountName+' '+account.key);
  370. offersSetup();
  371. community.loggedIn(checkLoggedIn);
  372. }
  373.  
  374. function offersSetup() {
  375. logger.trace('Loaded steam-tradeoffers');
  376. offers.setup({
  377. sessionID: account.sessionID,
  378. webCookie: account.cookies,
  379. APIKey: account.key
  380. });
  381. }
  382.  
  383. function checkLoggedIn(err, loggedIn, familyView) {
  384. if((err) || (!loggedIn)) {
  385. logger.error('We arent logged in')
  386. process.exit(0);
  387. } else {
  388. logger.trace('Logged in');
  389. account.auth = true;
  390. }
  391. }
  392.  
  393. function makecode() {
  394. var text = "";
  395. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  396.  
  397. for(var i=0; i < 5; i++)
  398. text += possible.charAt(Math.floor(Math.random() * possible.length));
  399.  
  400. return text;
  401. }
  402.  
  403. function time() {
  404. return parseInt(new Date().getTime()/1000)
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement