diff options
Diffstat (limited to 'config/config.go')
| -rw-r--r-- | config/config.go | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/config/config.go b/config/config.go index 4f7a666..1d78fea 100644 --- a/config/config.go +++ b/config/config.go @@ -8,10 +8,15 @@ import ( "github.com/joho/godotenv" ) +var BotConfig *Config + type Config struct { - DiscordToken string - DataSourceName string - DatabaseDriver string + DiscordToken string + DataSourceName string + DatabaseDriver string + ConfiguredChannels struct { + PoketwoSpawns []string + } } var validDBDrivers = map[string]bool{ @@ -21,12 +26,14 @@ var validDBDrivers = map[string]bool{ "mssql": true, } -func Load() (*Config, error) { +func Load() error { if err := godotenv.Load(); err != nil { - return nil, fmt.Errorf("loading env file: %w", err) + return fmt.Errorf("loading env file: %w", err) } config := &Config{} + + // Basic string variables requiredVars := map[string]*string{ "DISCORD_BOT_TOKEN": &config.DiscordToken, "DSN": &config.DataSourceName, @@ -36,16 +43,24 @@ func Load() (*Config, error) { for envKey, configVar := range requiredVars { value, err := getEnv(envKey) if err != nil { - return nil, fmt.Errorf("getting %s: %w", envKey, err) + return fmt.Errorf("getting %s: %w", envKey, err) } *configVar = value } + channels, err := getEnvStringSlice("POKETWO_CHANNELS") + if err != nil { + return fmt.Errorf("getting POKETWO_CHANNELS: %w", err) + } + config.ConfiguredChannels.PoketwoSpawns = channels + fmt.Println(config.ConfiguredChannels.PoketwoSpawns) + if err := validateConfig(config); err != nil { - return nil, fmt.Errorf("validating config: %w", err) + return fmt.Errorf("validating config: %w", err) } - return config, nil + BotConfig = config + return nil } func validateConfig(config *Config) error { @@ -74,6 +89,24 @@ func getEnv(key string) (string, error) { return strings.TrimSpace(value), nil } +func getEnvStringSlice(key string) ([]string, error) { + value, err := getEnv(key) + if err != nil { + return nil, err + } + + if value == "" { + return []string{}, nil + } + + items := strings.Split(value, ",") + // Trim spaces from each item + for i, item := range items { + items[i] = strings.TrimSpace(item) + } + return items, nil +} + // Future implementation for getting other types of environment variables // func getEnvInt(key string) (int, error) { // value, err := getEnv(key) |
