Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. const request = require('request-promise');
  2. const twoFactor = require('node-2fa');
  3.  
  4. //
  5. // Config
  6.  
  7. const config = {
  8. apiKey: '',
  9. twoFactorSecret: '',
  10. opskinsid: '', // Opskins User ID
  11. betTimes: -1, // -1 For no limit
  12. betMin: '0.5',
  13. betMax: '5',
  14. betMinTime: 60,
  15. betMaxTime: 80
  16. }
  17.  
  18. //
  19.  
  20. if (config.apiKey == '') throw new Error('Api-Key missing!');
  21. if (config.twoFactorSecret == '') throw new Error('Two-Factor missing!');
  22. if (config.opskinsid == '') throw new Error('Opskinsid missing!');
  23.  
  24. var oprequest = request.defaults({
  25. auth: {
  26. user: config.apiKey,
  27. password: '',
  28. sendImmediately: true
  29. }
  30. });
  31.  
  32.  
  33. process.on('uncaughtException', function (err) {
  34. console.log("Error...");
  35. console.error(err);
  36. });
  37.  
  38.  
  39. //
  40. // WAX Inventory
  41.  
  42. async function GetUserInventory(opskinsId, appId = 1, page = 1, mergeItems = []) {
  43. try {
  44. const data = await oprequest({
  45. method: 'GET',
  46. url: `https://api-trade.opskins.com/ITrade/GetUserInventory/v1/`,
  47. qs: {
  48. uid: opskinsId,
  49. app_id: appId,
  50. per_page: 500,
  51. page
  52. },
  53. json: true
  54. });
  55.  
  56. if (data.status !== 1) {
  57. throw new Error(data.message);
  58. }
  59.  
  60. mergeItems = mergeItems.concat(data.response.items);
  61. if (page + 1 > data.total_pages) {
  62. return mergeItems;
  63. }
  64.  
  65. return GetUserInventory(opskinsId, appId, page + 1, mergeItems);
  66. } catch (err) {
  67. throw new Error((err.error && err.error.message ? err.error.message : err.message ? err.message : 'Opskins service is unreachable.'));
  68. }
  69. }
  70.  
  71. var appIds = [
  72. 1, // VGO
  73. 13, // Gift Cards
  74. 15, // Game Items
  75. 16, // Digital Items
  76. 17, // G-Fuel
  77. 18, // Fan Gear
  78. 19, // Shoes
  79. 20, // Apparels
  80. 21, // Electronics
  81. 22, // Games
  82. ];
  83.  
  84. async function WAXInventory(opskinsId) {
  85. let inventory = [];
  86. let inventoryValue = 0;
  87. for (var i = 0; i < appIds.length; i++) {
  88. let appId = appIds[i];
  89. let items = await GetUserInventory(opskinsId, appId);
  90. for (var j = 0; j < items.length; j++) {
  91. let item = items[j];
  92. inventoryValue += item.suggested_price;
  93. inventory.push({
  94. id: item.id,
  95. name: item.name,
  96. price: item.suggested_price/100
  97. });
  98. }
  99. }
  100. inventoryValue = inventoryValue/100;
  101. return [inventory, inventoryValue];
  102. }
  103.  
  104.  
  105.  
  106.  
  107. let pollTrades = {
  108. offers: [],
  109. timer: null
  110. };
  111.  
  112. let betCount = 0;
  113. let randomTimes = 0;
  114.  
  115. async function GetOfferTrades(offerId) {
  116. var res = oprequest({
  117. method: 'GET',
  118. url: `https://api-trade.opskins.com/ITrade/GetOffer/v1/`,
  119. qs: {
  120. offer_id: offerId
  121. },
  122. json: true
  123. });
  124. return res.response.offer;
  125. }
  126.  
  127. async function doPoolTrades() {
  128. if (pollTrades.offers.length) {
  129. for (var i = pollTrades.offers.length - 1; i >= 0; i--) {
  130. let trade = pollTrades.offers[i];
  131. try {
  132. let offer = await GetOfferTrades(trade.tradeid);
  133. if (trade.last_state != offer.state) {
  134. if (offer.state === 2) {
  135. console.log('Deposit offer has been accepted.');
  136. } else {
  137. console.log('Deposit offer has been rejected.');
  138. }
  139. StartBet();
  140. }
  141.  
  142. trade.last_state = offer.state;
  143.  
  144. if (offer.state !== 2) {
  145. pollTrades.offers.splice(i, 1);
  146. }
  147. } catch (err) {
  148. console.log("doPoolTrades", "Trade pool error for offer "+trade.tradeid+" error: %s" + err.message);
  149. }
  150. }
  151. }
  152. pollTrades.timer = setTimeout(doPoolTrades.bind(this), 2000);
  153. }
  154.  
  155. doPoolTrades();
  156.  
  157. // Shit function
  158. function Randomitems(inventory) {
  159. if (randomTimes >= 50) throw new Error('Failed to get random items to bet.');
  160.  
  161. let betMin = parseFloat(config.betMin);
  162. let betMax = parseFloat(config.betMax);
  163.  
  164. let gotValue = 0;
  165. let gotItems = [];
  166.  
  167. while(true) {
  168. var item = inventory[Math.floor(Math.random()*inventory.length)];
  169. if (gotItems.indexOf(item.id) != -1) continue;
  170.  
  171.  
  172. if (item.price > betMax || item.price + gotValue > betMax) {
  173. randomTimes++;
  174. return Randomitems(inventory);
  175. }
  176.  
  177. gotValue += item.price;
  178. gotItems.push(item.id);
  179.  
  180. if (gotValue >= betMin) return [gotItems, gotValue];
  181. }
  182.  
  183. }
  184.  
  185. async function DepositOffer(items, value) {
  186. console.log('Creating deposit offer for '+items.length+' items valuated at $'+value.toFixed(2)+'.');
  187. try {
  188. var data = await oprequest({
  189. method: 'POST',
  190. url: `https://api-trade.opskins.com/ITrade/SendOffer/v1/`,
  191. form: {
  192. uid: '5698156',
  193. token: 'zrI76U4A',
  194. items_to_send: items.join(','),
  195. twofactor_code: twoFactor.generateToken(config.twoFactorSecret).token
  196. },
  197. json: true
  198. });
  199.  
  200. pollTrades.offers.push({
  201. tradeid: data.response.offer.id,
  202. last_state: data.response.offer.state
  203. });
  204.  
  205. betCount++;
  206. console.log('Deposit offer created.');
  207. } catch (err) {
  208.  
  209. console.log(err.message)
  210. console.log('Failed to create deposit offer. Retrying in 5sec...');
  211. setTimeout(function() {
  212. StartBet();
  213. }, 5000);
  214. }
  215. }
  216.  
  217. console.log('Bot sted: Min deposit: $'+config.betMin+', Max deposit: $'+config.betMax+', Min time: '+config.betMinTime+'sec, Max time: '+config.betMaxTime+'sec.');
  218.  
  219. async function StartBet() {
  220. if (config.betTimes != -1 && betCount >= config.betTimes) throw new Error('Bet limit reached');
  221.  
  222.  
  223. var [ inventory, value ] = await WAXInventory(config.opskinsid);
  224. console.log('Loaded user inventory: items: '+inventory.length+', value: $'+value.toFixed(2)+'.');
  225.  
  226. if (value < parseFloat(config.betMin)) throw new Error('Not enough value in inventory to make bet.');
  227.  
  228. let timeout = Math.floor(Math.random()*(config.betMaxTime-config.betMinTime+1)+config.betMinTime);
  229.  
  230. console.log('Next bet in ' + timeout + ' secoonds.');
  231.  
  232. setTimeout(function() {
  233. randomTimes = 0;
  234. var [items, value] = Randomitems(inventory);
  235. DepositOffer(items, value);
  236. }, timeout * 1000);
  237. }
  238.  
  239. StartBet();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement