Auto-complete every Discord Quest in seconds — v4.5.3
Completes all Discord Quests automatically — game, video, stream, activity, and achievement quests. Paste one script into DevTools, get every reward. No installs, no tokens, no dependencies.
Works on every Discord update — no hardcoded paths, uses constructor.displayName for resilient module detection.
- Completes ALL quest types — Video, Game, Stream, Activity, and the new Achievement quests
- Auto-claiming — Claim rewards directly from the dashboard. Tries to claim automatically (if enabled), or provides a smart interactive button if captcha is needed
- Resilient module loader — finds Discord stores by class name, not minified paths. Survives Discord updates
- Smart rate limiting — exponential backoff on 429/5xx, skip-list for dead quests, randomized polling intervals. Distinguishes between global and endpoint limits, non-blocking retries
- Fault-tolerant execution — One failed quest won't break the queue (
Promise.allSettled) - Zero setup — single paste into the console. No Node.js, no npm, no extensions
Important
Discord Desktop client only. Orion hooks into Discord's internal webpack stores, which are only exposed in the desktop app (Stable, PTB, or Canary). It will not work in browser Discord, mobile Discord, or any web-based client — even with DevTools or script-injection extensions like Kiwi Browser. GAME and STREAM quests in particular are impossible outside the desktop client.
1. Open Discord (Canary recommended — console enabled by default)
2. Press Ctrl + Shift + I → Console tab
3. Paste index.js and hit Enter
Shift + .toggles the dashboard. Click STOP to kill it instantly.
Enable console on stable Discord
Close Discord, edit %appdata%/discord/settings.json:
{ "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true }Restart Discord.
Orion extracts Discord's internal webpack stores (QuestStore, RunStore, Dispatcher, etc.) and uses them to spoof game processes, send fake video progress, and dispatch heartbeat signals — all through Discord's own authenticated API client.
QuestStore → filter incomplete → JIT enroll → dispatch tasks → poll progress → auto-claim → done
| Quest type | What Orion does |
|---|---|
| Video | Sends fake video-progress timestamps with natural 7-9.5s polling intervals and precise float payloads |
| Game | Injects a spoofed process into RunStore with real metadata from Discord's app registry |
| Stream | Patches StreamStore.getStreamerActiveStreamMetadata with synthetic stream data |
| Activity | Heartbeats against a voice channel to simulate participation |
| Achievement | Monitors ACHIEVEMENT_IN_ACTIVITY events — requires joining the Activity manually |
Draggable overlay with persistent position. Live-sorts tasks so you always see what matters:
| Priority | State | Visual |
|---|---|---|
| 1st | Running (highest progress first) | Blue accent, animated progress bar |
| 2nd | Queued | Orange accent, dimmed |
| 3rd | Completed | Green checkmark + Interactive CLAIM button if manual action needed |
Desktop notifications fire on each quest completion.
You can configure Orion's claiming behavior via the TRY_TO_CLAIM_REWARD setting.
- Automated Claiming: If enabled, tries to claim instantly upon completion.
- In-UI Button: If auto-claim fails due to captcha, or is disabled, a CLAIM REWARD button appears directly on the task card.
Most settings are now configurable through the quest picker UI that appears before the script starts:
- Reward filters — Toggle quests by reward type (Orbs, Avatar Decorations, In-Game Items)
- Quest checkboxes — Select/deselect individual quests
- Auto-enroll — Automatically accept quests before running them (default: ON)
- Auto-claim — Attempt to claim rewards on completion (default: OFF to avoid captcha)
Advanced settings can still be tweaked in the CONFIG object before pasting:
const CONFIG = {
HIDE_ACTIVITY: false, // suppress "Playing..." from friends list
MAX_LOG_ITEMS: 60, // UI log limit
};| Scenario | Behavior |
|---|---|
| 429 / 5xx | Exponential backoff, re-queued up to MAX_RETRIES, distinguishes global vs endpoint limits |
| 404 on enroll | Quest added to skip-list, script continues |
| Repeated failures | Task abandoned after MAX_TASK_FAILURES consecutive errors |
| 25 min timeout | Task force-stopped, cycle advances |
| Missing modules | Required modules validated on boot; optional ones log a warning |
| Claim fails | Falls back to CLAIM button in dashboard |
| Fatal crash | Unconditionally releases window.orionLock so the script can be re-run without refreshing |
Single-file IIFE. No build tools, no external deps.
index.js
├─ CONFIG / SYS / RUNTIME tunables, frozen system limits, active cleanups
├─ ErrorHandler classifies HTTP errors (retry / skip / fatal)
├─ Logger DOM dashboard + task state + log output
├─ Traffic FIFO request queue with exponential backoff
├─ Patcher RunStore / StreamStore monkey-patching
├─ Tasks VIDEO, GAME, STREAM, ACTIVITY, ACHIEVEMENT handlers
├─ loadModules() resilient webpack extraction via constructor.displayName
└─ main() discover → JIT enroll → execute → claim → loop
Unlike other scripts that break on every Discord update, Orion finds stores by their class name (QuestStore, RunningGameStore, etc.) via constructor.displayName. The Dispatcher is found by structural signature (_subscriptions + subscribe + dispatch), and the API client by its unique .del method. No hardcoded minified paths.
For a full internal tour of the script, see docs/ARCHITECTURE.md.
Contributions are welcome — bug reports, PRs, and docs. Start with CONTRIBUTING.md for the checklist and code style. Use the issue templates when reporting bugs or requesting features.
- Pending state — Unenrolled quests now wait for manual acceptance in Discord instead of failing when auto-enroll is disabled.
- Ghost-task fix — Unenrolled and hidden quests no longer attempt execution or time out in the background.
- Claim button lock — Prevented API spam and visual state resets by locking the "Claim Reward" button during UI renders.
- Picker refactor — Moved UI logic inside
Loggerand switched to native HTML forms for resilient state collection. - Dynamic filters — Added Quest Type filtering.
- Fix NodeList error —
$$now returns a real Array so.every()works on visible quest cards. ResolvesTypeError: visible.every is not a functionwhen clicking (De)select All
- Fix (De)select All — The toggle button now correctly checks/unchecks visible quest checkboxes without hiding them. Reward filters remain independent. Button label syncs with actual checkbox state
- Quest picker UI — Script no longer starts immediately. A visual quest picker shows all available quests with checkboxes, color-coded by reward type (Orbs, Avatar Decorations, In-Game Items). Filter entire reward categories with one click, select/deselect individual quests, then hit START
- Options panel — Toggle auto-enroll and auto-claim directly from the picker UI before starting. No more editing CONFIG to control these behaviors
- Reward type filters — Pill buttons at the top let you enable/disable entire reward categories. Disabling "Orbs" hides and unchecks all Orb quests instantly
- JIT enrollment — Quests enroll one at a time right before execution instead of in bulk, eliminating mass-enrollment detection vectors
- Natural video polling — Replaced static 1s intervals with 7–9.5s polling using 6-decimal float timestamps that match native Chromium player behavior
- Randomized delays — All fixed-interval API calls now use randomized timing ranges to break predictable patterns
- Correct Windows PIDs — Fake game process IDs generated as multiples of 4 to comply with Windows NT kernel architecture
- Sequential execution — Both game and video tasks now run sequentially (concurrency = 1) to avoid parallel request spikes
- Proper cleanup — Removes
#orion-styleselement on shutdown, debug logging for previously silent catch blocks
- GO TO QUESTS button — Achievement quests in
RUNNINGstate now show anACTION REQUIREDstatus with a navigation button that uses Discord's native router (transitionTo('/quest-home')) to jump straight to the quest page - Resilient router detection — New
findRouter()locates Discord's minifiedtransitionToby source signature ("transitionTo -"), no hardcoded paths - Standardized log tags — Unified prefixes across the codebase (
[System],[Network],[Task],[Cycle],[Enroll],[Claim]) for consistent, readable output - Cleaner UI logs —
debuglevel messages now go to DevTools only and no longer spam the in-app dashboard - Achievement progress display — Progress text now omits the
s(seconds) suffix forACHIEVEMENTquests since their target is a count, not a duration - Fixed progress text updates — Restored missing
progress-textclass so live progress numbers update correctly on task cards
- Native UI Claiming: Added in-UI claiming via Claim Reward button.
- Rigid Configuration: Moved hardcoded system limits to a frozen
SYSobject and addedTRY_TO_CLAIM_REWARDconfig. - Fault-Tolerant Concurrency: Switched to
Promise.allSettledto prevent queue crashes on a single task failure. - Strict Garbage Collection: Added
RUNTIME.cleanupsto track and safely flush active event listeners on script stop. - RPC & Lock Failsafes: Forces dummy PID
9999to reliably clear "Playing" status, and releaseswindow.orionLockon fatal errors. - Granular Rate Limiting: Differentiates between global (queue-freezing) and endpoint-specific API limits.
- Resilient
loadModules()— usesconstructor.displayNameinstead of hardcoded.A/.Z/.Ay/.ZPpaths - Auto-claim rewards (optimistic POST + captcha fallback with CLAIM button)
- Adaptive video speed (6-22 API calls instead of 180 for 900s quests)
ACHIEVEMENT_IN_ACTIVITYhandler for milestone-based questsWATCH_VIDEO_ON_MOBILEprogress tracking fix- Task sorting by progress percentage
- Per-cycle try-catch for crash isolation
- Fixed scroll (After activating the script, it turned blue when hovered)
- Fixed Issue #5: enrollment 404 no longer crashes the script
- ErrorHandler module with retry/skip/fatal classification
- Traffic queue with exponential backoff for 5xx errors
- Skip-list for permanently failed quests
- Idempotent cleanup in GAME/STREAM handlers
This tool is for educational and research purposes only. Automating user actions violates Discord's Terms of Service. The developer is not responsible for any account suspensions or bans. Use at your own risk.
Built by syntt_
If this helped you, drop a star — it keeps the project alive.