IGN Avatar Upload Assistant with API Capture and Modify

Captures, modifies, and resends API requests when the upload button is clicked on IGN

Verze ze dne 22. 08. 2024. Zobrazit nejnovější verzi.

  1. // ==UserScript==
  2. // @name IGN Avatar Upload Assistant with API Capture and Modify
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.1
  5. // @description Captures, modifies, and resends API requests when the upload button is clicked on IGN
  6. // @author Your Name
  7. // @match https://www.ign.com/account/settings
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Função para exibir um alerta ao clicar no botão de upload
  16. function handleUploadButtonClick() {
  17. alert('Nesta etapa, você precisa enviar qualquer imagem. Isso serve apenas para capturar as informações da API. Tutorial para hospedar seu avatar: https://mamadordeviados.neocities.org/ Copia o link, mas envie o avatar antes de acessar o site. Sou burro se não o script buga kkk se bugar recarrega a página.');
  18. }
  19.  
  20. // Adiciona o listener ao botão de upload
  21. function addButtonClickListener() {
  22. const uploadButton = document.querySelector('.jsx-503626215.avatar-picker');
  23. if (uploadButton) {
  24. uploadButton.removeEventListener('click', handleUploadButtonClick);
  25. uploadButton.addEventListener('click', handleUploadButtonClick);
  26. }
  27. }
  28.  
  29. // Função para monitorar e capturar requisições de API
  30. function monitorAPIRequests() {
  31. const originalFetch = window.fetch;
  32.  
  33. window.fetch = async function(...args) {
  34. if (args[0].includes('https://mollusk.apis.ign.com/graphql') && args[1] && args[1].body) {
  35. console.log('Intercepted API request:');
  36. console.log('URL:', args[0]);
  37.  
  38. // Log dos cabeçalhos e corpo da requisição
  39. console.log('Original Headers:', args[1].headers);
  40. console.log('Original Body:', args[1].body);
  41.  
  42. try {
  43. // Converte o corpo da requisição para JSON e modifica os valores
  44. let requestBody = JSON.parse(args[1].body);
  45.  
  46. // Solicita ao usuário novos valores para avatarImageUrl e thumbnailUrl
  47. const newUrl = prompt('Digite o novo URL para avatarImageUrl e thumbnailUrl:', '');
  48.  
  49. if (newUrl !== null) {
  50. // Modifica apenas os campos necessários, mantendo o restante intacto
  51. requestBody.variables.userInput.avatarImageUrl = newUrl;
  52. requestBody.variables.userInput.thumbnailUrl = newUrl;
  53.  
  54. // Exibe os novos valores no console
  55. console.log('Modified Body:', requestBody);
  56.  
  57. // Envia a requisição com o corpo modificado
  58. const response = await originalFetch(args[0], {
  59. method: 'POST',
  60. headers: {
  61. ...args[1].headers,
  62. 'Content-Type': 'application/json',
  63. },
  64. body: JSON.stringify(requestBody)
  65. });
  66.  
  67. // Loga a resposta da requisição modificada
  68. const responseBody = await response.json();
  69. console.log('Response:', responseBody);
  70.  
  71. // Retorna a resposta da requisição modificada
  72. return new Response(JSON.stringify(responseBody), {
  73. status: response.status,
  74. statusText: response.statusText,
  75. headers: response.headers
  76. });
  77. } else {
  78. console.error('No URL provided. Request not sent.');
  79. }
  80. } catch (error) {
  81. console.error('Error modifying request:', error);
  82. }
  83. }
  84.  
  85. // Chama o fetch original se a URL não corresponder
  86. return originalFetch.apply(this, args);
  87. };
  88. }
  89.  
  90. // Adiciona o listener ao carregar a página
  91. addButtonClickListener();
  92.  
  93. // Inicia a observação do DOM para o botão de upload
  94. const observer = new MutationObserver(() => addButtonClickListener());
  95. observer.observe(document.body, { childList: true, subtree: true });
  96.  
  97. // Inicia o monitoramento das requisições API
  98. monitorAPIRequests();
  99.  
  100. })();