Duolingo Avatar Uploader

Agrega un botón para subir una foto como avatar en Duolingo

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Duolingo Avatar Uploader
// @namespace    http://yournamespace.com
// @version      0.1
// @description  Agrega un botón para subir una foto como avatar en Duolingo
// @author       Your Name
// @license      MIT
// @match        https://www.duolingo.com/settings/avatar
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Esperar a que la página esté completamente cargada
    window.addEventListener('load', function() {

        // Función para manejar la carga de la imagen
        function handleImageUpload(event) {
            const file = event.target.files[0]; // Obtener el archivo seleccionado
            if (file) {
                const formData = new FormData(); // Crear objeto FormData
                formData.append('avatar', file); // Agregar archivo al FormData

                // Enviar la imagen al servidor
                fetch('https://www.duolingo.com/api/1/avatar', {
                    method: 'POST',
                    body: formData
                })
                .then(response => {
                    if (response.ok) {
                        console.log('Imagen subida exitosamente');
                        // Recargar la página para ver el avatar actualizado
                        window.location.reload();
                    } else {
                        console.error('Error al subir la imagen');
                        alert('Hemos tenido problemas al procesar el envío. Por favor, inténtalo de nuevo.');
                    }
                })
                .catch(error => {
                    console.error('Error al subir la imagen:', error);
                    alert('Hubo un error al subir la imagen. Por favor, inténtalo de nuevo.');
                });
            }
        }

        // Encontrar el contenedor donde quieres agregar el botón (ajusta el selector según tu necesidad)
        const avatarSettingsContainer = document.querySelector('.avatar-settings-container');

        if (avatarSettingsContainer) {
            // Crear un botón personalizado para subir la imagen
            const uploadButton = document.createElement('button');
            uploadButton.textContent = 'Subir Imagen'; // Texto del botón
            uploadButton.addEventListener('click', function() {
                // Crear un input de tipo file al hacer clic en el botón
                const fileInput = document.createElement('input');
                fileInput.type = 'file'; // Establecer el tipo como 'file'
                fileInput.accept = 'image/*'; // Permitir solo archivos de imagen
                fileInput.style.display = 'none'; // Ocultar el input de forma inicial

                // Escuchar eventos de cambio en el input de tipo file
                fileInput.addEventListener('change', handleImageUpload);

                // Simular clic en el input de tipo file para abrir el selector de archivos
                fileInput.click();
            });

            // Agregar el botón al contenedor
            avatarSettingsContainer.appendChild(uploadButton);
        } else {
            console.error('No se encontró el contenedor para agregar el botón.');
        }

    });

})();