Snippets

¿Qué son los snippets?

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.

¿Para qué sirven?

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

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

Medidas de seguridad

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.

Inyectar un script JS

1

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 {:

"DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true,
  1. Guarda el archivo y reinicia Discord.

Para Discord Web, puedes saltar este paso ya que las herramientas de desarrollador están disponibles por defecto en el navegador.

2

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.

3

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.


Colección de snippets

Experimentos de Discord

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

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.

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.

Solo funciona en la aplicación de escritorio de Discord, no en la versión web.

Acelerar vídeos para misiones

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

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:

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:

// 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

(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

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

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)

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


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.