Plongée dans Orion : Comment fonctionne l'automatisation des quêtes Discord et exploration des rouages de Webpack
Discord essaie depuis longtemps de transformer son client en quelque chose de plus qu'un simple messenger. Récemment, des quêtes ont été ajoutées. Regardez un stream, jouez à un jeu pendant une demi-heure, ou faites défiler des vidéos promotionnelles, et vous recevez des cadres d'avatar, des Orbs ou des décorations de profil en retour.
Passer du temps sur un jeu qui ne vous intéresse absolument pas est pour le moins discutable. Naturellement, la communauté s'est immédiatement précipitée pour trouver des moyens de contourner le client. Le projet Orion du développeur nyxxbit est probablement l'un des exemples les plus détaillés de reverse-engineering des rouages internes de Webpack de Discord directement depuis la console du navigateur.
Comment Orion fonctionne en interne
Orion existe sous deux formats : un script pour la console DevTools et un plugin Vencord. Il simule la présence dans des jeux, le visionnage de vidéos et l'activité dans les salons vocaux. Et il fait cela sans installer d'environnements Node.js lourds ni d'émulateurs externes.
La partie la plus intéressante se cache dans l'implémentation technique. Habituellement, de tels scripts cassent à chaque mise à jour de Discord. Les développeurs du client obfusquent le build, les noms de fonctions deviennent des caractères sans signification .A, .zP ou _y, ce qui fait que les chemins codés en dur cessent de fonctionner dès le lendemain.
L'auteur d'Orion a adopté une approche différente. Le script recherche les gestionnaires d'état internes (QuestStore, RunStore, StreamStore) par nom de constructeur — constructor.displayName. Pour trouver le Dispatcher, la structure de l'objet est vérifiée : la présence de subscriptions et de la méthode dispatch. Cette approche survit à la plupart des petits patches du client sans casser.
Cinq types de quêtes et comment les contourner
Discord propose actuellement cinq types de quêtes. Orion gère chacune avec sa propre logique :
- Quêtes vidéo. Le script envoie des timestamps
video-progressavec des intervalles pseudo-aléatoires de 7 à 9 secondes et des valeurs en fractions de seconde. Cela imite précisément le comportement du lecteur Chromium standard. - Tâches de jeu. Au lieu de lancer un vrai jeu, Orion injecte un faux processus dans
RunStore, en extrayant les vrais IDs d'application du registre Discord. - Streams. Le script patch
StreamStore.getStreamerActiveStreamMetadata, en fournissant au client des métadonnées de diffusion synthétiques. - Activités. Des heartbeats sont envoyés au salon vocal pour simuler la participation.
- Succès d'activité (
ACHIEVEMENT_IN_ACTIVITY). Un simple heartbeat suffisait autrefois, mais Discord a comblé cette faille. Maintenant, le script demande un token OAuth2 pour l'application, génère un ticket proxy, envoie de fausses progressions au serveurdiscordsays.com, et révoque immédiatement les permissions accordées.
Contourner la protection du navigateur et relais local
Avec les quêtes d'activité, le développeur s'est heurté à une limitation stricte. La Content Security Policy (CSP) dans le client Discord interdit l'envoi de requêtes fetch directes vers des domaines tiers comme discordsays.com depuis le contexte du renderer.
Pour contourner cette limitation dans la version console, Orion Relay a été ajouté au dépôt. C'est un petit serveur HTTP local en PowerShell, littéralement juste 100 lignes de code. Le navigateur est autorisé à se connecter à 127.0.0.1:* pour interagir avec les superpositions de jeu, donc le userscript envoie la requête au proxy local, qui la transmet aux services de Discord. Si vous utilisez Vencord, le module natif du plugin effectue cette requête directement depuis le processus principal d'Electron, où la CSP ne s'applique pas.
Il y a un vrai risque à considérer : Discord surveille activement l'automatisation des quêtes et signale les schémas inhabituels d'envoi de progression. Là où la pire conséquence était autrefois de ne simplement pas recevoir un cadre ou un skin, le système émet maintenant des strikes à l'échelle du compte. L'auteur d'Orion met explicitement en garde dès le début du README : la vitesse d'obtention des récompenses s'accompagne d'un risque non nul de voir votre profil banni.
Comparaison avec les alternatives
L'approche d'Orion n'est pas la seule sur GitHub. Par exemple, le projet markterence/discord-quest-completer a choisi la voie d'une application native en Rust et Tauri. Au lieu d'injecter dans la mémoire de Discord, il crée de faux exécutables dans l'OS, en trompant le système de détection de processus de Windows.
Cette méthode ne touche pas aux fichiers ou à la mémoire du client et est structurellement plus resistente aux bans. Mais elle a des inconvénients : elle ne fonctionne qu'avec les quêtes de jeu normales, ignorant les vidéos et les activités, et elle est exclusive à Windows.
Interface et ergonomie
Orion dispose d'une superposition intégrée en JS pur, mise en page en utilisant les variables CSS natives de Discord. Grâce à cela, elle s'adapte à n'importe quel thème (Light, Dark, AMOLED).
Vous pouvez filtrer les quêtes par type de récompense, désactiver la réclamation automatique (pour ne pas tomber sur un captcha), ou configurer la randomisation des délais entre les cycles pour vous protéger contre la détection.
Cela vaut-il le coup d'essayer
Étudier Orion vaut le coup au moins pour voir le travail élégant avec les rouages de Webpack et d'Electron depuis un simple userscript. C'est un excellent exemple de reverse-engineering d'applications web côté client et d'écriture de code résistant aux mises à jour.
L'exécuter sur votre compte principal est entièrement à vos risques et périls. Si vous décidez d'expérimenter, mieux vaut le faire sur un compte jetable.
Projets similaires