diff options
Diffstat (limited to 'config/Config.ts')
-rw-r--r-- | config/Config.ts | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/config/Config.ts b/config/Config.ts new file mode 100644 index 0000000..ce5ec06 --- /dev/null +++ b/config/Config.ts @@ -0,0 +1,93 @@ +import { type Snowflake } from 'discord.js'; + +export class Config { + public credentials: Credentials; + public environment: Environment; + public owners: Snowflake[]; + public prefix: string; + public channels: Channels; + public db: DataBase; + public logging: Logging; + public supportGuild: SupportGuild; + + public constructor(options: ConfigOptions) { + this.credentials = options.credentials; + this.environment = options.environment; + this.owners = options.owners; + this.prefix = options.prefix; + this.channels = options.channels; + this.db = options.db; + this.logging = options.logging; + this.supportGuild = options.supportGuild; + } + + public get token(): string { + return this.environment === 'production' + ? this.credentials.token + : this.environment === 'beta' + ? this.credentials.betaToken + : this.credentials.devToken; + } + + public get isProduction(): boolean { + return this.environment === 'production'; + } + + public get isBeta(): boolean { + return this.environment === 'beta'; + } + + public get isDevelopment(): boolean { + return this.environment === 'development'; + } +} + +export interface ConfigOptions { + credentials: Credentials; + environment: Environment; + owners: Snowflake[]; + prefix: string; + channels: Channels; + db: DataBase; + logging: Logging; + supportGuild: SupportGuild; +} + +interface Credentials { + token: string; + betaToken: string; + devToken: string; + hypixelApiKey: string; + wolframAlphaAppId: string; + imgurClientId: string; + imgurClientSecret: string; + sentryDsn: string; + perspectiveApiKey: string; +} + +type Environment = 'production' | 'beta' | 'development'; + +interface Channels { + log: Snowflake; + error: Snowflake; + dm: Snowflake; + servers: Snowflake; +} + +interface DataBase { + host: string; + port: number; + username: string; + password: string; +} + +interface Logging { + db: boolean; + verbose: boolean; + info: boolean; +} + +interface SupportGuild { + id: Snowflake; + invite: string; +} |