Skip to main content

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.

Webpack is a utility class for getting internal webpack modules. This is extremely useful for interacting with the internals of Discord.

Properties

modules
Proxy
A Proxy that returns the module source by ID. Access modules directly: BdApi.Webpack.modules[123]
Stores
object
Collection of Discord’s Flux stores.

Filters

Series of filters to be used for finding webpack modules. Access via BdApi.Webpack.Filters.

byKeys

Generates a function that filters by a set of properties.
const filter = BdApi.Webpack.Filters.byKeys("sendMessage", "editMessage");
const module = BdApi.Webpack.getModule(filter);
keys
string...
required
Property names to search for.

byPrototypeKeys

Generates a function that filters by a set of properties on the object’s prototype.
const filter = BdApi.Webpack.Filters.byPrototypeKeys("render", "componentDidMount");
props
string...
required
Prototype property names to search for.

byRegex

Generates a function that filters by a regex.
const filter = BdApi.Webpack.Filters.byRegex(/sendMessage/);
regex
RegExp
required
Regular expression to test against module source code.

bySource

Generates a function that filters by source code content.
const filter = BdApi.Webpack.Filters.bySource("MESSAGE_CREATE", /dispatch/);
searches
Array<RegExp | string>
required
Strings or regexes to search for in the module source.

byStrings

Generates a function that filters by strings.
const filter = BdApi.Webpack.Filters.byStrings("Hello", "World");
strings
string...
required
Strings to search for.

byDisplayName

Generates a function that filters by the displayName property.
const filter = BdApi.Webpack.Filters.byDisplayName("MessageContent");
name
string
required
Display name to search for.

byStoreName

Generates a function that filters by a specific internal Store name.
const filter = BdApi.Webpack.Filters.byStoreName("UserStore");
name
string
required
Store name to search for.

combine

Generates a combined function from a list of filters.
const filter = BdApi.Webpack.Filters.combine(
    BdApi.Webpack.Filters.byKeys("sendMessage"),
    BdApi.Webpack.Filters.byStrings("MESSAGE_CREATE")
);
filters
Filter...
required
Filters to combine.

not

Generates a filter that returns the opposite of the passed filter.
const filter = BdApi.Webpack.Filters.not(BdApi.Webpack.Filters.byKeys("sendMessage"));
filter
Filter
required
Filter to invert.

byComponentType

Generates a filter to search React functional components.
const filter = BdApi.Webpack.Filters.byComponentType(m => m.displayName === "MyComponent");
filter
ExportedOnlyFilter
required
Filter function to apply to React components.

Methods

getModule

Finds a single webpack module matching the filter.
const MessageModule = BdApi.Webpack.getModule(m => m.sendMessage && m.editMessage);
filter
Filter
required
Function to filter modules. Should return true for a match.
options
object
Options to customize the search.
Returns: The found module or undefined

getModules

Finds all webpack modules matching the filter.
const allMessageModules = BdApi.Webpack.getModules(m => m.sendMessage);
filter
Filter
required
Function to filter modules.
options
object
Same options as getModule (except first is always false).
Returns: Array - Array of found modules

getByKeys

Finds a module with specific property keys.
const module = BdApi.Webpack.getByKeys("sendMessage", "editMessage");
props
string...
required
Property names to search for.
options
object
Optional options object (same as getModule).
Returns: The found module or undefined

getAllByKeys

Finds all modules with specific property keys.
const modules = BdApi.Webpack.getAllByKeys("render", "type");
props
string...
required
Property names to search for.
options
object
Optional options object.
Returns: Array - Array of found modules

getByPrototypeKeys

Finds a module by prototype property keys.
const module = BdApi.Webpack.getByPrototypeKeys("render", "componentDidMount");
prototypes
string...
required
Prototype property names to search for.
options
object
Optional options object.
Returns: The found module or undefined

getAllByPrototypeKeys

Finds all modules by prototype property keys.
const modules = BdApi.Webpack.getAllByPrototypeKeys("render");
prototypes
string...
required
Prototype property names to search for.
options
object
Optional options object.
Returns: Array - Array of found modules

getByStrings

Finds a module containing specific strings.
const module = BdApi.Webpack.getByStrings("MESSAGE_CREATE", "TYPING_START");
strings
string...
required
Strings to search for.
options
object
Optional options object.
Returns: The found module or undefined

getAllByStrings

Finds all modules containing specific strings.
const modules = BdApi.Webpack.getAllByStrings("MESSAGE_CREATE");
strings
string...
required
Strings to search for.
options
object
Optional options object.
Returns: Array - Array of found modules

getBySource

Finds a module by source code content.
const module = BdApi.Webpack.getBySource("sendMessage", /MESSAGE_CREATE/);
searches
(string | RegExp)...
required
Strings or regexes to search for in source code.
options
object
Optional options object.
Returns: The found module or undefined

getAllBySource

Finds all modules by source code content.
const modules = BdApi.Webpack.getAllBySource(/dispatch/);
searches
(string | RegExp)...
required
Strings or regexes to search for in source code.
options
object
Optional options object.
Returns: Array - Array of found modules

getByRegex

Finds a module matching a regex pattern.
const module = BdApi.Webpack.getByRegex(/sendMessage/);
regex
RegExp
required
Regular expression to test against.
options
object
Optional options object.
Returns: The found module or undefined

getAllByRegex

Finds all modules matching a regex pattern.
const modules = BdApi.Webpack.getAllByRegex(/Message/);
regex
RegExp
required
Regular expression to test against.
options
object
Optional options object.
Returns: Array - Array of found modules

getWithKey

Finds a module and returns both the module and the key it was found on.
const [module, key] = BdApi.Webpack.getWithKey(m => m.prototype?.render);
filter
ExportedOnlyFilter
required
Filter function for exported values.
options
object
Options object (excludes first option).
Returns: [module, key] - Tuple of module and the key it was found on

getMangled

Finds a module and extracts mangled/minified property names.
const {send, edit} = BdApi.Webpack.getMangled(
    m => m.sendMessage,
    {
        send: m => m.toString().includes("MESSAGE_CREATE"),
        edit: m => m.toString().includes("MESSAGE_UPDATE")
    }
);
filter
Filter | string | RegExp
required
Filter to find the base module.
mangled
object
required
Object mapping desired names to filters for finding the actual property.
options
object
Optional options object.
Returns: Object with requested properties mapped to their actual values

getBulk

Finds multiple modules in a single operation for better performance.
const [UserStore, GuildStore, ChannelStore] = BdApi.Webpack.getBulk(
    BdApi.Webpack.Filters.byStoreName("UserStore"),
    BdApi.Webpack.Filters.byStoreName("GuildStore"),
    BdApi.Webpack.Filters.byStoreName("ChannelStore")
);
queries
BulkQueries...
required
Multiple filter queries.
Returns: Array - Array of found modules in the same order as queries

getBulkKeyed

Finds multiple modules and returns them as a keyed object.
const {UserStore, GuildStore} = BdApi.Webpack.getBulkKeyed({
    UserStore: BdApi.Webpack.Filters.byStoreName("UserStore"),
    GuildStore: BdApi.Webpack.Filters.byStoreName("GuildStore")
});
queries
object
required
Object mapping desired names to filter queries.
Returns: Object with requested keys mapped to found modules

waitForModule

Waits for a module to be loaded and returns a promise that resolves when found.
const module = await BdApi.Webpack.waitForModule(m => m.someNewFeature);
filter
Filter
required
Filter function to find the module.
options
object
Options to customize the wait behavior.
Returns: Promise - Promise that resolves to the found module

getStore

Gets a Flux store by name.
const UserStore = BdApi.Webpack.getStore("UserStore");
name
string
required
Name of the store to retrieve.
Returns: The requested Flux store or undefined

getById

Gets a webpack module by its numeric ID.
const module = BdApi.Webpack.getById(12345);
id
PropertyKey
required
The webpack module ID.
Returns: The webpack module or undefined

Examples

Finding the message sender module

const MessageActions = BdApi.Webpack.getByKeys("sendMessage", "editMessage");
MessageActions.sendMessage(channelId, {content: "Hello!"});

Finding a React component

const MessageContent = BdApi.Webpack.getModule(
    m => m?.type?.displayName === "MessageContent"
);

Using bulk queries for performance

const {UserStore, GuildStore, ChannelStore} = BdApi.Webpack.getBulkKeyed({
    UserStore: BdApi.Webpack.Filters.byStoreName("UserStore"),
    GuildStore: BdApi.Webpack.Filters.byStoreName("GuildStore"),
    ChannelStore: BdApi.Webpack.Filters.byStoreName("ChannelStore")
});

const currentUser = UserStore.getCurrentUser();