- /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]>
73 lines
1.7 KiB
Go
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
|
|
}
|