Files
velox-bot/internal/config/config.go
T
FernandoJVideiraandClaude Sonnet 5.5 a364435bab Multiple meeting lobbies and beta-gated features (3.5.2)
- /meeting add-lobby, remove-lobby, lobbies: up to 10 lobbies per server, capped in the database
- Deleted voice channels are dropped from the lobbies
- Beta features: registered only in the beta server and usable only with the Beta Tester role (BETA_GUILD_ID, BETA_ROLE_ID); fails closed
- /beta (bot owner only) shows how beta access is set up

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 00:38:48 +01:00

73 lines
1.7 KiB
Go

package config
import (
"fmt"
"os"
"github.com/joho/godotenv"
)
// DefaultBetaGuildID is the server that beta features are tried in, unless
// BETA_GUILD_ID says otherwise.
const DefaultBetaGuildID = "1170934850157547600"
type Config struct {
BotToken string
AppID string
GuildID string
BetaGuildID string // BETA_GUILD_ID: where beta features exist
BetaRoleID string // BETA_ROLE_ID: the Beta Tester role; empty keeps beta features locked for everyone
DBHost string
LavalinkHost string
LavalinkPass string
TwitchClientID string
}
func LoadConfig() (*Config, error) {
// Load .env if present (e.g. local dev). Ignore if missing (e.g. Docker injects env vars).
_ = godotenv.Load()
token := os.Getenv("BOT_TOKEN")
if token == "" {
return nil, fmt.Errorf("BOT_TOKEN is not set")
}
appID := os.Getenv("APP_ID")
if appID == "" {
return nil, fmt.Errorf("APP_ID is not set")
}
guildID := os.Getenv("GUILD_ID")
betaGuildID := os.Getenv("BETA_GUILD_ID")
if betaGuildID == "" {
betaGuildID = DefaultBetaGuildID
}
betaRoleID := os.Getenv("BETA_ROLE_ID")
dbHost := os.Getenv("DB_HOST")
if dbHost == "" {
return nil, fmt.Errorf("DB_HOST is not set")
}
lavalinkHost := os.Getenv("LAVALINK_HOST")
lavalinkPass := os.Getenv("LAVALINK_PASSWORD")
twitchClientID := os.Getenv("TWITCH_CLIENT_ID")
if twitchClientID == "" {
return nil, fmt.Errorf("TWITCH_CLIENT_ID is not set")
}
return &Config{
BotToken: token,
AppID: appID,
GuildID: guildID,
BetaGuildID: betaGuildID,
BetaRoleID: betaRoleID,
DBHost: dbHost,
LavalinkHost: lavalinkHost,
LavalinkPass: lavalinkPass,
TwitchClientID: twitchClientID,
}, nil
}