UNPKG

discord-starboard-plus

Version:

Discord Starboard Plus: A clean, maintainable starboard system for Discord.js bots. Features per-guild configuration, TypeScript support. Highlight your community's favorite messages with customizable starboards.

98 lines 3.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GuildConfigManager = void 0; const ConfigValidator_1 = require("../utils/ConfigValidator"); /** * Manages per-guild configuration for the Starboard system. * Allows different servers to have different starboard settings. */ class GuildConfigManager { configs; defaultOptions; logger; constructor(defaultOptions, logger) { this.configs = new Map(); this.defaultOptions = defaultOptions; this.logger = logger; } /** * Set or update configuration for a specific guild. * Merges with existing config if present, otherwise uses defaults. */ setGuildConfig(guildId, options) { const existingConfig = this.configs.get(guildId) ?? this.defaultOptions; try { const mergedConfig = ConfigValidator_1.ConfigValidator.merge(existingConfig, options); this.configs.set(guildId, mergedConfig); this.logger.success('Guild configuration updated', { guildId, starboardChannel: mergedConfig.starboardChannelID }); } catch (error) { this.logger.error('Failed to set guild configuration', error, { guildId }); throw error; } } /** * Get configuration for a specific guild. * Returns guild-specific config if set, otherwise default options. */ getGuildConfig(guildId) { return this.configs.get(guildId) ?? this.defaultOptions; } /** * Check if a guild has custom configuration. */ hasGuildConfig(guildId) { return this.configs.has(guildId); } /** * Remove custom configuration for a guild. * The guild will fall back to default options. */ removeGuildConfig(guildId) { const existed = this.configs.delete(guildId); if (existed) { this.logger.info('Guild configuration removed', { guildId }); } return existed; } /** * Get the default options. */ getDefaultOptions() { return { ...this.defaultOptions }; } /** * Update the default options. * Affects all guilds without custom configuration. */ setDefaultOptions(options) { const merged = ConfigValidator_1.ConfigValidator.merge(this.defaultOptions, options); Object.assign(this.defaultOptions, merged); this.logger.info('Default options updated'); } /** * Get all guilds with custom configuration. */ getConfiguredGuilds() { return Array.from(this.configs.keys()); } /** * Get total number of configured guilds. */ getConfiguredGuildCount() { return this.configs.size; } /** * Clear all guild-specific configurations. */ clearAllConfigs() { const count = this.configs.size; this.configs.clear(); this.logger.info('All guild configurations cleared', { count }); } } exports.GuildConfigManager = GuildConfigManager; //# sourceMappingURL=GuildConfigManager.js.map