SUPREME SIRI BOT (シュプリーム購入ボット)

  1. // ================================== SUPREME SIRI BOT =======================================
  2. // ================================= FIRST ONE OF ITS KIND ===================================
  3. // ================================= SHOW TREVOR SOME LOVE ===================================
  4. (function () {
  5. let keyWord = '+fuzzy';
  6. //example: +box,+logo,+hooded,-beanie
  7. let categories = ["Jackets", "Coats", "Shirts", "Tops/Sweaters", "Sweatshirts", "Pants", "Shorts", "T-Shirts", "Hats", "Bags", "Accessories", "Shoes", "Skate"]
  8. // 0 "Jackets",
  9. // 1 "Coats",
  10. // 2 "Shirts",
  11. // 3 "Tops/Sweaters",
  12. // 4 "Sweatshirts",
  13. // 5 "Pants",
  14. // 6 "Shorts",
  15. // 7 "T-Shirts",
  16. // 8 "Hats",
  17. // 9 "Bags",
  18. // 10 "Accessories",
  19. // 11 "Shoes",
  20. // 12 "Skate",
  21. let category = categories[0];
  22. let preferredSize = 'small'
  23. let preferColor = 'red';
  24. let autoCheckout = true;
  25. let checkout_delay = 500;
  26. let cnb = "1234123412341234";
  27. let month = "09";
  28. let year = "2026";
  29. let vval = "888";
  30. //=============================================================================================
  31. let startTime = null;
  32. let respondJSON = null;
  33. let isNew = true;
  34. let item_selected = false;
  35. let mobile_stock_api = "https://www.supremenewyork.com/mobile_stock.json";
  36. let event = document.createEvent('Event');
  37. event.initEvent('change', true, true);
  38. let notifyHeader = document.createElement('p');
  39. notifyHeader.style.cssText = "padding-left:120px;margin: auto;width: 100%;background-color: #ff00bb;";
  40. let refresh_count = 0;
  41. document.getElementsByTagName('header')[0].appendChild(notifyHeader);
  42. let retryFetch = async (url, options=null, retry=0) => {
  43. if (retry >= 4) return Promise.resolve(1);
  44. let res = await fetch(url, options);
  45. if (res.status !== 200) {
  46. await sleep(Math.min(retry * 500, 2 * 1000));
  47. return await retryFetch(url, options, retry + 1);
  48. } else {
  49. return await res.json();
  50. }
  51. };
  52. function matchKeyWord (itemName, keyWords) {
  53. let name = itemName.toLowerCase().trim();
  54. let keyWordsList = keyWords.toLowerCase().split(",");
  55. for (let i = 0; i < keyWordsList.length; i ++) {
  56. let word = keyWordsList[i].trim();
  57. if ((word.includes('+') && !name.includes(word.substr(1))) ||
  58. (word.includes('-') && name.includes(word.substr(1)))) {
  59. return false;
  60. }
  61. }
  62. return true;
  63. };
  64. let sleep = (ms) => {
  65. return new Promise(resolve => setTimeout(resolve, ms));
  66. };
  67. async function mobileAPIRefreshed(respond) {
  68. if (respond['products_and_categories'] == null || respond['products_and_categories']['new'] == null) {
  69. return false;
  70. }
  71. let newProducts = respond['products_and_categories']['new'];
  72. for (let index = 0; index < newProducts.length; index ++) {
  73. let item =newProducts[index];
  74. if (item != null && item['name'] != null && matchKeyWord(item['name'], keyWord)) {
  75. isNew = true;
  76. return true;
  77. }
  78. }
  79. let categoryProduct = respond['products_and_categories'][category];
  80. if (categoryProduct != undefined) {
  81. for (let index = 0; index < categoryProduct.length; index ++) {
  82. let item =categoryProduct[index];
  83. if (item != null && item['name'] != null && matchKeyWord(item['name'], keyWord)) {
  84. isNew = false;
  85. return true;
  86. }
  87. }
  88. }
  89. return false;
  90. }
  91. async function monitor() {
  92. if (!item_selected) {
  93. notifyHeader.innerHTML = 'searching for items...' + refresh_count;
  94. refresh_count ++;
  95. let refreshed = false;
  96. let respond = await retryFetch(mobile_stock_api);
  97. refreshed = respond == null ? false : await mobileAPIRefreshed(respond);
  98. if (refreshed) {
  99. respondJSON = respond;
  100. startTime = new Date();
  101. console.log("Detect Page refreshed with mobile endpoint at: " + startTime.toISOString());
  102. notifyHeader.innerHTML = "item(s) found!"
  103. window.location.href = isNew? 'https://www.supremenewyork.com/mobile/#categories/new' : ('https://www.supremenewyork.com/mobile/#categories/' + category);
  104. await sleep(230);
  105. start();
  106. return;
  107. } else {
  108. console.log("Not refreshed, retrying ...")
  109. await sleep(984);
  110. await monitor();
  111. return;
  112. }
  113. }
  114. }
  115. let start = () => {
  116. console.log("start!!");
  117. let items = document.getElementsByClassName("name");
  118. let selectedItem = null;
  119. if (items.length > 0) {
  120. notifyHeader.innerHTML = "checking out!";
  121. for (item of items) {
  122. let name = item.innerHTML;
  123. if (matchKeyWord(name, keyWord)) {
  124. startTime = new Date().getTime();
  125. selectedItem =item;
  126. selectedItem.click();
  127. break;
  128. }
  129. }
  130. if (selectedItem !== null) {
  131. (function waitTillItemClick() {
  132. items = document.getElementsByClassName("name");
  133. if (items.length > 0) {
  134. console.log('wait item click ...');
  135. selectedItem.click();
  136. setTimeout(function(){ waitTillItemClick(); }, 140);
  137. } else {
  138. return;
  139. }
  140. })();
  141. } else {
  142. sleep(90).then(start);
  143. }
  144. } else {
  145. sleep(150).then(start);
  146. }
  147. }
  148. (function waitTillArticlePageIsOpen() {
  149. console.log('wait item page ...');
  150. let atcBtn = document.getElementsByClassName("cart-button")[0];
  151. if (atcBtn) {
  152. addToCart();
  153. } else {
  154. setTimeout(function(){ waitTillArticlePageIsOpen(); }, 150);
  155. }
  156. return;
  157. })();
  158. async function addToCart(){
  159. if (document.getElementById('cart-update').children[0].innerHTML === "remove") {
  160. checkout();
  161. return;
  162. }
  163. notifyHeader.innerHTML = "Choosing Color";
  164. await chooseColor();
  165. notifyHeader.innerHTML = "Anti-Bot Delay";
  166. await sleep(89);
  167. notifyHeader.innerHTML = "Choosing Size";
  168. chooseSize();
  169. notifyHeader.innerHTML = "Show Trevor some love";
  170. await sleep(4);
  171. notifyHeader.innerHTML = "Sending to Checkout";
  172. await sleep(120);
  173. let atcBtn = document.getElementsByClassName("cart-button")[0];
  174. atcBtn.click();
  175. item_selected = true;
  176. (function waitTillCartUpdates() {
  177. let cart = document.getElementById("goto-cart-link").innerHTML;
  178. if (cart == '' || cart == 0) {
  179. setTimeout(function(){ waitTillCartUpdates(); }, 150);
  180. return;
  181. } else {
  182. // Click checkout button
  183. notifyHeader.innerHTML = "checking out.";
  184. checkout()
  185. return;
  186. }
  187. })();
  188. }
  189. async function chooseColor() {
  190. let image;
  191. let url = "/shop/"+window.location.hash.split("/")[1]+".json";
  192. let res = await fetch(url);
  193. let myJson = await res.json();
  194. for (item of myJson.styles){
  195. let color = item.name;
  196. if (checkAvaliability(item.sizes)) {
  197. let id = item.id;
  198. let imageID = "style-"+id;
  199. image = document.getElementById(imageID).getElementsByClassName("style-thumb")[0];
  200. if (color.toLowerCase().includes(preferColor.toLowerCase()) || preferColor.toLowerCase() === 'any') {
  201. image.click();
  202. break;
  203. }
  204. }
  205. }
  206. if (image !== undefined) {
  207. image.click();
  208. }
  209. }
  210. function checkAvaliability(sizes) {
  211. for (size of sizes) {
  212. if (size['stock_level'] > 0) {
  213. return true;
  214. }
  215. }
  216. return false;
  217. }
  218. function chooseSize(){
  219. let sizeOpts = document.getElementsByTagName("option");
  220. let sizeVal = sizeOpts[0].value
  221. for (let option of sizeOpts){
  222. let size = option.text.toLowerCase();
  223. if (size === preferredSize.toLowerCase() || size === 'N/A'){
  224. sizeVal = option.value;
  225. break;
  226. }
  227. }
  228. sizeOpts = document.getElementsByTagName("select")[0].value = sizeVal;
  229. }
  230. function checkout(){
  231. window.location.href = 'https://www.supremenewyork.com/mobile/#checkout';
  232. let checkoutBtn = document.getElementById("submit_button");
  233. waitTillCheckoutPageIsOpen();
  234. }
  235. async function waitTillCheckoutPageIsOpen() {
  236. checkoutBtn = document.getElementById("submit_button");
  237. if (checkoutBtn) {
  238. notifyHeader.innerHTML = "checking out..";
  239. if (document.getElementById("credit_card_n")) {
  240. await sleep(500);
  241. document.getElementById("credit_card_n").focus();
  242. document.getElementById("credit_card_n").value = cnb;
  243. }
  244. if (document.getElementById("credit_card_month")) {
  245. await sleep(400);
  246. document.getElementById("credit_card_month").focus();
  247. document.getElementById("credit_card_month").value = month;
  248. document.getElementById("credit_card_month").dispatchEvent(event);
  249. }
  250. if (document.getElementById("credit_card_year")) {
  251. await sleep(400);
  252. document.getElementById("credit_card_year").focus();
  253. document.getElementById("credit_card_year").value = year;
  254. document.getElementById("credit_card_year").dispatchEvent(event);
  255. }
  256. if (document.getElementById("cav")) {
  257. await sleep(300);
  258. document.getElementById("cav").focus();
  259. document.getElementById("cav").value = vval;
  260. }
  261. if (document.getElementById("credit_card_cvv")) {
  262. await sleep(500);
  263. document.getElementById("credit_card_cvv").focus();
  264. document.getElementById("credit_card_cvv").value = vval;
  265. }
  266. await sleep(299);
  267. document.getElementById("order_terms").click();
  268. notifyHeader.innerHTML = "checking out...";
  269. if (autoCheckout){
  270. notifyHeader.innerHTML = "captcha hit!";
  271. await sleep(checkout_delay);
  272. document.getElementById("hidden_cursor_capture").click();
  273. }
  274. console.log('paymentTime: ' + (new Date().getTime() - startTime) + ' ms');
  275. notifyHeader.remove();
  276. return;
  277. } else {
  278. setTimeout(async function(){ await waitTillCheckoutPageIsOpen(); }, 200);
  279. console.log("waiting..");
  280. }
  281. }
  282. monitor()
  283. })()
  284. completion()

連絡先: info@paste.jp
Created by Paste.jp - v7.0