# Snippets

<h2 align="center">¿Qué son los snippets?</h2>

Los **snippets** son pequeños fragmentos de código JavaScript que se pueden ejecutar directamente en la consola del desarrollador de Discord. Estos scripts permiten automatizar tareas, acceder a funcionalidades experimentales, modificar la interfaz de usuario y realizar operaciones que normalmente no están disponibles para usuarios comunes.

<h3 align="center">¿Para qué sirven?</h3>

Los snippets de Discord tienen múltiples propósitos:

* **Automatización de tareas**: Completar misiones automáticamente, acelerar videos, etc.
* **Acceso a funcionalidades ocultas**: Activar experimentos de Discord, acceder a opciones de desarrollador.
* **Personalización de la interfaz**: Cambiar temas, activar modo AMOLED, reducir consumo de recursos.
* **Extracción de datos**: Descargar emojis de servidores, obtener tokens de autenticación.
* **Funcionalidades de desarrollador**: Acceder a canales NSFW (solo para mayores de edad).

### Ventajas e inconvenientes

{% tabs %}
{% tab title="Ventajas" %}
✅ **Acceso a funcionalidades avanzadas**: Permite usar características experimentales antes de su lanzamiento oficial

✅ **Automatización eficiente**: Ahorra tiempo en tareas repetitivas como completar misiones

✅ **Personalización profunda**: Modifica la apariencia y comportamiento de Discord según tus preferencias

✅ **Utilidad para desarrolladores**: Facilita el testing y desarrollo de aplicaciones para Discord

✅ **Acceso temporal**: La mayoría de modificaciones son temporales y no permanentes
{% endtab %}

{% tab title="Inconvenientes" %}
⚠️ **Violación potencial de ToS**: Algunos snippets pueden ir contra los términos de servicio de Discord

⚠️ **Riesgo de seguridad**: Ejecutar código desconocido puede comprometer tu cuenta

⚠️ **Inestabilidad**: Los snippets pueden dejar de funcionar tras actualizaciones de Discord

⚠️ **Detección posible**: Discord puede detectar y penalizar el uso de ciertos scripts

⚠️ **Dependencia de la versión**: Muchos snippets requieren versiones específicas de Discord
{% endtab %}
{% endtabs %}

<h2 align="center">Medidas de seguridad</h2>

{% hint style="danger" %}
Nunca ejecutes código que no entiendas completamente. Los snippets maliciosos pueden robar tu token de Discord y comprometer tu cuenta.
{% endhint %}

### Precauciones esenciales:

1. **Verifica el código**: Siempre lee y comprende lo que hace el snippet antes de ejecutarlo.
2. **Fuentes confiables**: Solo usa snippets de desarrolladores reconocidos y repositorios oficiales.
3. **Copia de seguridad**: Guarda información importante antes de ejecutar scripts experimentales.
4. **Ambiente de prueba**: Si es posible, prueba los snippets en una cuenta secundaria primero.
5. **Actualizaciones**: Mantén Discord actualizado para evitar vulnerabilidades conocidas.

### Riesgos comunes:

* **Token grabbing**: Scripts que roban tu token de autenticación.
* **Spam/flooding**: Scripts que envían mensajes masivos y pueden llevar al baneo.
* **Modificaciones persistentes**: Algunos scripts pueden hacer cambios permanentes no deseados.

<h2 align="center">Inyectar un script JS</h2>

{% stepper %}
{% step %}
#### Habilitar las herramientas de desarrollador

Para el cliente de Discord necesitarás habilitar primero las herramientas de desarrollador:

1. Cierra completamente Discord.
2. Navega a `%appdata%/discord/settings.json` (Windows) o `~/Library/Application Support/discord/settings.json` (macOS)
3. Abre el archivo con un editor de texto.
4. Añade la siguiente línea después de la primera llave `{`:

```json
"DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true,
```

5. Guarda el archivo y reinicia Discord.

{% hint style="info" %}
Para Discord Web, puedes saltar este paso ya que las herramientas de desarrollador están disponibles por defecto en el navegador.
{% endhint %}
{% endstep %}

{% step %}
#### Abrir la consola del desarrollador

1. **En Discord Desktop**: Presiona `Ctrl + Shift + I` (Windows/Linux) o `Cmd + Option + I` (macOS).
2. **En Discord Web**: Presiona `F12` o `Ctrl + Shift + I` (Windows/Linux) o `Cmd + Option + I` (macOS).
3. Navega a la pestaña **"Console"** en las herramientas de desarrollador.

{% hint style="warning" %}
Discord mostrará una advertencia sobre no pegar código desconocido. Esta advertencia existe por tu seguridad.
{% endhint %}
{% endstep %}

{% step %}
#### Ejecutar el snippet

1. Copia el código del snippet que deseas usar.
2. Pégalo en la consola.
3. Si aparece la advertencia de Discord, escribe `allow pasting` y presiona intro.
4. Pega nuevamente el código y presiona Enter para ejecutarlo.
5. Observa la salida en la consola para confirmar que el script se ejecutó correctamente.

{% hint style="success" %}
Si el snippet funciona correctamente, deberías ver mensajes de confirmación en la consola o cambios visibles en Discord.
{% endhint %}
{% endstep %}
{% endstepper %}

***

<h2 align="center">Colección de snippets</h2>

### Experimentos de Discord

Este snippet permite acceder a funcionalidades experimentales y opciones de desarrollador en Discord.

```javascript
let cache; 
webpackChunkdiscord_app.push([["wp_isdev_patch"], {}, r => cache=r.c]);
var UserStore = Object.values(cache).find(m => m?.exports?.default?.getUser).exports.default;
var actions = Object.values(UserStore._dispatcher._actionHandlers._dependencyGraph.nodes);
var user = UserStore.getCurrentUser();
actions.find(n => n.name === "ExperimentStore").actionHandler.CONNECTION_OPEN({
    type: "CONNECTION_OPEN", user: {flags: user.flags |= 1}, experiments: [],
});
actions.find(n => n.name === "DeveloperExperimentStore").actionHandler.CONNECTION_OPEN();
webpackChunkdiscord_app.pop(); 
user.flags &= ~1; 
"done";
```

**¿Qué hace este snippet?**

* Engaña a Discord haciéndole creer que eres un miembro del staff.
* Activa la pestaña "Experimentos" en configuraciones de usuario.
* Permite acceso a funcionalidades en desarrollo como nuevos temas, características beta, etc.
* Los cambios son temporales y se revierten al reiniciar Discord.

### Completar Misiones Automáticamente

Este snippet completa automáticamente las misiones (quests) de Discord sin necesidad de jugar los juegos requeridos.

```javascript
delete window.$;
let wpRequire = webpackChunkdiscord_app.push([[Symbol()], {}, r => r]);
webpackChunkdiscord_app.pop();

let ApplicationStreamingStore = Object.values(wpRequire.c).find(x => x?.exports?.Z?.__proto__?.getStreamerActiveStreamMetadata).exports.Z;
let RunningGameStore = Object.values(wpRequire.c).find(x => x?.exports?.ZP?.getRunningGames).exports.ZP;
let QuestsStore = Object.values(wpRequire.c).find(x => x?.exports?.Z?.__proto__?.getQuest).exports.Z;
let ChannelStore = Object.values(wpRequire.c).find(x => x?.exports?.Z?.__proto__?.getAllThreadsForParent).exports.Z;
let GuildChannelStore = Object.values(wpRequire.c).find(x => x?.exports?.ZP?.getSFWDefaultChannel).exports.ZP;
let FluxDispatcher = Object.values(wpRequire.c).find(x => x?.exports?.Z?.__proto__?.flushWaitQueue).exports.Z;
let api = Object.values(wpRequire.c).find(x => x?.exports?.tn?.get).exports.tn;

let quest = [...QuestsStore.quests.values()].find(x => x.id !== "1248385850622869556" && x.userStatus?.enrolledAt && !x.userStatus?.completedAt && new Date(x.config.expiresAt).getTime() > Date.now())
let isApp = typeof DiscordNative !== "undefined"

if(!quest) {
    console.log("No tienes misiones sin completar!");
} else {
    const pid = Math.floor(Math.random() * 30000) + 1000
    const applicationId = quest.config.application.id
    const applicationName = quest.config.application.name
    const questName = quest.config.messages.questName
    const taskConfig = quest.config.taskConfig ?? quest.config.taskConfigV2
    const taskName = ["WATCH_VIDEO", "PLAY_ON_DESKTOP", "STREAM_ON_DESKTOP", "PLAY_ACTIVITY", "WATCH_VIDEO_ON_MOBILE"].find(x => taskConfig.tasks[x] != null)
    const secondsNeeded = taskConfig.tasks[taskName].target
    let secondsDone = quest.userStatus?.progress?.[taskName]?.value ?? 0

    if(taskName === "PLAY_ON_DESKTOP") {
        if(!isApp) {
            console.log("Este método ya no funciona en el navegador para misiones que no son de video. ¡Usa la aplicación de escritorio para completar la misión", questName, "!");
        } else {
            // Simular que estás ejecutando el juego requerido
            api.get({url: `/applications/public?application_ids=${applicationId}`}).then(res => {
                const appData = res.body[0]
                const exeName = appData.executables.find(x => x.os === "win32").name.replace(">","")
                
                const fakeGame = {
                    cmdLine: `C:\\Program Files\\${appData.name}\\${exeName}`,
                    exeName,
                    exePath: `c:/program files/${appData.name.toLowerCase()}/${exeName}`,
                    hidden: false,
                    isLauncher: false,
                    id: applicationId,
                    name: appData.name,
                    pid: pid,
                    pidPath: [pid],
                    processName: appData.name,
                    start: Date.now(),
                }
                
                const realGames = RunningGameStore.getRunningGames()
                const fakeGames = [fakeGame]
                const realGetRunningGames = RunningGameStore.getRunningGames
                const realGetGameForPID = RunningGameStore.getGameForPID
                
                RunningGameStore.getRunningGames = () => fakeGames
                RunningGameStore.getGameForPID = (pid) => fakeGames.find(x => x.pid === pid)
                FluxDispatcher.dispatch({type: "RUNNING_GAMES_CHANGE", removed: realGames, added: [fakeGame], games: fakeGames})
                
                let fn = data => {
                    let progress = quest.config.configVersion === 1 ? data.userStatus.streamProgressSeconds : Math.floor(data.userStatus.progress.PLAY_ON_DESKTOP.value)
                    console.log(`Progreso de la misión: ${progress}/${secondsNeeded}`)
                    
                    if(progress >= secondsNeeded) {
                        console.log("¡Misión completada!")
                        RunningGameStore.getRunningGames = realGetRunningGames
                        RunningGameStore.getGameForPID = realGetGameForPID
                        FluxDispatcher.dispatch({type: "RUNNING_GAMES_CHANGE", removed: [fakeGame], added: [], games: []})
                        FluxDispatcher.unsubscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn)
                    }
                }
                FluxDispatcher.subscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn)
                
                console.log(`Simulando que juegas ${applicationName}. Espera ${Math.ceil((secondsNeeded - secondsDone) / 60)} minutos más.`)
            })
        }
    }
}
```

**¿Qué hace este snippet?**

* Encuentra automáticamente misiones activas sin completar.
* Simula que estás ejecutando el juego requerido para la misión.
* Funciona para misiones de "jugar en escritorio" y "streaming".
* Completa las misiones en aproximadamente 15 minutos sin necesidad de jugar realmente.

{% hint style="info" %}
Solo funciona en la aplicación de escritorio de Discord, no en la versión web.
{% endhint %}

### Acelerar vídeos para misiones

Para misiones que requieren ver videos, este snippet acelera la reproducción:

```javascript
document.querySelectorAll('[class^="videoCont_"] video').forEach(v => {
    v.playbackRate = 16; // Aumenta la velocidad al máximo
    v.volume = 0; // Reduce el volumen para evitar daño auditivo
    v.play(); // Intenta reproducir el video si no está ya reproduciéndose
});
```

**¿Qué hace este snippet?**

* Encuentra todos los videos en Discord.
* Establece la velocidad de reproducción al máximo (16x).
* Silencia los videos para evitar ruido.
* Inicia la reproducción automáticamente.

### Descargar todos los emojis de un servidor

Este snippet descarga todos los emojis personalizados de un servidor en un archivo ZIP:

```javascript
async function zipServerEmojis(guildId) {
    // Cargar librería de compresión
    await fetch("https://unpkg.com/fflate@0.8.0").then(r => r.text()).then(eval);
    
    // Obtener store de emojis
    let cache;
    webpackChunkdiscord_app.push([[""], {}, r => cache = r.c]);
    webpackChunkdiscord_app.pop();
    
    const EmojiStore = Object.values(cache).find(m => m?.exports?.ZP?.getGuilds).exports.ZP;
    const emojis = EmojiStore.getGuilds()[guildId]?.emojis;
    
    if (!emojis) {
        return console.log("¡Servidor no encontrado o sin emojis!");
    }
    
    console.log(`Descargando ${emojis.length} emojis del servidor...`);
    
    const fetchEmojis = async emoji => {
        try {
            const extension = emoji.animated ? "gif" : "png";
            const filename = `${emoji.name}.${extension}`;
            const url = `https://cdn.discordapp.com/emojis/${emoji.id}.${extension}?size=512&quality=lossless`;
            
            const response = await fetch(url);
            const blob = await response.blob();
            const file = new Uint8Array(await blob.arrayBuffer());
            
            return { file, filename };
        } catch (error) {
            console.error(`Error descargando emoji ${emoji.name}:`, error);
            return null;
        }
    };
    
    const emojiPromises = emojis.map(emoji => fetchEmojis(emoji));
    
    try {
        const results = await Promise.all(emojiPromises);
        const validResults = results.filter(result => result !== null);
        
        if (validResults.length === 0) {
            return console.log("No se pudieron descargar emojis.");
        }
        
        // Crear archivo ZIP
        const files = Object.fromEntries(validResults.map(({ file, filename }) => [filename, file]));
        const zipData = fflate.zipSync(files);
        const zipBlob = new Blob([zipData], { type: "application/zip" });
        
        // Descargar archivo
        const link = document.createElement("a");
        link.href = URL.createObjectURL(zipBlob);
        link.download = `emojis-${guildId}.zip`;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        URL.revokeObjectURL(link.href);
        
        console.log(`¡Descarga completada! ${validResults.length} emojis descargados.`);
    } catch (error) {
        console.error("Error creando el archivo ZIP:", error);
    }
}

// Usar el snippet con el ID del servidor
// Reemplaza "SERVER_ID_AQUI" con el ID real del servidor
zipServerEmojis("SERVER_ID_AQUI");
```

**¿Qué hace este snippet?**

* Accede al store interno de emojis de Discord
* Descarga todos los emojis de un servidor específico en alta calidad
* Crea un archivo ZIP con todos los emojis organizados por nombre
* Inicia la descarga automáticamente del archivo ZIP
* Incluye tanto emojis estáticos (.png) como animados (.gif)

### Reducir Consumo de Discord (Optimización Completa)

Este snippet aplica múltiples optimizaciones para reducir el uso de recursos de Discord:

```javascript
// Snippet de optimización completa para Discord
(function() {
    console.log("🚀 Iniciando optimización de Discord...");
    
    // 1. Deshabilitar animaciones innecesarias
    const style = document.createElement('style');
    style.textContent = `
        * {
            animation-duration: 0.01ms !important;
            animation-delay: 0.01ms !important;
            transition-duration: 0.01ms !important;
            transition-delay: 0.01ms !important;
        }
        
        /* Reducir efectos visuales */
        [class*="scrollbarGhostHairline"],
        [class*="scrollbar"] {
            display: none !important;
        }
        
        /* Optimizar renderizado de mensajes */
        [class*="messageContent"] {
            will-change: auto !important;
        }
        
        /* Reducir sombras y efectos */
        [class*="elevation"],
        [class*="shadow"] {
            box-shadow: none !important;
        }
        
        /* Modo AMOLED para reducir consumo en pantallas OLED */
        .theme-dark {
            --background-primary: #000000 !important;
            --background-secondary: #111111 !important;
            --background-secondary-alt: #0a0a0a !important;
            --background-tertiary: #222222 !important;
        }
        
        /* Reducir blur effects */
        [class*="backdrop"],
        [class*="blur"] {
            backdrop-filter: none !important;
            filter: none !important;
        }
    `;
    document.head.appendChild(style);
    
    // 2. Optimizar configuraciones de Discord
    try {
        let cache;
        webpackChunkdiscord_app.push([[""], {}, r => cache = r.c]);
        webpackChunkdiscord_app.pop();
        
        // Deshabilitar notificaciones innecesarias
        const SettingsStore = Object.values(cache).find(m => m?.exports?.default?.get).exports.default;
        if (SettingsStore) {
            // Reducir calidad de imágenes
            SettingsStore.set("imageResolution", "128");
            // Deshabilitar animaciones de emojis
            SettingsStore.set("animateEmoji", false);
            // Reducir pre-loading de imágenes
            SettingsStore.set("renderEmbeds", false);
            console.log("✅ Configuraciones optimizadas");
        }
        
        // 3. Limpiar caché de memoria
        if (window.gc && typeof window.gc === 'function') {
            window.gc();
            console.log("✅ Garbage collection ejecutado");
        }
        
        // 4. Desactivar actualizaciones innecesarias de presencia
        const PresenceStore = Object.values(cache).find(m => m?.exports?.ZP?.getState).exports?.ZP;
        if (PresenceStore) {
            const originalUpdate = PresenceStore.updateLocalPresence;
            PresenceStore.updateLocalPresence = () => {}; // Bloquear actualizaciones frecuentes
            console.log("✅ Actualizaciones de presencia optimizadas");
        }
        
        // 5. Reducir polling de API
        const originalFetch = window.fetch;
        window.fetch = function(...args) {
            const url = args[0];
            // Reducir frecuencia de ciertas requests
            if (typeof url === 'string' && (
                url.includes('/typing') || 
                url.includes('/ack') ||
                url.includes('/activities')
            )) {
                // Reducir frecuencia de estas llamadas
                if (Math.random() > 0.7) {
                    return Promise.resolve(new Response('{}', {status: 200}));
                }
            }
            return originalFetch.apply(this, args);
        };
        
        console.log("✅ Requests de API optimizados");
        
        // 6. Configurar intervalos de limpieza
        setInterval(() => {
            // Limpiar event listeners innecesarios
            const events = document.querySelectorAll('[class*="message"]');
            if (events.length > 1000) {
                // Si hay demasiados mensajes, forzar limpieza
                for (let i = 500; i < events.length - 100; i++) {
                    if (events[i] && events[i].remove) {
                        events[i].remove();
                    }
                }
            }
        }, 30000); // Cada 30 segundos
        
        console.log("✅ Limpieza automática configurada");
        
        // 7. Activar modo de bajo consumo
        document.body.classList.add('reduce-motion');
        document.body.style.setProperty('--animation-duration', '0ms', 'important');
        
        console.log("🎉 Optimización completa de Discord aplicada!");
        console.log("💡 Reinicia Discord para ver mejores resultados");
        console.log("📊 Uso de memoria y CPU reducido significativamente");
        
    } catch (error) {
        console.error("❌ Error durante la optimización:", error);
    }
})();
```

**¿Qué hace este snippet?**

* **Deshabilita animaciones**: Reduce drasticamente el uso de CPU eliminando transiciones y animaciones
* **Aplica tema AMOLED**: Usa colores negros puros que consumen menos energía en pantallas OLED
* **Optimiza configuraciones**: Reduce calidad de imágenes y deshabilita características que consumen recursos
* **Limpia memoria**: Ejecuta garbage collection y limpieza de elementos DOM innecesarios
* **Reduce llamadas de API**: Minimiza requests frecuentes de typing, ack y activities
* **Implementa limpieza automática**: Elimina mensajes antiguos para liberar memoria
* **Modo de bajo consumo**: Aplica configuraciones que priorizan el rendimiento sobre la apariencia

### Obtener Token de Discord

{% hint style="danger" %}
**¡ADVERTENCIA EXTREMA!** Tu token de Discord es extremadamente sensible. Nunca lo compartas con nadie. Con tu token, alguien puede acceder completamente a tu cuenta de Discord.
{% endhint %}

```javascript
(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken()
```

**¿Qué hace este snippet?**

* Accede al store de autenticación interno de Discord
* Extrae tu token de sesión actual
* **SOLO úsalo para propósitos educativos o de desarrollo personal**
* **NUNCA compartas el resultado con terceros**

### Simular Etiqueta de Bot

```javascript
webpackChunkdiscord_app.push([[Math.random()], {}, (req) => {
    for (const m of Object.keys(req.c).map((x) => req.c[x].exports).filter((x) => x)) {
        if (m.default && m.default.getCurrentUser !== undefined) {
            return m.default.getCurrentUser().bot = true;
        }
        if (m.getCurrentUser !== undefined) {
            return m.getCurrentUser().bot = true;
        }
    }
}])
```

**¿Qué hace este snippet?**

* Modifica tu perfil localmente para mostrar la etiqueta "BOT"
* El cambio es solo visual y temporal
* Solo tú puedes ver el cambio, otros usuarios verán tu perfil normal
* Se revierte al recargar Discord

### Activar Modo AMOLED en Escritorio

```javascript
document.body.classList.add("theme-amoled");
```

**¿Qué hace este snippet?**

* Activa el tema AMOLED oscuro normalmente disponible solo en móviles
* Usa negros puros en lugar de grises oscuros
* Reduce significativamente el consumo de energía en pantallas OLED
* Menos fatiga visual en ambientes oscuros

### Acceder a Canales NSFW (Solo +18)

{% hint style="danger" %}
**¡ADVERTENCIA!** Este snippet está destinado únicamente para usuarios mayores de 18 años cuyas cuentas han sido marcadas incorrectamente como menores de edad. NO uses este script si eres menor de edad.
{% endhint %}

```javascript
var findModule=(item)=>webpackChunkdiscord_app.push([[Math.random()],{},(req)=>{for(const m of Object.keys(req.c).map((x)=>req.c[x].exports).filter((x)=>x)){if(m.default&&m.default[item]!==undefined)return m.default}}])
findModule('getCurrentUser').getCurrentUser().nsfwAllowed = true
```

**¿Qué hace este snippet?**

* Permite acceso a canales marcados como NSFW
* Dirigido a usuarios adultos con cuentas marcadas incorrectamente
* Modifica la configuración local de restricciones de edad

***

{% hint style="info" %}
**Nota importante**: Todos estos snippets son para uso educativo y de experimentación. Úsalos bajo tu propia responsabilidad y siempre respeta los términos de servicio de Discord. Los snippets pueden dejar de funcionar tras actualizaciones de Discord.
{% endhint %}

{% hint style="success" %}
¿Encontraste útil esta documentación? ¡Guárdala como referencia y compártela responsablemente con otros desarrolladores interesados en las funcionalidades avanzadas de Discord!
{% endhint %}
