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
JavaScript
"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