Análise Profunda do Orion: Como Funciona a Automação de Quests do Discord e um Mergulho nos Internals do Webpack
O Discord há muito tenta transformar seu cliente em algo mais do que apenas um mensageiro. Não faz muito tempo, foram adicionadas as quests. Assista a uma stream, jogue um jogo por meia hora, ou role por vídeos promocionais, e você recebe molduras de avatar, Orbs, ou decorações de perfil em troca.
Gastar tempo em um jogo no qual você não tem o menor interesse é questionável no mínimo. Naturalmente, a comunidade imediatamente correu para encontrar formas de enganar o cliente. O projeto Orion do desenvolvedor nyxxbit é provavelmente um dos exemplos mais detalhados de como reverter-engenhariar os internals do Webpack do Discord diretamente do console do navegador.
Como o Orion Funciona nos Bastidores
O Orion vem em dois formatos: um script para o console DevTools e um plugin do Vencord. Ele simula estar em jogos, assistindo vídeos e atividade em canais de voz. E faz isso sem instalar ambientes Node.js pesados ou emuladores externos.
A parte mais interessante está escondida na implementação técnica. Geralmente, esses scripts quebram com cada atualização do Discord. Os desenvolvedores do cliente ofuscam o build, nomes de funções se tornam sem sentido .A, .zP, ou _y, o que faz caminhos hardcoded pararem de funcionar no dia seguinte.
O autor do Orion adotou uma abordagem diferente. O script busca gerenciadores de estado internos (QuestStore, RunStore, StreamStore) pelo nome do construtor — constructor.displayName. Para encontrar o Dispatcher, a estrutura do objeto é verificada: a presença de subscriptions e o método dispatch. Essa abordagem sobrevive à maioria dos patches menores do cliente sem quebrar.
Cinco Tipos de Quests e Como Enganá-las
O Discord atualmente tem cinco tipos de quests. O Orion lida com cada uma com sua própria lógica:
- Quests de vídeo. O script envia timestamps
video-progresscom intervalos pseudo-aleatórios de 7–9 segundos e valores fracionários de segundo. Isso imita precisamente o comportamento do player padrão do Chromium. - Tarefas de jogos. Em vez de iniciar um jogo real, o Orion injeta um processo falso em
RunStore, puxando IDs de aplicação reais do registro do Discord. - Streams. O script faz patch em
StreamStore.getStreamerActiveStreamMetadata, alimentando o cliente com metadados de broadcast sintéticos. - Activities. Heartbeats são enviados para o canal de voz para simular participação.
- Conquistas de activities (
ACHIEVEMENT_IN_ACTIVITY). Um simples heartbeat costumava ser suficiente, mas o Discord fechou essa brecha. Agora o script solicita um token OAuth2 para a aplicação, gera um proxy ticket, envia progresso falso para o servidordiscordsays.com, e revoga imediatamente as permissões concedidas.
Bypassing Proteção do Navegador e Relay Local
Com as quests de activities, o desenvolvedor encontrou uma limitação difícil. A Content Security Policy (CSP) no cliente do Discord proíbe enviar fetch direto para domínios de terceiros como discordsays.com a partir do contexto do renderer.
Para contornar essa limitação na versão do console, o Orion Relay foi adicionado ao repositório. É um pequeno servidor HTTP local em PowerShell, literalmente apenas 100 linhas de código. O navegador tem permissão para conectar a 127.0.0.1:* para interagir com overlays de jogos, então o userscript envia a requisição para o proxy local, que repassa para os serviços do Discord. Se você estiver usando Vencord, o módulo nativo do plugin faz essa requisição diretamente do processo principal do Electron, onde a CSP não se aplica.
Há um risco real a considerar: o Discord monitora ativamente automação de quests e sinaliza padrões incomuns de envio de progresso. Enquanto a pior consequência costumava ser simplesmente não receber uma moldura ou skin, o sistema agora emite strikes em toda a conta. O autor do Orion explicitamente adverte sobre isso no início do README: a velocidade de obter recompensas vem com um risco não-zero de ter seu perfil banido.
Comparação com Alternativas
A abordagem do Orion não é a única no GitHub. Por exemplo, o projeto markterence/discord-quest-completer seguiu o caminho de uma aplicação nativa em Rust e Tauri. Em vez de injetar na memória do Discord, ele cria executáveis falsos no SO, enganando o sistema de detecção de processos do Windows.
Esse método não toca nos arquivos ou memória do cliente e é estruturalmente mais resistente a bans. Mas tem desvantagens: só funciona com quests de jogos normais, ignorando vídeos e activities, e é exclusivo para Windows.
Interface e Usabilidade
O Orion tem um overlay embutido em JS puro, disposto usando as variáveis CSS nativas do próprio Discord. Graças a isso, ele se adapta a qualquer tema (Light, Dark, AMOLED).
Você pode filtrar quests por tipo de recompensa, desabilitar auto-claim (para não enfrentar um captcha), ou configurar randomização de atrasos entre ciclos para proteção contra detecção.
Vale a Pena Experimentar
Estudar o Orion vale a pena pelo menos para ver o trabalho elegante com Webpack e internals do Electron a partir de um userscript comum. É um ótimo exemplo de engenharia reversa de aplicações web client-side e escrita de código resistente a atualizações.
Executar na sua conta principal é por sua conta e risco. Se decidir experimentar, é melhor fazer em uma conta descartável.
Projetos relacionados