Inmersión profunda en Orion: Cómo funciona la automatización de quests en Discord y un vistazo al interior de Webpack
Discord lleva mucho tiempo intentando convertir su cliente en algo más que un simple messenger. No hace mucho se añadieron las quests. Ver un stream, jugar a un juego durante media hora o navegar por vídeos promocionales, y a cambio obtienes marcos de avatar, Orbs o decoraciones de perfil.
Dedicar tiempo a un juego en el que no tienes ningún interés es cuestionable como mínimo. Naturalmente, la comunidad se lanzó inmediatamente a buscar formas de hacer trampas en el cliente. El proyecto Orion del desarrollador nyxxbit es probablemente uno de los ejemplos más detallados de cómo hacer ingeniería inversa de los internos de Webpack de Discord directamente desde la consola del navegador.
Cómo funciona Orion bajo el capó
Orion viene en dos formatos: un script para la consola de DevTools y un plugin de Vencord. Simula estar jugando, viendo vídeos y actividad en canales de voz. Y todo esto sin instalar entornos pesados de Node.js ni emuladores externos.
La parte más interesante está oculta en la implementación técnica. Por lo general, estos scripts se rompen con cada actualización de Discord. Los desarrolladores del cliente ofuscan el build, los nombres de funciones se convierten en .A, .zP o _y sin sentido, lo que hace que las rutas codificadas dejen de funcionar al día siguiente.
El autor de Orion tomó un enfoque diferente. El script busca state managers internos (QuestStore, RunStore, StreamStore) por nombre de constructor — constructor.displayName. Para encontrar el Dispatcher, se verifica la estructura del objeto: la presencia de suscripciones y el método dispatch. Este enfoque sobrevive a la mayoría de los parches menores del cliente sin romperse.
Cinco tipos de quests y cómo hacerles trampas
Discord actualmente tiene cinco tipos de quests. Orion maneja cada una con su propia lógica:
- Quests de vídeo. El script envía timestamps
video-progresscon intervalos seudoaleatorios de 7 a 9 segundos y valores de fracciones de segundo. Esto imita con precisión el comportamiento del reproductor estándar de Chromium. - Tareas de juego. En lugar de lanzar un juego real, Orion inyecta un proceso falso en
RunStore, extrayendo IDs de aplicación reales del registro de Discord. - Streams. El script hace patch en
StreamStore.getStreamerActiveStreamMetadata, alimentando al cliente con metadatos de transmisión sintéticos. - Activities. Se envían heartbeats al canal de voz para simular la participación.
- Logros de actividad (
ACHIEVEMENT_IN_ACTIVITY). Antes bastaba con un simple heartbeat, pero Discord cerró ese loophole. Ahora el script solicita un token OAuth2 para la aplicación, genera un proxy ticket, envía progreso falso al servidordiscordsays.comy revoca inmediatamente los permisos otorgados.
Saltarse la protección del navegador y relay local
Con las quests de actividad, el desarrollador se topó con una limitación dura. La Content Security Policy (CSP) en el cliente de Discord prohíbe enviar fetch directos a dominios de terceros como discordsays.com desde el contexto del renderer.
Para sortear esta limitación en la versión de consola, se añadió Orion Relay al repositorio. Es un pequeño servidor HTTP local en PowerShell, literalmente solo 100 líneas de código. Al navegador se le permite conectarse a 127.0.0.1:* para interactuar con las superposiciones de juego, así que el userscript envía la solicitud al proxy local, que la reenvía a los servicios de Discord. Si estás usando Vencord, el módulo nativo del plugin hace esta solicitud directamente desde el proceso principal de Electron, donde CSP no se aplica.
Hay un riesgo real a considerar: Discord monitorea activamente la automatización de quests y marca patrones inusuales de envío de progreso. Mientras que la peor consecuencia solía ser simplemente no recibir un frame o skin, ahora el sistema emite strikes en toda la cuenta. El autor de Orion advierte explícitamente sobre esto al principio del README: la velocidad para obtener recompensas viene con un riesgo no nulo de que te baneen el perfil.
Comparación con alternativas
El enfoque de Orion no es el único en GitHub. Por ejemplo, el proyecto markterence/discord-quest-completer tomó el camino de una aplicación nativa en Rust y Tauri. En lugar de inyectar en la memoria de Discord, crea ejecutables falsos en el SO, engañando al sistema de detección de procesos de Windows.
Este método no toca los archivos ni la memoria del cliente y es estructuralmente más resistente a bans. Pero tiene desventajas: solo funciona con quests de juego regulares, ignorando vídeos y actividades, y es solo para Windows.
Interfaz y usabilidad
Orion tiene una superposición integrada en JS puro, maquetada usando las variables CSS nativas de Discord. Gracias a esto, se adapta a cualquier tema (Light, Dark, AMOLED).
Puedes filtrar quests por tipo de recompensa, desactivar la reclamación automática (para no activar un captcha) o configurar la aleatorización de retrasos entre ciclos para protegerse contra la detección.
¿Vale la pena probar?
Estudiar Orion vale la pena al menos para ver el elegante trabajo con los internos de Webpack y Electron desde un userscript normal. Es un gran ejemplo de ingeniería inversa de aplicaciones web de cliente y escritura de código resistente a actualizaciones.
Ejecutarlo en tu cuenta principal es bajo tu propio riesgo. Si decides experimentar, es mejor hacerlo en una cuenta descartable.
Proyectos relacionados