IGN Avatar Upload Assistant with API Capture and Modify

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

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         IGN Avatar Upload Assistant with API Capture and Modify
// @namespace    http://tampermonkey.net/
// @version      2.1
// @description  Captures, modifies, and resends API requests when the upload button is clicked on IGN
// @author       Your Name
// @match        https://www.ign.com/account/settings
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Função para exibir um alerta ao clicar no botão de upload
    function handleUploadButtonClick() {
        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.');
    }

    // Adiciona o listener ao botão de upload
    function addButtonClickListener() {
        const uploadButton = document.querySelector('.jsx-503626215.avatar-picker');
        if (uploadButton) {
            uploadButton.removeEventListener('click', handleUploadButtonClick);
            uploadButton.addEventListener('click', handleUploadButtonClick);
        }
    }

    // Função para monitorar e capturar requisições de API
    function monitorAPIRequests() {
        const originalFetch = window.fetch;

        window.fetch = async function(...args) {
            if (args[0].includes('https://mollusk.apis.ign.com/graphql') && args[1] && args[1].body) {
                console.log('Intercepted API request:');
                console.log('URL:', args[0]);

                // Log dos cabeçalhos e corpo da requisição
                console.log('Original Headers:', args[1].headers);
                console.log('Original Body:', args[1].body);

                try {
                    // Converte o corpo da requisição para JSON e modifica os valores
                    let requestBody = JSON.parse(args[1].body);

                    // Solicita ao usuário novos valores para avatarImageUrl e thumbnailUrl
                    const newUrl = prompt('Digite o novo URL para avatarImageUrl e thumbnailUrl:', '');

                    if (newUrl !== null) {
                        // Modifica apenas os campos necessários, mantendo o restante intacto
                        requestBody.variables.userInput.avatarImageUrl = newUrl;
                        requestBody.variables.userInput.thumbnailUrl = newUrl;

                        // Exibe os novos valores no console
                        console.log('Modified Body:', requestBody);

                        // Envia a requisição com o corpo modificado
                        const response = await originalFetch(args[0], {
                            method: 'POST',
                            headers: {
                                ...args[1].headers,
                                'Content-Type': 'application/json',
                            },
                            body: JSON.stringify(requestBody)
                        });

                        // Loga a resposta da requisição modificada
                        const responseBody = await response.json();
                        console.log('Response:', responseBody);

                        // Retorna a resposta da requisição modificada
                        return new Response(JSON.stringify(responseBody), {
                            status: response.status,
                            statusText: response.statusText,
                            headers: response.headers
                        });
                    } else {
                        console.error('No URL provided. Request not sent.');
                    }
                } catch (error) {
                    console.error('Error modifying request:', error);
                }
            }

            // Chama o fetch original se a URL não corresponder
            return originalFetch.apply(this, args);
        };
    }

    // Adiciona o listener ao carregar a página
    addButtonClickListener();

    // Inicia a observação do DOM para o botão de upload
    const observer = new MutationObserver(() => addButtonClickListener());
    observer.observe(document.body, { childList: true, subtree: true });

    // Inicia o monitoramento das requisições API
    monitorAPIRequests();

})();