Documentation Index
Fetch the complete documentation index at: https://mintlify.com/betterdiscord/betterdiscord/llms.txt
Use this file to discover all available pages before exploring further.
Discord’s client is built using webpack, which bundles all modules together. BetterDiscord provides powerful tools to find and use these internal modules.
Getting modules
The BdApi.Webpack namespace provides methods to search for and retrieve webpack modules.
Basic module search
Use getModule() to find a single module:
const module = BdApi.Webpack.getModule(
BdApi.Webpack.Filters.byKeys("sendMessage")
);
Use getModules() to find all matching modules:
const modules = BdApi.Webpack.getModules(
BdApi.Webpack.Filters.byKeys("sendMessage")
);
Wait for modules
Some modules may not be loaded immediately. Use waitForModule() to wait for them:
const module = await BdApi.Webpack.waitForModule(
BdApi.Webpack.Filters.byKeys("sendMessage")
);
You can cancel waiting using an AbortSignal:
const controller = new AbortController();
const module = await BdApi.Webpack.waitForModule(
BdApi.Webpack.Filters.byKeys("sendMessage"),
{ signal: controller.signal }
);
// Cancel if needed
controller.abort();
Filters
Filters help you find the exact modules you need. All filters are available under BdApi.Webpack.Filters.
byKeys
Find modules with specific property keys:
const filter = BdApi.Webpack.Filters.byKeys("sendMessage", "editMessage");
const module = BdApi.Webpack.getModule(filter);
byPrototypeKeys
Find modules with specific prototype properties:
const filter = BdApi.Webpack.Filters.byPrototypeKeys("render", "componentDidMount");
const Component = BdApi.Webpack.getModule(filter);
byStrings
Find modules containing specific strings in their code:
const filter = BdApi.Webpack.Filters.byStrings("INVALID_TOKEN", "LOGIN_ERROR");
const module = BdApi.Webpack.getModule(filter);
bySource
Find modules by source code content (supports regex):
const filter = BdApi.Webpack.Filters.bySource("sendMessage", /getMessage\(\w+\)/);
const module = BdApi.Webpack.getModule(filter);
byRegex
Find modules matching a regular expression:
const filter = BdApi.Webpack.Filters.byRegex(/send.*Message/);
const module = BdApi.Webpack.getModule(filter);
byDisplayName
Find React components by their display name:
const filter = BdApi.Webpack.Filters.byDisplayName("MessageContent");
const Component = BdApi.Webpack.getModule(filter);
byStoreName
Find Flux stores by name:
const filter = BdApi.Webpack.Filters.byStoreName("UserStore");
const UserStore = BdApi.Webpack.getModule(filter);
You can also use the shorthand:
const UserStore = BdApi.Webpack.getStore("UserStore");
combine
Combine multiple filters (all must match):
const filter = BdApi.Webpack.Filters.combine(
BdApi.Webpack.Filters.byKeys("sendMessage"),
BdApi.Webpack.Filters.byStrings("CHANNEL_ID")
);
not
Invert a filter (find modules that don’t match):
const filter = BdApi.Webpack.Filters.not(
BdApi.Webpack.Filters.byKeys("deprecated")
);
byComponentType
Find React functional components:
const filter = BdApi.Webpack.Filters.byComponentType(
(component) => component.toString().includes("UserModal")
);
Search options
defaultExport
Return the default export instead of the full module:
const sendMessage = BdApi.Webpack.getModule(
BdApi.Webpack.Filters.byKeys("sendMessage"),
{ defaultExport: true }
);
searchExports
Search through module exports instead of the module itself:
const module = BdApi.Webpack.getModule(
BdApi.Webpack.Filters.byKeys("sendMessage"),
{ searchExports: true }
);
raw
Return the raw webpack module:
const rawModule = BdApi.Webpack.getModule(
BdApi.Webpack.Filters.byKeys("sendMessage"),
{ raw: true }
);
Bulk queries
Retrieve multiple modules at once for better performance:
const [MessageStore, UserStore, ChannelStore] = BdApi.Webpack.getBulk(
BdApi.Webpack.Filters.byStoreName("MessageStore"),
BdApi.Webpack.Filters.byStoreName("UserStore"),
BdApi.Webpack.Filters.byStoreName("ChannelStore")
);
Or with keys for easier destructuring:
const { messages, users, channels } = BdApi.Webpack.getBulkKeyed({
messages: BdApi.Webpack.Filters.byStoreName("MessageStore"),
users: BdApi.Webpack.Filters.byStoreName("UserStore"),
channels: BdApi.Webpack.Filters.byStoreName("ChannelStore")
});
Mangled modules
Some Discord modules use minified/mangled property names. Use getMangled() to find them:
const module = BdApi.Webpack.getMangled(
BdApi.Webpack.Filters.byKeys("sendMessage"),
{
send: BdApi.Webpack.Filters.byKeys("content", "channelId"),
edit: BdApi.Webpack.Filters.byKeys("messageId")
}
);
// Use the found properties
module.send({ content: "Hello", channelId: "123" });
Direct access
By module ID
Access modules directly by their webpack ID:
const module = BdApi.Webpack.getById("12345");
All modules
Access all webpack modules:
const allModules = BdApi.Webpack.modules;
// Iterate through modules
for (const id in allModules) {
const module = allModules[id];
// Process module
}
Direct module access bypasses filters and safety checks. Use with caution.
Shorthand methods
BdApi provides convenient shorthand methods:
// Instead of getModule + Filters.byKeys
const module = BdApi.Webpack.getByKeys("sendMessage", "editMessage");
// Instead of getModule + Filters.byStrings
const module = BdApi.Webpack.getByStrings("INVALID_TOKEN");
// Instead of getModule + Filters.bySource
const module = BdApi.Webpack.getBySource("sendMessage", /getMessage/);
// Instead of getModule + Filters.byRegex
const module = BdApi.Webpack.getByRegex(/send.*Message/);
// Instead of getModule + Filters.byPrototypeKeys
const Component = BdApi.Webpack.getByPrototypeKeys("render");
All shorthand methods support the same options as getModule(). Use getAll* variants to get all matches:
const modules = BdApi.Webpack.getAllByKeys("sendMessage");
Best practices
- Cache module references instead of searching repeatedly
- Use specific filters to avoid finding the wrong module
- Combine multiple filters for more precise matches
- Use
waitForModule() for modules that load asynchronously
- Test your searches after Discord updates
Webpack module structure may change with Discord updates. Always test your code after updates.