Advertisement
Guest User

Untitled

a guest
Feb 20th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. var OPTIONS = {
  2. startTime: "2018-02-20T13:29:45",
  3. ticketIndex: 0,
  4. ticketQuantity: 1
  5. };
  6.  
  7. function checkLocation() {
  8. if (location.href.indexOf("eventbrite") == -1)
  9. throw new Error("Not being run on the Eventbrite event page");
  10. }
  11.  
  12. function post(path, params) {
  13. var form = document.createElement("form");
  14. form.setAttribute("method", "post");
  15. form.setAttribute("action", path);
  16.  
  17. for (var key in params)
  18. if (params.hasOwnProperty(key)) {
  19. var hiddenField = document.createElement("input");
  20. hiddenField.setAttribute("type", "hidden");
  21. hiddenField.setAttribute("name", key);
  22. hiddenField.setAttribute("value", params[key]);
  23. form.appendChild(hiddenField);
  24. }
  25.  
  26. document.body.appendChild(form);
  27. form.submit();
  28. }
  29.  
  30. function findAll(needle, haystack) {
  31. const rx = new RegExp(needle, "g");
  32. const matches = [];
  33.  
  34. while ((match = rx.exec(haystack)) !== null) {
  35. matches.push(match);
  36. }
  37.  
  38. return matches;
  39. }
  40.  
  41. function getTicket(data) {
  42. const ticketMatches = findAll("ticket_form_element_name\":\"([^\"]+)\"", data);
  43. return ticketMatches[OPTIONS.ticketIndex][1];
  44. }
  45.  
  46. function isTicketAvailable(source) {
  47. const mediator = require('mediatorjs');
  48. const ticketData = mediator && mediator.get('ticketOrderOptions');
  49. if (ticketData && ticketData.collection) {
  50. const ticket = ticketData.collection[OPTIONS.ticketIndex];
  51. if (ticket && (ticket.status_is_sold_out || ticket.status_is_ended)) {
  52. throw new Error("SOLD OUT: " + ticket.status_is_sold_out + " or ENDED: " + ticket.status_is_ended);
  53. }
  54. }
  55.  
  56. const notOnSale = findAll("\"not_on_sale\":(true|false)+", source);
  57. if (notOnSale[OPTIONS.ticketIndex] && notOnSale[OPTIONS.ticketIndex][1] == "true")
  58. return false;
  59.  
  60. return true;
  61. }
  62.  
  63. var scheduler = initScheduler();
  64. var running = true;
  65.  
  66. function run() {
  67. checkLocation();
  68. $.get(location.href, (data) => {
  69. const ticket = getTicket(data);
  70.  
  71. if (!ticket || !isTicketAvailable(data)) {
  72. console.log("Unsuccessful: " + (new Date()).toLocaleTimeString());
  73. if (running) setTimeout(run, 500);
  74. return;
  75. }
  76.  
  77. const payload = {
  78. 'eid': $("form input[name=eid]").attr('value'),
  79. 'has_javascript': 1,
  80. [ticket]: OPTIONS.ticketQuantity
  81. };
  82.  
  83. console.log(payload);
  84. post("https://www.eventbrite.co.uk/orderstart", payload);
  85. });
  86. }
  87.  
  88. function stop() {
  89. if (!running) return "Already stopped";
  90. running = false;
  91. return "Stopped";
  92. }
  93.  
  94. function initScheduler() {
  95. if (typeof scheduler !== 'undefined') clearTimeout(scheduler);
  96. return null;
  97. }
  98.  
  99. $(document).ready(function() {
  100. checkLocation();
  101.  
  102. const diff = Date.parse(OPTIONS.startTime) - Date.now();
  103. const timeToStart = Math.max(0, diff || 0);
  104.  
  105. console.log(`Scheduled start in:` +
  106. `${Math.floor(timeToStart / (1000 * 60))}m ` +
  107. `${Math.floor(timeToStart / 1000)%60}s`);
  108.  
  109. scheduler = setTimeout(run, timeToStart);
  110. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement