@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
127 lines (125 loc) • 6.84 kB
JavaScript
"use strict";
const require_lib_types_Enums = require('./types/Enums.cjs');
const require_lib_types_Events = require('./types/Events.cjs');
const require_lib_utils_application_commands_ApplicationCommandRegistries = require('./utils/application-commands/ApplicationCommandRegistries.cjs');
const require_lib_plugins_PluginManager = require('./plugins/PluginManager.cjs');
const require_optional_listeners_application_command_registries_listeners__load = require('../optional-listeners/application-command-registries-listeners/_load.cjs');
const require_optional_listeners_error_listeners__load = require('../optional-listeners/error-listeners/_load.cjs');
const require_optional_listeners_message_command_listeners__load = require('../optional-listeners/message-command-listeners/_load.cjs');
const require_lib_structures_ArgumentStore = require('./structures/ArgumentStore.cjs');
const require_lib_structures_CommandStore = require('./structures/CommandStore.cjs');
const require_lib_structures_InteractionHandlerStore = require('./structures/InteractionHandlerStore.cjs');
const require_lib_structures_ListenerStore = require('./structures/ListenerStore.cjs');
const require_lib_structures_PreconditionStore = require('./structures/PreconditionStore.cjs');
const require_lib_utils_logger_ILogger = require('./utils/logger/ILogger.cjs');
const require_lib_utils_logger_Logger = require('./utils/logger/Logger.cjs');
require('../arguments/_load.cjs');
require('../listeners/_load.cjs');
require('../preconditions/_load.cjs');
let __sapphire_pieces = require("@sapphire/pieces");
let discord_js = require("discord.js");
//#region src/lib/SapphireClient.ts
__sapphire_pieces.container.applicationCommandRegistries = { acquire: require_lib_utils_application_commands_ApplicationCommandRegistries.acquire };
/**
* The base {@link Client} extension that makes Sapphire work. When building a Discord bot with the framework, the developer
* must either use this class, or extend it.
*
* Sapphire also automatically detects the folders to scan for pieces, please read {@link StoreRegistry.registerPath}
* for reference. This method is called at the start of the {@link SapphireClient.login} method.
*
* @see {@link SapphireClientOptions} for all options available to the Sapphire Client. You can also provide all of discord.js' [ClientOptions](https://discord.js.org/docs/packages/discord.js/main/ClientOptions:Interface)
*
* @since 1.0.0
* @example
* ```typescript
* const client = new SapphireClient({
* presence: {
* activity: {
* name: 'for commands!',
* type: 'LISTENING'
* }
* }
* });
*
* client.login(process.env.DISCORD_TOKEN)
* .catch(console.error);
* ```
*
* @example
* ```typescript
* // Automatically scan from a specific directory, e.g. the main
* // file is at `/home/me/bot/index.js` and all your pieces are at
* // `/home/me/bot/pieces` (e.g. `/home/me/bot/pieces/commands/MyCommand.js`):
* const client = new SapphireClient({
* baseUserDirectory: join(__dirname, 'pieces'),
* // More options...
* });
* ```
*
* @example
* ```typescript
* // Opt-out automatic scanning:
* const client = new SapphireClient({
* baseUserDirectory: null,
* // More options...
* });
* ```
*/
var SapphireClient = class SapphireClient extends discord_js.Client {
constructor(options) {
super(options);
this.id = null;
__sapphire_pieces.container.client = this;
for (const plugin of SapphireClient.plugins.values(require_lib_types_Enums.PluginHook.PreGenericsInitialization)) {
plugin.hook.call(this, options);
this.emit(require_lib_types_Events.Events.PluginLoaded, plugin.type, plugin.name);
}
this.logger = options.logger?.instance ?? new require_lib_utils_logger_Logger.Logger(options.logger?.level ?? require_lib_utils_logger_ILogger.LogLevel.Info);
__sapphire_pieces.container.logger = this.logger;
if (options.enableLoaderTraceLoggings ?? __sapphire_pieces.container.logger.has(require_lib_utils_logger_ILogger.LogLevel.Trace)) __sapphire_pieces.Store.logger = __sapphire_pieces.container.logger.trace.bind(__sapphire_pieces.container.logger);
this.stores = __sapphire_pieces.container.stores;
this.fetchPrefix = options.fetchPrefix ?? (() => this.options.defaultPrefix ?? null);
this.disableMentionPrefix = options.disableMentionPrefix;
for (const plugin of SapphireClient.plugins.values(require_lib_types_Enums.PluginHook.PreInitialization)) {
plugin.hook.call(this, options);
this.emit(require_lib_types_Events.Events.PluginLoaded, plugin.type, plugin.name);
}
this.id = options.id ?? null;
this.stores.register(new require_lib_structures_ArgumentStore.ArgumentStore()).register(new require_lib_structures_CommandStore.CommandStore()).register(new require_lib_structures_InteractionHandlerStore.InteractionHandlerStore()).register(new require_lib_structures_ListenerStore.ListenerStore()).register(new require_lib_structures_PreconditionStore.PreconditionStore());
if (options.loadApplicationCommandRegistriesStatusListeners !== false) require_optional_listeners_application_command_registries_listeners__load.loadApplicationCommandRegistriesListeners();
if (options.loadDefaultErrorListeners !== false) require_optional_listeners_error_listeners__load.loadErrorListeners();
if (options.loadMessageCommandListeners === true) require_optional_listeners_message_command_listeners__load.loadMessageCommandListeners();
for (const plugin of SapphireClient.plugins.values(require_lib_types_Enums.PluginHook.PostInitialization)) {
plugin.hook.call(this, options);
this.emit(require_lib_types_Events.Events.PluginLoaded, plugin.type, plugin.name);
}
}
/**
* Loads all pieces, then logs the client in, establishing a websocket connection to Discord.
* @since 1.0.0
* @param token Token of the account to log in with.
* @return Token of the account used.
*/
async login(token) {
if (this.options.baseUserDirectory !== null) this.stores.registerPath(this.options.baseUserDirectory);
for (const plugin of SapphireClient.plugins.values(require_lib_types_Enums.PluginHook.PreLogin)) {
await plugin.hook.call(this, this.options);
this.emit(require_lib_types_Events.Events.PluginLoaded, plugin.type, plugin.name);
}
await Promise.all([...this.stores.values()].map((store) => store.loadAll()));
const login = await super.login(token);
for (const plugin of SapphireClient.plugins.values(require_lib_types_Enums.PluginHook.PostLogin)) {
await plugin.hook.call(this, this.options);
this.emit(require_lib_types_Events.Events.PluginLoaded, plugin.type, plugin.name);
}
return login;
}
static use(plugin) {
this.plugins.use(plugin);
return this;
}
};
SapphireClient.plugins = new require_lib_plugins_PluginManager.PluginManager();
//#endregion
exports.SapphireClient = SapphireClient;
//# sourceMappingURL=SapphireClient.cjs.map