Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.98 KB | None | 0 0
  1. NOTE: DB INFORMATION HAS BEEN REMOVED FOR OBVIOUS REASONS
  2.  
  3. var SteamCommunity = require('steamcommunity');
  4. var SteamTotp = require('steam-totp');
  5. var mysql = require('mysql');
  6. var log4js = require('log4js');
  7. var SteamTradeOffers = require('steam-tradeoffers');
  8. var async = require('async');
  9.  
  10. var pool = mysql.createPool({
  11. connectionLimit : 10,
  12. database: '',
  13. host: '',
  14. user: '',
  15. password: ''
  16. });
  17.  
  18. var community = new SteamCommunity();
  19. var offers = new SteamTradeOffers();
  20. log4js.configure({
  21. appenders: [
  22. { type: 'console' },
  23. { type: 'file', filename: 'logs/bot_'+process.argv[2]+'.log' }
  24. ]
  25. });
  26. var logger = log4js.getLogger();
  27.  
  28. var express = require('express');
  29. var app = express();
  30.  
  31. app.get('/sendTrade/', function (req, res) {
  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, 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('/sendTradeMe/', function (req, res) {
  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. for(var a = 0; a < items.length; a++) {
  122. if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  123. senditems.push({
  124. appid: 730,
  125. contextid: 2,
  126. assetid: items[a].id
  127. });
  128. if(senditems.length == names.length-1) break;
  129. items[a].ss = 1;
  130. continue;
  131. }
  132. if(senditems.length == names.length-1) break;
  133. }
  134. };
  135. var code = makecode();
  136. console.log(partner, token, checksum, names, senditems);
  137. offers.makeOffer({
  138. partnerAccountId: partner,
  139. accessToken: token,
  140. itemsFromThem: [],
  141. itemsFromMe: senditems,
  142. message: 'Code: '+code
  143. }, function(err, r) {
  144. if(err) {
  145. logger.error('Error sending trade');
  146. logger.debug(err);
  147. res.json({
  148. success: false,
  149. error: err.toString()
  150. });
  151. } else {
  152. res.json({
  153. success: true,
  154. code: code,
  155. amount: -checksum,
  156. tid: r.tradeofferid,
  157. state: 2
  158. });
  159. }
  160. });
  161. }
  162. });
  163. });
  164.  
  165. app.get('/checkTrade/', function (req, res) {
  166. var tid = req.query['tid'];
  167. offers.getOffer({
  168. tradeofferid: tid
  169. }, function(err, trade) {
  170. if(err) {
  171. logger.error('Error checking trade');
  172. logger.debug(err);
  173. res.json({
  174. success: false,
  175. error: err.toString()
  176. });
  177. } else {
  178. logger.debug(trade);
  179. if(trade.response.offer.trade_offer_state == 3) {
  180. res.json({
  181. success: true,
  182. action: 'accept',
  183. result: 'Coins have been added to your balance'
  184. });
  185. } else if(trade.response.offer.trade_offer_state == 7) {
  186. res.json({
  187. success: true,
  188. result: 'You are declined trade',
  189. action: 'cross'
  190. });
  191. } else {
  192. res.json({
  193. success: false,
  194. error: 'You are not accept trade'
  195. });
  196. }
  197. }
  198. });
  199. });
  200.  
  201. function cancelTrade(offerid) {
  202. offers.declineOffer({
  203. tradeOfferId: offerid
  204. }, function(err, log) {
  205. if (err) {
  206. logger.error('Не смогли отменить трейд #'+offerid);
  207. logger.debug(err);
  208. return;
  209. }
  210. logger.debug(log);
  211. logger.trace('Offer #'+offerid+' canceled');
  212. });
  213. }
  214.  
  215. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  216. if((err) || (!res[0])) {
  217. logger.error('Cant find account');
  218. process.exit(0);
  219. return;
  220. }
  221. account = res[0];
  222. app.listen(3000+account.id);
  223. logger.trace('We got account info');
  224. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  225. account.auth = false;
  226. logger.debug(account);
  227. community.login(account, login);
  228. });
  229.  
  230. community.on('confKeyNeeded', function(tag, callback) {
  231. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  232. });
  233.  
  234. community.on('newConfirmation', function(confirmation) {
  235. var time = time();
  236. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  237. confirmation.respond(time, key, true, function(err) {
  238. if(err) {
  239. logger.error('Error on mobile auth');
  240. logger.debug(err);
  241. return;
  242. }
  243. logger.trace('Trade sucesfully confirmed');
  244. });
  245. });
  246.  
  247. function query(sql, callback) {
  248. if (typeof callback === 'undefined') {
  249. callback = function() {};
  250. }
  251. pool.getConnection(function(err, connection) {
  252. if(err) return callback(err);
  253. logger.info('DB connection ID: '+connection.threadId);
  254. connection.query(sql, function(err, rows) {
  255. if(err) return callback(err);
  256. connection.release();
  257. return callback(null, rows);
  258. });
  259. });
  260. }
  261.  
  262. function login(err, sessionID, cookies, steamguard) {
  263. if(err) {
  264. logger.error('Auth error');
  265. logger.debug(err);
  266. if(err.message == "SteamGuardMobile") {
  267. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  268. logger.warn('Error in auth: '+account.twoFactorCode);
  269. setTimeout(function() {
  270. community.login(account, login);
  271. }, 5000);
  272. return;
  273. }
  274. process.exit(0);
  275. }
  276. logger.trace('Sucesfully auth');
  277. account.sessionID = sessionID;
  278. account.cookies = cookies;
  279. community.getWebApiKey('csgobananas.com', webApiKey);
  280. community.startConfirmationChecker(10000, account.identity_secret);
  281. }
  282.  
  283. function webApiKey(err, key) {
  284. if(err) {
  285. logger.error('Cant make apikey')
  286. logger.debug(err);
  287. process.exit(0);
  288. return;
  289. }
  290. account.key = key;
  291. logger.trace('API key bot '+account.accountName+' '+account.key);
  292. offersSetup();
  293. community.loggedIn(checkLoggedIn);
  294. }
  295.  
  296. function offersSetup() {
  297. logger.trace('Loaded steam-tradeoffers');
  298. offers.setup({
  299. sessionID: account.sessionID,
  300. webCookie: account.cookies,
  301. APIKey: account.key
  302. });
  303. }
  304.  
  305. function checkLoggedIn(err, loggedIn, familyView) {
  306. if((err) || (!loggedIn)) {
  307. logger.error('We arent logged in')
  308. process.exit(0);
  309. } else {
  310. logger.trace('Logged in');
  311. account.auth = true;
  312. }
  313. }
  314.  
  315. function makecode() {
  316. var text = "";
  317. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  318.  
  319. for(var i=0; i < 5; i++)
  320. text += possible.charAt(Math.floor(Math.random() * possible.length));
  321.  
  322. return text;
  323. }
  324.  
  325. function time() {
  326. return parseInt(new Date().getTime()/1000)
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement