Advertisement
Guest User

Untitled

a guest
Dec 29th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.39 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: 'csgo',
  11. host: 'localhost',
  12. user: 'root',
  13. password: ''
  14. });
  15.  
  16. var community = new SteamCommunity();
  17. var offers = new SteamTradeOffers();
  18.  
  19. log4js.configure({
  20. appenders: {
  21. out:{ type: 'console' },
  22. app:{ type: 'file', filename: 'logs/bot.log' }
  23. },
  24. categories: {
  25. default: { appenders: [ 'out', 'app' ], level: 'debug' }
  26. }
  27. });
  28. var logger = log4js.getLogger();
  29.  
  30. categories: {
  31. default: { appenders: [ 'out', 'app' ], level: 'debug' }
  32. }
  33. });
  34. var logger = log4js.getLogger();
  35. categories: {
  36. default: { appenders: [ 'out', 'app' ], level: 'debug' }
  37. }
  38. });
  39. var logger = log4js.getLogger();
  40. ]
  41. });
  42. var logger = log4js.getLogger();
  43.  
  44. var express = require('express');
  45. var app = express();
  46.  
  47. app.get('/sendDepositTradeOffer/', function (req, res) {
  48. var assetids = req.query['assetids'];
  49. assetids = assetids.split(',');
  50. var partner = req.query['partner'];
  51. var token = req.query['token'];
  52. var checksum = req.query['checksum'];
  53. var steamid = req.query['steamid'];
  54. var senditems = [];
  55. for(var i = 0; i < assetids.length; i++) {
  56. if(assetids[i] == "") continue;
  57. senditems.push({
  58. appid: 730,
  59. contextid: 2,
  60. assetid: assetids[i]
  61. });
  62. }
  63. var code = makecode();
  64. console.log(partner, token, checksum, assetids, senditems);
  65. offers.makeOffer({
  66. partnerAccountId: partner,
  67. accessToken: token,
  68. itemsFromThem: senditems,
  69. itemsFromMe: [],
  70. message: 'Code: '+code
  71. }, function(err, r) {
  72. if(err) {
  73. logger.error('Error sending trade');
  74. logger.debug(err);
  75. res.json({
  76. success: false,
  77. error: err.toString()
  78. });
  79. } else {
  80. offers.loadPartnerInventory({
  81. partnerSteamId: steamid,
  82. tradeOfferId: r.tradeofferid,
  83. appId: 730,
  84. contextId: 2,
  85. language: 'russian'
  86. }, function(err, rr) {
  87. if(err) {
  88. logger.debug(err);
  89. res.json({
  90. success: false,
  91. error: err.toString()
  92. });
  93. } else {
  94. var names = [];
  95. for(var i = 0; i < senditems.length; i++) {
  96. for(var a = 0; a < rr.length; a++) {
  97. if((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  98. names.push({market_hash_name: rr[a].market_hash_name, icon_url: rr[a].icon_url});
  99. rr[a].ss = 1;
  100. continue;
  101. }
  102. }
  103. }
  104. res.json({
  105. success: true,
  106. code: code,
  107. amount: checksum,
  108. tid: r.tradeofferid,
  109. items: names
  110. });
  111. }
  112. });
  113. }
  114. });
  115. });
  116.  
  117. app.get('/sendWithdrawTradeOffer/', function (req, res) {
  118. var names = req.query['names'];
  119. names = names.split(',');
  120. var partner = req.query['partner'];
  121. var token = req.query['token'];
  122. var checksum = req.query['checksum'];
  123. var steamid = req.query['steamid'];
  124. var mindepo = 2000;
  125. query('SELECT sum(summa) as depo FROM `trades` WHERE `status` = 1 and `user` = ' + steamid, function(err2, res2) {
  126. if (parseInt(res2[0].depo) > mindepo){
  127. offers.loadMyInventory({
  128. appId: 730,
  129. contextId: 2
  130. }, function(err, items) {
  131. if(err) {
  132. logger.error('Error sending trade');
  133. logger.debug(err);
  134. res.json({
  135. success: false,
  136. error: err.toString()
  137. });
  138. } else {
  139. var senditems = [];
  140. for(var i = 0; i < names.length; i++) {
  141. for(var a = 0; a < items.length; a++) {
  142. if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  143. senditems.push({
  144. appid: 730,
  145. contextid: 2,
  146. assetid: items[a].id
  147. });
  148. if(senditems.length == names.length-1) break;
  149. items[a].ss = 1;
  150. continue;
  151. }
  152. if(senditems.length == names.length-1) break;
  153. }
  154. };
  155. var code = makecode();
  156. console.log(partner, token, checksum, names, senditems);
  157. offers.makeOffer({
  158. partnerAccountId: partner,
  159. accessToken: token,
  160. itemsFromThem: [],
  161. itemsFromMe: senditems,
  162. message: 'Code: '+code
  163. }, function(err, r) {
  164. if(err) {
  165. logger.error('Error sending trade');
  166. logger.debug(err);
  167. res.json({
  168. success: false,
  169. error: err.toString()
  170. });
  171. } else {
  172. res.json({
  173. success: true,
  174. code: code,
  175. amount: -checksum,
  176. tid: r.tradeofferid,
  177. state: 2
  178. });
  179. }
  180. });
  181. }
  182. });
  183. } else {
  184. res.json({
  185. success: false,
  186. error: "You need to deposit atleast "+mindepo+" !"
  187. });
  188. } });
  189. });
  190.  
  191. var ips = {};
  192. app.get('/checkOfferTrade/', function (req, res) {
  193. if(ips[req.connection.remoteAddress]+15 >= time()) {
  194. return;
  195. } else {
  196. ips[req.connection.remoteAddress] = time();
  197. }
  198. var tid = req.query['tid'];
  199. var random = Math.floor(Math.random()*(5000-3000+1)+3000);
  200. setTimeout(function() {
  201.  
  202. offers.getOffer({
  203. tradeofferid: tid
  204. }, function(err, trade) {
  205. if(err) {
  206. logger.error('Error checking trade');
  207. logger.debug(err);
  208. res.json({
  209. success: false,
  210. error: err.toString()
  211. });
  212. } else {
  213. logger.debug(trade);
  214. if(trade.response.offer.trade_offer_state == 3) {
  215. res.json({
  216. success: true,
  217. action: 'accept',
  218. result: 'Success! Your balance has been updated.'
  219. });
  220. } else if(
  221. trade.response.offer.trade_offer_state == 7 ||
  222. trade.response.offer.trade_offer_state == 10 ||
  223. trade.response.offer.trade_offer_state == 1 ||
  224. trade.response.offer.trade_offer_state == 4 ||
  225. trade.response.offer.trade_offer_state == 5 ||
  226. trade.response.offer.trade_offer_state == 6 ||
  227. trade.response.offer.trade_offer_state == 8
  228. ) {
  229. res.json({
  230. success: true,
  231. result: 'You have declined the trade',
  232. action: 'cross'
  233. });
  234. } else {
  235. res.json({
  236. success: false,
  237. error: 'You have not accepted the trade'
  238. });
  239. }
  240. }
  241. });
  242. }, random);
  243. });
  244. function acceptTrade(offerid) {
  245. offers.acceptOffer({
  246. tradeOfferId: offerid
  247. });
  248. }
  249. function cancelTrade(offerid) {
  250. offers.declineOffer({
  251. tradeOfferId: offerid
  252. }, function(err, log) {
  253. if (err) {
  254. logger.error('Nie mogliśmy przerwać handlu #'+offerid);
  255. logger.debug(err);
  256. return;
  257. }
  258. logger.debug(log);
  259. logger.trace('Offer #'+offerid+' canceled');
  260. });
  261. offers.cancelOffer({
  262. tradeOfferId: offerid
  263. });
  264. }
  265.  
  266. setInterval(function() {
  267. checkOldTrades();
  268. }, 1800000);
  269.  
  270. function checkOldTrades() {
  271. var utimestamp = Math.round(Date.now() / 1000);
  272. offers.getOffers({
  273. get_sent_offers: 1,
  274. active_only: 1
  275. }, function(err, response) {
  276. if( ! err || response.response.trade_offers_sent.length) {
  277. var trades = response.response.trade_offers_sent;
  278. if(typeof trades !== "undefined") {
  279. trades.forEach(function(trade) {
  280. if(trade.trade_offer_state == 2 && trade.time_created + 600 < utimestamp) {
  281. cancelTrade(trade.tradeofferid);
  282. logger.warn('Tradeoffer expired manually: ' + trade.tradeofferid);
  283. }
  284. });
  285. }
  286. }
  287. });
  288. }
  289.  
  290. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  291. if((err) || (!res[0])) {
  292. logger.error('Cant find account');
  293. process.exit(0);
  294. return;
  295. }
  296. account = res[0];
  297. app.listen(3000+account.id);
  298. logger.trace('We got account info');
  299. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  300. account.auth = false;
  301. logger.debug(account);
  302. community.login(account, login);
  303. });
  304.  
  305. community.on('confKeyNeeded', function(tag, callback) {
  306. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  307. });
  308.  
  309. community.on('newConfirmation', function(confirmation) {
  310. var time = time();
  311. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  312. confirmation.respond(time, key, true, function(err) {
  313. if(err) {
  314. logger.error('Error on mobile auth');
  315. logger.debug(err);
  316. return;
  317. }
  318. logger.trace('Trade sucesfully confirmed');
  319. });
  320. });
  321.  
  322. function query(sql, callback) {
  323. if (typeof callback === 'undefined') {
  324. callback = function() {};
  325. }
  326. pool.getConnection(function(err, connection) {
  327. if(err) return callback(err);
  328. logger.info('DB connection ID: '+connection.threadId);
  329. connection.query(sql, function(err, rows) {
  330. if(err) return callback(err);
  331. connection.release();
  332. return callback(null, rows);
  333. });
  334. });
  335. }
  336.  
  337. function login(err, sessionID, cookies, steamguard) {
  338. if(err) {
  339. logger.error('Auth error');
  340. logger.debug(err);
  341. if(err.message == "SteamGuardMobile") {
  342. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  343. logger.warn('Error in auth: '+account.twoFactorCode);
  344. setTimeout(function() {
  345. community.login(account, login);
  346. }, 5000);
  347. return;
  348. }
  349. process.exit(0);
  350. }
  351. logger.trace('Sucesfully auth');
  352. account.sessionID = sessionID;
  353. account.cookies = cookies;
  354. community.getWebApiKey('csgotetradeca.pl', webApiKey);
  355. community.startConfirmationChecker(10000, account.identity_secret);
  356. setTimeout(function() {
  357. checkOldTrades();
  358. }, 20000);
  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