Skip to content

Instantly share code, notes, and snippets.

@MPThLee
Last active April 25, 2024 05:50
Show Gist options
  • Save MPThLee/3ccb554b9d882abc6313330e38e5dfaa to your computer and use it in GitHub Desktop.
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.
@CapitanDirp
Copy link

Thanks for sharing updated code. I'm able to see the experiments but unfortunately the HDR Screen capture option doesn't work anymore, is that right?

It works, its just that the tonemapping isn't great. Its definitely better than standard.

Now I just need a way to make it stick through restarts of discord

You won't be able to do that, because the source code (Discords source code) is loaded every time your reload Discord and you would have to open console and paste it in there automatically if you "wanted it to stick with Discord restarts".

@acendvgnt
Copy link

Thanks for sharing updated code. I'm able to see the experiments but unfortunately the HDR Screen capture option doesn't work anymore, is that right?

It works, its just that the tonemapping isn't great. Its definitely better than standard.
Now I just need a way to make it stick through restarts of discord

You won't be able to do that, because the source code (Discords source code) is loaded every time your reload Discord and you would have to open console and paste it in there automatically if you "wanted it to stick with Discord restarts".

I use Tampermonkey to make it "stick".

@MichaelDavidGK
Copy link

any way to enable experiments that don't show up?

@Aholicknight
Copy link

any way to enable experiments that don't show up?

@MichaelDavidGK what do you mean "not show up"?

@MichaelDavidGK
Copy link

MichaelDavidGK commented Apr 3, 2023

@MichaelDavidGK what do you mean "not show up"?

@Aholicknight

There is list of all Experiments ever:
https://gist.github.com/XYZenix/95de40ff80091c0ff7b0cfd610bd10d7

Some of these are not in Experiments tab

there was a way to edit local storage keys, but it doesn't seem to work for 2021-04_april_fools

@Aholicknight
Copy link

@MichaelDavidGK what do you mean "not show up"?

@Aholicknight

There is list of all Experiments ever: XYZenix/95de40ff80091c0ff7b0cfd610bd10d7

@MichaelDavidGK Do you even know what these experiments do, or are you activating all of them at once and hoping for the best? If you do not know how to show the experiement, then don't bother with this. And most experiments won't work because you do not have access.

@MichaelDavidGK
Copy link

@MichaelDavidGK Do you even know what these experiments do, or are you activating all of them at once and hoping for the best? If you do not know how to show the experiement, then don't bother with this. And most experiments won't work because you do not have access.

@Aholicknight I used to have 2021-04_april_fools enabled, but somehow it doesn't work since discord added 2023-03_april_fools
I had it enabled even tho it was hidden in experiment tab

I am just asking if someone knows another way of enabling them except editing local storage keys

@Aholicknight
Copy link

@Aholicknight I used to have 2021-04_april_fools enabled, but somehow it doesn't work since discord added 2023-03_april_fools I had it enabled even tho it was hidden in experiment tab

I am just asking if someone knows another way of enabling them except editing local storage keys

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

@MichaelDavidGK
Copy link

@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

@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

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

@Gersonzao
Copy link

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

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
Copy link

PoolloverNathan commented May 30, 2023

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

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
Copy link

Eon48 commented Jun 8, 2023

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
Copy link

hapklaar commented Sep 6, 2023

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

```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

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

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
Copy link

plowside commented Dec 1, 2023

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-W
Copy link

Mizari-W commented Dec 1, 2023

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

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

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

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

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