Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.50 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. 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. app.get('/sendTrade/', function (req, res) {
  30. var assetids = req.query['assetids'];
  31. assetids = assetids.split(',');
  32. var partner = req.query['partner'];
  33. var token = req.query['token'];
  34. var checksum = req.query['checksum'];
  35. var steamid = req.query['steamid'];
  36. var senditems = [];
  37.  
  38. for (var i = 0; i < assetids.length; i++) {
  39. if (assetids[i] == "") continue;
  40. senditems.push({
  41. appid: 730,
  42. contextid: 2,
  43. assetid: assetids[i]
  44. });
  45. }
  46. var code = makecode();
  47. console.log(partner, token, checksum, assetids, senditems);
  48. if ( assetids.length == 0){
  49. logger.error('Error sending trade');
  50. res.json({
  51. success: false,
  52. error: "Invalid assetid length."
  53. });
  54. }else if ((token == undefined) || (token == '')) {
  55. logger.error('Error sending trade');
  56. res.json({
  57. success: false,
  58. error: "Missing Trade token."
  59. });
  60. } else {
  61. offers.makeOffer({
  62. partnerAccountId: partner,
  63. accessToken: token,
  64. itemsFromThem: senditems,
  65. itemsFromMe: [],
  66. message: 'Code: ' + code
  67. }, function (err, r) {
  68. if (err) {
  69. logger.error('Error sending trade');
  70. logger.debug(err);
  71. res.json({
  72. success: false,
  73. error: err.toString()
  74. });
  75. } else {
  76. offers.loadPartnerInventory({
  77. partnerSteamId: steamid,
  78. tradeOfferId: r.tradeofferid,
  79. appId: 730,
  80. contextId: 2,
  81. language: 'russian'
  82. }, function (err, rr) {
  83. if (err) {
  84. logger.debug(err);
  85. res.json({
  86. success: false,
  87. error: err.toString()
  88. });
  89. } else {
  90. var names = [];
  91. for (var i = 0; i < senditems.length; i++) {
  92. for (var a = 0; a < rr.length; a++) {
  93. if ((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  94. names.push({market_hash_name: rr[a].market_hash_name, icon_url: rr[a].icon_url});
  95. rr[a].ss = 1;
  96. continue;
  97. }
  98. }
  99. }
  100. res.json({
  101. success: true,
  102. code: code,
  103. amount: checksum,
  104. tid: r.tradeofferid,
  105. items: names
  106. });
  107. }
  108. });
  109. }
  110. });
  111. }
  112. });
  113.  
  114. app.get('/sendTradeMe/', function (req, res) {
  115. var names = req.query['names'];
  116. names = names.split(',');
  117. var partner = req.query['partner'];
  118. var token = req.query['token'];
  119. var checksum = req.query['checksum'];
  120. if ((token == undefined) || (token == '')) {
  121. logger.error('Error sending trade');
  122. res.json({
  123. success: false,
  124. error: "Missing Trade token."
  125. });
  126. } else {
  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.  
  156. var code = makecode();
  157. console.log(partner, token, checksum, names, senditems);
  158. offers.makeOffer({
  159. partnerAccountId: partner,
  160. accessToken: token,
  161. itemsFromThem: [],
  162. itemsFromMe: senditems,
  163. message: 'Code: ' + code
  164. }, function (err, r) {
  165. if (err) {
  166. logger.error('Error sending trade');
  167. logger.debug(err);
  168. res.json({
  169. success: false,
  170. error: err.toString()
  171. });
  172. } else {
  173. res.json({
  174. success: true,
  175. code: code,
  176. amount: -checksum,
  177. tid: r.tradeofferid,
  178. state: 2
  179. });
  180. }
  181. });
  182. }
  183. });
  184. }
  185. });
  186.  
  187. app.get('/sendTradeMe/', function (req, res) {
  188. var names = req.query['names'];
  189. names = names.split(',');
  190. var partner = req.query['partner'];
  191. var token = req.query['token'];
  192. var checksum = req.query['checksum'];
  193. offers.loadMyInventory({
  194. appId: 730,
  195. contextId: 2
  196. }, function(err, items) {
  197. if(err) {
  198. logger.error('Error sending trade');
  199. logger.debug(err);
  200. res.json({
  201. success: false,
  202. error: err.toString()
  203. });
  204. } else {
  205. var senditems = [];
  206. for(var i = 0; i < names.length; i++) {
  207. for(var a = 0; a < items.length; a++) {
  208. if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  209. senditems.push({
  210. appid: 730,
  211. contextid: 2,
  212. assetid: items[a].id
  213. });
  214. if(senditems.length == names.length-1) break;
  215. items[a].ss = 1;
  216. continue;
  217. }
  218. if(senditems.length == names.length-1) break;
  219. }
  220. };
  221. var code = makecode();
  222. console.log(partner, token, checksum, names, senditems);
  223. offers.makeOffer({
  224. partnerAccountId: partner,
  225. accessToken: token,
  226. itemsFromThem: [],
  227. itemsFromMe: senditems,
  228. message: 'Code: '+code
  229. }, function(err, r) {
  230. if(err) {
  231. logger.error('Error sending trade');
  232. logger.debug(err);
  233. res.json({
  234. success: false,
  235. error: err.toString()
  236. });
  237. } else {
  238. res.json({
  239. success: true,
  240. code: code,
  241. amount: -checksum,
  242. tid: r.tradeofferid,
  243. state: 2
  244. });
  245. }
  246. });
  247. }
  248. });
  249. });
  250.  
  251. app.get('/checkTrade/', function (req, res) {
  252. var tid = req.query['tid'];
  253. offers.getOffer({
  254. tradeofferid: tid
  255. }, function(err, trade) {
  256. if(err) {
  257. logger.error('Error checking trade');
  258. logger.debug(err);
  259. res.json({
  260. success: false,
  261. error: err.toString()
  262. });
  263. } else {
  264. logger.debug(trade);
  265. if(trade.response.offer.trade_offer_state == 3) {
  266. res.json({
  267. success: true,
  268. action: 'accept',
  269. result: 'Coins have been added to your balance'
  270. });
  271. } else if(trade.response.offer.trade_offer_state == 7) {
  272. res.json({
  273. success: true,
  274. result: 'You are declined trade',
  275. action: 'cross'
  276. });
  277. } else {
  278. res.json({
  279. success: false,
  280. error: 'You are not accept trade'
  281. });
  282. }
  283. }
  284. });
  285. });
  286.  
  287. function cancelTrade(offerid) {
  288. offers.declineOffer({
  289. tradeOfferId: offerid
  290. }, function(err, log) {
  291. if (err) {
  292. logger.error('Не смогли отменить трейд #'+offerid);
  293. logger.debug(err);
  294. return;
  295. }
  296. logger.debug(log);
  297. logger.trace('Offer #'+offerid+' canceled');
  298. });
  299. }
  300.  
  301. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  302. if((err) || (!res[0])) {
  303. logger.error('Cant find account');
  304. process.exit(0);
  305. return;
  306. }
  307. account = res[0];
  308. app.listen(3000+account.id);
  309. logger.trace('We got account info');
  310. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  311. account.auth = false;
  312. logger.debug(account);
  313. community.login(account, login);
  314. });
  315.  
  316. community.on('confKeyNeeded', function(tag, callback) {
  317. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  318. });
  319.  
  320. community.on('newConfirmation', function(confirmation) {
  321. var time = time();
  322. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  323. confirmation.respond(time, key, true, function(err) {
  324. if(err) {
  325. logger.error('Error on mobile auth');
  326. logger.debug(err);
  327. return;
  328. }
  329. logger.trace('Trade sucesfully confirmed');
  330. });
  331. });
  332.  
  333. function query(sql, callback) {
  334. if (typeof callback === 'undefined') {
  335. callback = function() {};
  336. }
  337. pool.getConnection(function(err, connection) {
  338. if(err) return callback(err);
  339. logger.info('DB connection ID: '+connection.threadId);
  340. connection.query(sql, function(err, rows) {
  341. if(err) return callback(err);
  342. connection.release();
  343. return callback(null, rows);
  344. });
  345. });
  346. }
  347.  
  348. function login(err, sessionID, cookies, steamguard) {
  349. if(err) {
  350. logger.error('Auth error');
  351. logger.debug(err);
  352. if(err.message == "SteamGuardMobile") {
  353. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  354. logger.warn('Error in auth: '+account.twoFactorCode);
  355. setTimeout(function() {
  356. community.login(account, login);
  357. }, 5000);
  358. return;
  359. }
  360. process.exit(0);
  361. }
  362. logger.trace('Sucesfully auth');
  363. account.sessionID = sessionID;
  364. account.cookies = cookies;
  365. community.getWebApiKey('csgobananas.com', webApiKey);
  366. community.startConfirmationChecker(10000, account.identity_secret);
  367. }
  368.  
  369. function webApiKey(err, key) {
  370. if(err) {
  371. logger.error('Cant make apikey')
  372. logger.debug(err);
  373. process.exit(0);
  374. return;
  375. }
  376. account.key = key;
  377. logger.trace('API key bot '+account.accountName+' '+account.key);
  378. offersSetup();
  379. community.loggedIn(checkLoggedIn);
  380. }
  381.  
  382. function offersSetup() {
  383. logger.trace('Loaded steam-tradeoffers');
  384. offers.setup({
  385. sessionID: account.sessionID,
  386. webCookie: account.cookies,
  387. APIKey: account.key
  388. });
  389. }
  390.  
  391. function checkLoggedIn(err, loggedIn, familyView) {
  392. if((err) || (!loggedIn)) {
  393. logger.error('We arent logged in')
  394. process.exit(0);
  395. } else {
  396. logger.trace('Logged in');
  397. account.auth = true;
  398. }
  399. }
  400.  
  401. function makecode() {
  402. var text = "";
  403. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  404.  
  405. for(var i=0; i < 5; i++)
  406. text += possible.charAt(Math.floor(Math.random() * possible.length));
  407.  
  408. return text;
  409. }
  410.  
  411. function time() {
  412. return parseInt(new Date().getTime()/1000)
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement