UNPKG

@sapphire/framework

Version:

Discord bot framework built for advanced and amazing bots.

127 lines (125 loc) 6.84 kB
"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