Deep Dive into Orion: How Discord Quest Automation Works and Digging Into Webpack Internals
Discord has long been trying to turn its client into something more than just a messenger. Not long ago, quests were added. Watch a stream, play a game for half an hour, or scroll through promo videos, and you get avatar frames, Orbs, or profile decorations in return.
Spending time on a game you have zero interest in is questionable at best. Naturally, the community immediately rushed to find ways to game the client. The Orion project from developer nyxxbit is probably one of the most detailed examples of how to reverse-engineer Discord's Webpack internals directly from the browser console.
How Orion Works Under the Hood
Orion comes in two formats: a DevTools console script and a Vencord plugin. It simulates being in games, watching videos, and voice channel activity. And it does this without installing heavy Node.js environments or external emulators.
The most interesting part is hidden in the technical implementation. Usually, such scripts break with every Discord update. The client developers obfuscate the build, function names turn into meaningless .A, .zP, or _y, which causes hardcoded paths to stop working the very next day.
The author of Orion took a different approach. The script searches for internal state managers (QuestStore, RunStore, StreamStore) by constructor name — constructor.displayName. To find the Dispatcher, object structure is checked: the presence of subscriptions and the method dispatch. This approach survives most minor client patches without breaking.
Five Quest Types and How to Game Them
Discord currently has five quest types. Orion handles each with its own logic:
- Video quests. The script sends timestamps
video-progresswith pseudo-random intervals of 7–9 seconds and fractional second values. This precisely mimics the behavior of the standard Chromium player. - Game tasks. Instead of launching a real game, Orion injects a fake process into
RunStore, pulling real application IDs from the Discord registry. - Streams. The script patches
StreamStore.getStreamerActiveStreamMetadata, feeding the client synthetic broadcast metadata. - Activities. Heartbeats are sent to the voice channel to simulate participation.
- Activity achievements (
ACHIEVEMENT_IN_ACTIVITY). A simple heartbeat used to be enough, but Discord closed that loophole. Now the script requests an OAuth2 token for the application, generates a proxy ticket, sends fake progress to the serverdiscordsays.com, and immediately revokes the granted permissions.
Bypassing Browser Protection and Local Relay
With activity quests, the developer ran into a hard limitation. The Content Security Policy (CSP) in the Discord client forbids sending direct fetch to third-party domains like discordsays.com from the renderer context.
To work around this limitation in the console version, Orion Relay was added to the repository. It's a tiny local HTTP server in PowerShell, literally just 100 lines of code. The browser is allowed to connect to 127.0.0.1:* for interacting with game overlays, so the userscript sends the request to the local proxy, which forwards it to Discord's services. If you're using Vencord, the plugin's native module makes this request directly from the Electron main process, where CSP doesn't apply.
There's a real risk to consider: Discord actively monitors quest automation and flags unusual progress-sending patterns. While the worst consequence used to be simply not receiving a frame or skin, the system now issues account-wide strikes. The author of Orion explicitly warns about this right at the beginning of the README: the speed of getting rewards comes with a non-zero risk of getting your profile banned.
Comparison with Alternatives
The Orion approach isn't the only one on GitHub. For example, the project markterence/discord-quest-completer went the route of a native application in Rust and Tauri. Instead of injecting into Discord's memory, it creates fake executables in the OS, tricking Windows' process detection system.
This method doesn't touch the client's files or memory at all and is structurally more resistant to bans. But it has downsides: it only works with regular game quests, ignoring video and activities, and is Windows-only.
Interface and Usability
Orion has a built-in overlay in pure JS, laid out using Discord's own native CSS variables. Thanks to this, it adapts to any theme (Light, Dark, AMOLED).
You can filter quests by reward type, disable auto-claim (so you don't hit a captcha), or configure randomization of delays between cycles to protect against detection.
Is It Worth Trying
Studying Orion is worth it at least to see the elegant work with Webpack and Electron internals from a regular userscript. It's a great example of reverse-engineering client web applications and writing update-resistant code.
Running it on your main account is entirely at your own risk. If you decide to experiment, it's better to do it on a throwaway account.
Related projects