Skip to content

Instantly share code, notes, and snippets.

@MPThLee
Last active May 30, 2026 18:58
Show Gist options
  • Select an option

  • Save MPThLee/3ccb554b9d882abc6313330e38e5dfaa to your computer and use it in GitHub Desktop.

Select an option

Save MPThLee/3ccb554b9d882abc6313330e38e5dfaa to your computer and use it in GitHub Desktop.
This code doesn't work anymore. I just decided to remove this code. You can check working code on comments.
/**
* !!!! This code doesn't work anymore !!!!
*
* - You can check working code on comments. I won't update this code anymore.
*
* Also, I just decided to remove this code. You can check revisions for old code.
* Since this code was made for discord client that almost 5 years ago, It seems like doesn't work anymore.
* I don't want people keep arguing in the comments, i decided to remove this code.
*
* Note: This code is now fulfilled with Javascript comments. This code won't work even if you pasted to console. doesn't do anything.
* Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#comments
**/
// Older gist description: Enable Discord Developer Menus in any environment except mobile app without BetterDiscord using Console.
@MichaelDavidGK

Copy link
Copy Markdown

@MichaelDavidGK then they likely removed the experiment, they do that sometimes

@Aholicknight I know that this might be the case, sadly :(
I hoped maybe someone knows how to check if it is deleted and if so then how to enable it
It's okay if not

@MichaelDavidGK

Copy link
Copy Markdown

@Aholicknight at least I found files and will implement them myself
If anyone wants them then here is list with links for all sounds including defaults:
https://pastebin.com/MRus2LZT
You can also download from here:
https://drive.google.com/drive/folders/11pvutTAZiIIHOdzWBRjYjhNrrIr0iCNC

@TheZoidMaster

Copy link
Copy Markdown

Is it safe to use this? Will I get banned? I probably should've asked BEFORE I started using it...

@Chirunos

Copy link
Copy Markdown

Is it safe to use this? Will I get banned? I probably should've asked BEFORE I started using it...

Whether it's safe or not, it depends on your point of view. Using it is against the Discord's terms of service, but no one has been banned for it yet

@rozivector

Copy link
Copy Markdown
let wpRequire;
window.webpackChunkdiscord_app.push([[ Math.random() ], {}, (req) => { wpRequire = req; }]);
mod = Object.values(wpRequire.c).find(x => typeof x?.exports?.Z?.isDeveloper !== "undefined");
usermod = Object.values(wpRequire.c).find(x => x?.exports?.default?.getUsers)
nodes = Object.values(mod.exports.Z._dispatcher._actionHandlers._dependencyGraph.nodes)
try {
    nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({user: {flags: 1}})
} catch (e) {}
oldGetUser = usermod.exports.default.__proto__.getCurrentUser;
usermod.exports.default.__proto__.getCurrentUser = () => ({hasFlag: () => true})
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["CONNECTION_OPEN"]()
usermod.exports.default.__proto__.getCurrentUser = oldGetUser

This code is still working until now. Pay attention when discord updates made, the code might not work in the future due updates.

@PoolloverNathan

PoolloverNathan commented May 30, 2023

Copy link
Copy Markdown
let wpRequire;
window.webpackChunkdiscord_app.push([[ Math.random() ], {}, (req) => { wpRequire = req; }]);
mod = Object.values(wpRequire.c).find(x => typeof x?.exports?.Z?.isDeveloper !== "undefined");
usermod = Object.values(wpRequire.c).find(x => x?.exports?.default?.getUsers)
nodes = Object.values(mod.exports.Z._dispatcher._actionHandlers._dependencyGraph.nodes)
try {
    nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({user: {flags: 1}})
} catch (e) {}
oldGetUser = usermod.exports.default.__proto__.getCurrentUser;
usermod.exports.default.__proto__.getCurrentUser = () => ({hasFlag: () => true})
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["CONNECTION_OPEN"]()
usermod.exports.default.__proto__.getCurrentUser = oldGetUser

This code is still working until now. Pay attention when discord updates made, the code might not work in the future due updates.

This now causes an almost-immediate crash due to certain properties not being functions - do not use.

@acendvgnt

Copy link
Copy Markdown

This now causes an almost-immediate crash due to certain properties not being functions - do not use.

@PoolloverNathan
That code has been broken since December of last year.
Use this instead.

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default; }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

@Eon48

Eon48 commented Jun 8, 2023

Copy link
Copy Markdown

I enabled a setting using ctrl-alt-o and now discord keeps crashing almost immediately when I open it on my pc, I've tried uninstalling it and nothing as well, any advice?
Edit: the setting in question was DevTools
Edit 2: Nevermind I figured it out, my dumbass didn't even think to clear the cache

@hapklaar

hapklaar commented Sep 6, 2023

Copy link
Copy Markdown

I was able to open experimental and tried the HDR stream fix, but it doesn't seem to do anything for me. Should this still be functional?

@securing-ab

Copy link
Copy Markdown
```js
let wpRequire;
window.webpackChunkdiscord_app.push([[ Math.random() ], {}, (req) => { wpRequire = req; }]);
mod = Object.values(wpRequire.c).find(x => typeof x?.exports?.Z?.isDeveloper !== "undefined");
usermod = Object.values(wpRequire.c).find(x => x?.exports?.default?.getUsers)
nodes = Object.values(mod.exports.Z._dispatcher._actionHandlers._dependencyGraph.nodes)
try {
    nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({user: {flags: 1}})
} catch (e) {}
oldGetUser = usermod.exports.default.__proto__.getNonImpersonatedCurrentUser;
usermod.exports.default.__proto__.getNonImpersonatedCurrentUser= () => ({isStaff: () => true})
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["CONNECTION_OPEN"]()
usermod.exports.default.__proto__.getNonImpersonatedCurrentUser= oldGetUser

Uncaught TypeError: Cannot read properties of undefined (reading 'exports')
at :5:27
(anonymous) @ VM933:5

@acendvgnt

Copy link
Copy Markdown

Uncaught TypeError: Cannot read properties of undefined (reading 'exports') at :5:27 (anonymous) @ VM933:5

@securing-ab
That code has been broken since December of last year.
Use this instead.

@Brazuca87

Copy link
Copy Markdown

Uncaught TypeError: Cannot read properties of undefined (reading 'exports') at :5:27 (anonymous) @ VM933:5

@securing-ab That code has been broken since December of last year. Use this instead.

ah... well, thanks for that... but that other code was definitely not broken since December... I was using it until last month just fine :)

@plowside

plowside commented Dec 1, 2023

Copy link
Copy Markdown

This now causes an almost-immediate crash due to certain properties not being functions - do not use.

@PoolloverNathan That code has been broken since December of last year. Use this instead.

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default; }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

until today, your code worked, now it gives such an error:

VM723:1 Uncaught TypeError: Cannot convert undefined or null to object
    at Function.values (<anonymous>)
    at <anonymous>:1:77
    at e (sentry.e8a5639a79578cb5d3a5.js:1:7629)
    at <anonymous>:1:25

@Mizari-Dev

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

@hexagonstudios0

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

This works as of Dec 6th, 2023.

@Windows200000

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Still works, January 13th 24

@ProdPreva1l

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Still works, March 22nd, 2024

@HeadTwerk

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Still works as of May 12th 24

@Lobby34

Lobby34 commented May 20, 2024

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Working as of 5/20/2024

@JuLY-LION

JuLY-LION commented May 29, 2024

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Working without issue 5/29/2024
Needs to be executed everytime you refresh or update Discord

@smugller

Copy link
Copy Markdown

Can someone make this as a plugin for BetterDiscord?

@Sneaky1000

Copy link
Copy Markdown

I found a correction

webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

Working without issue 5/29/2024 Needs to be executed everytime you refresh or update Discord

Same issue here. Does anyone know if there is a fix for this or a way to make this permanent?

@PoolloverNathan

PoolloverNathan commented Jun 15, 2024 via email

Copy link
Copy Markdown

@LordFoogThe4rd

Copy link
Copy Markdown

(BetterDiscord steals tokens, so I'd avoid using it on non-throwaway accounts.)

do you have anything to back this up or are you just speaking out of your ass

@JuLY-LION

Copy link
Copy Markdown

(BetterDiscord steals tokens, so I'd avoid using it on non-throwaway accounts.)

do you have anything to back this up or are you just speaking out of your ass

I've been using BetterDiscord for a long time and I haven't lost any account/bot tokens. If you or somebody you know lost their account running a shady plugin then that's on you.

@TymonKinneas

Copy link
Copy Markdown

Seems to have died as of 4/21/2025 again...

@acendvgnt

Copy link
Copy Markdown
  • added && x.exports.default._dispatcher._actionHandlers
webpackChunkdiscord_app.push([[Math.random()], {}, (e) => { if(e.c!=undefined){module = Object.values(e.c).find(x => x?.exports?.default?.getUsers && x.exports.default._dispatcher._actionHandlers).exports.default;} }]);
nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
try { nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({ user: { flags: 1 } }); } catch (e) { }
original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({ isStaff: () => true });
nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
[module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;

@insilications

Copy link
Copy Markdown

This seems to be working as of 04/22/2025:

(async function() {
    'use strict';
    setTimeout(async () => {
        let module;
        webpackChunkdiscord_app.push([
            [Math.random()], {}, (e) => {
                if (e.c != undefined) {
                    module = Object.values(e.c).find(x => x?.exports?.default?.getUsers && x.exports.default._dispatcher._actionHandlers).exports.default;
                }
            }
        ]);
        let nodes = Object.values(module._dispatcher._actionHandlers._dependencyGraph.nodes);
        try {
            nodes.find(x => x.name == "ExperimentStore").actionHandler["OVERLAY_INITIALIZE"]({
                user: {
                    flags: 1
                }
            });
        } catch (e) {}
        let original = [module.getCurrentUser, module.getNonImpersonatedCurrentUser];
        module.getCurrentUser = module.getNonImpersonatedCurrentUser = () => ({
            isStaff: () => true
        });
        nodes.find(x => x.name == "DeveloperExperimentStore").actionHandler["OVERLAY_INITIALIZE"]();
        [module.getCurrentUser, module.getNonImpersonatedCurrentUser] = original;


        let _mods;
        webpackChunkdiscord_app.push([
            [Symbol()], {},
            r => _mods = r.c
        ]);
        webpackChunkdiscord_app.pop();

        let findByProps = (...props) => {
            for (let m of Object.values(_mods)) {
                try {
                    if (!m.exports || m.exports === window) continue;
                    if (props.every((x) => m.exports?.[x])) return m.exports;

                    for (let ex in m.exports) {
                        if (props.every((x) => m.exports?.[ex]?.[x])) return m.exports[ex];
                    }
                } catch {}
            }
        }

        await findByProps('_dispatch').dispatch({
            type: 'EXPERIMENT_OVERRIDE_BUCKET',
            experimentId: '2021-09_favorites_server',
            experimentBucket: 1
        })
    }, 2600);
})();

This, in the code, for example, enables the 2021-09_favorites_server experiment:

await findByProps('_dispatch').dispatch({
    type: 'EXPERIMENT_OVERRIDE_BUCKET',
    experimentId: '2021-09_favorites_server',
    experimentBucket: 1
})

@PmikeGamer

Copy link
Copy Markdown

i cant get the inspect menu to work on my discord client, only on the web version

@boringparty

Copy link
Copy Markdown

i cant get the inspect menu to work on my discord client, only on the web version

when you open View > Developer Tools > Console, it won't let you paste initially. You may need to type allow pasting first. Once you've done that, you can paste these in and enable Experiments as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment