90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package lib
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Config holds all configuration values
|
|
type Config struct {
|
|
// Discord settings
|
|
DiscordToken string
|
|
|
|
// Himbucks settings
|
|
HimbucksPerReward int
|
|
MessageCountThreshold int
|
|
CooldownPeriod time.Duration
|
|
|
|
// Markov settings
|
|
MarkovDefaultMessages int
|
|
MarkovMaxMessages int
|
|
MarkovCacheSize int
|
|
|
|
// Database settings
|
|
MaxOpenConns int
|
|
MaxIdleConns int
|
|
ConnMaxLifetime time.Duration
|
|
|
|
// Command cooldowns (in seconds)
|
|
PingCooldown int
|
|
HsCooldown int
|
|
MarkovCooldown int
|
|
HimbucksCooldown int
|
|
HimboardCooldown int
|
|
SendbucksCooldown int
|
|
}
|
|
|
|
var AppConfig *Config
|
|
|
|
// LoadConfig loads configuration from environment variables
|
|
func LoadConfig() *Config {
|
|
config := &Config{
|
|
// Discord settings
|
|
DiscordToken: getEnv("DISCORD_TOKEN", ""),
|
|
|
|
// Himbucks settings
|
|
HimbucksPerReward: getEnvInt("HIMBUCKS_PER_REWARD", 10),
|
|
MessageCountThreshold: getEnvInt("MESSAGE_COUNT_THRESHOLD", 5),
|
|
CooldownPeriod: time.Duration(getEnvInt("HIMBUCKS_COOLDOWN_MINUTES", 1)) * time.Minute,
|
|
|
|
// Markov settings
|
|
MarkovDefaultMessages: getEnvInt("MARKOV_DEFAULT_MESSAGES", 100),
|
|
MarkovMaxMessages: getEnvInt("MARKOV_MAX_MESSAGES", 1000),
|
|
MarkovCacheSize: getEnvInt("MARKOV_CACHE_SIZE", 10),
|
|
|
|
// Database settings
|
|
MaxOpenConns: getEnvInt("DB_MAX_OPEN_CONNS", 25),
|
|
MaxIdleConns: getEnvInt("DB_MAX_IDLE_CONNS", 5),
|
|
ConnMaxLifetime: time.Duration(getEnvInt("DB_CONN_MAX_LIFETIME_MINUTES", 5)) * time.Minute,
|
|
|
|
// Command cooldowns (in seconds)
|
|
PingCooldown: getEnvInt("PING_COOLDOWN_SECONDS", 5),
|
|
HsCooldown: getEnvInt("HS_COOLDOWN_SECONDS", 10),
|
|
MarkovCooldown: getEnvInt("MARKOV_COOLDOWN_SECONDS", 30),
|
|
HimbucksCooldown: getEnvInt("HIMBUCKS_COOLDOWN_SECONDS", 5),
|
|
HimboardCooldown: getEnvInt("HIMBOARD_COOLDOWN_SECONDS", 5),
|
|
SendbucksCooldown: getEnvInt("SENDBUCKS_COOLDOWN_SECONDS", 1800),
|
|
}
|
|
|
|
AppConfig = config
|
|
return config
|
|
}
|
|
|
|
// getEnv gets an environment variable with a default value
|
|
func getEnv(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// getEnvInt gets an environment variable as an integer with a default value
|
|
func getEnvInt(key string, defaultValue int) int {
|
|
if value := os.Getenv(key); value != "" {
|
|
if intValue, err := strconv.Atoi(value); err == nil {
|
|
return intValue
|
|
}
|
|
}
|
|
return defaultValue
|
|
} |