aboutsummaryrefslogtreecommitdiff
path: root/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/config.go')
-rw-r--r--config/config.go49
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)