summaryrefslogtreecommitdiff
path: root/config/config.go
blob: e9f08b559227d7d8358e420a68d4696d0673b75e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package config

import (
	"ai/types"
	"ai/utils/logger"
	"os"
	"strconv"
	"strings"

	"github.com/joho/godotenv"
)

var Config *types.BotConfig

func init() {
	logPrefix := "Config"
	logOptions := types.LogOptions{
		Timestamp: true,
		Prefix:    logPrefix,
		Level:     types.Error,
		Fatal:     true,
	}

	if err := godotenv.Load(); err != nil {
		logger.Log("Failed to load environment variables", logOptions)
	}

	Config = &types.BotConfig{
		DiscordToken:        getEnv("DISCORD_TOKEN"),
		SpotifyClientId:     getEnv("SPOTIFY_CLIENT_ID"),
		SpotifyClientSecret: getEnv("SPOTIFY_CLIENT_SECRET"),
		YoutubeAPIKey:       getEnv("YOUTUBE_API_KEY"),
		Activity:            types.ActivityType(getIntEnv("ACTIVITY")),
		ActivityMessage:     getEnv("ACTIVITY_MESSAGE"),
	}

	if Config.DiscordToken == "" {
		logger.Log("Unable to read Discord token. environment variable DISCORD_TOKEN is required", logOptions)
	}

	if Config.SpotifyClientId == "" {
		logger.Log("Unable to read Spotify client ID. environment variable SPOTIFY_CLIENT_ID is required", logOptions)
	}

	if Config.SpotifyClientSecret == "" {
		logger.Log("Unable to read Spotify client secret. environment variable SPOTIFY_CLIENT_SECRET is required", logOptions)
	}

	if Config.YoutubeAPIKey == "" {
		logger.Log("Unable to read YouTube API key. environment variable YOUTUBE_API_KEY is required", logOptions)
	}

	if Config.Activity == 0 {
		logOptions.Level = types.Warn
		logOptions.Fatal = false
		logger.Log("Activity message is empty or not set. Defaulting to PLAYING", logOptions)
		Config.Activity = types.PLAYING
	}

	if Config.ActivityMessage == "" {
		logOptions.Level = types.Warn
		logOptions.Fatal = false
		logger.Log("Activity message is empty or not set. Defaulting to empty string", logOptions)
		Config.ActivityMessage = ""
	}

	logOptions.Level = types.Success
	logOptions.Fatal = false
	logger.Log("Config loaded successfully", logOptions)
}

func getEnv(key string) string {
	value, exists := os.LookupEnv(key)
	if !exists {
		return ""
	}
	return strings.TrimSpace(value)
}

func getIntEnv(key string) int {
	value := getEnv(key)
	if value == "" {
		return 0
	}
	i, err := strconv.Atoi(value)
	if err != nil {
		return 0
	}
	return i
}