Files
oslstats/internal/discord/config.go
2026-02-19 20:48:31 +11:00

62 lines
1.8 KiB
Go

// Package discord provides utilities for interacting with the discord API
package discord
import (
"strings"
"git.haelnorr.com/h/golib/env"
"github.com/pkg/errors"
)
type Config struct {
ClientID string // ENV DISCORD_CLIENT_ID: Discord application client ID (required)
ClientSecret string // ENV DISCORD_CLIENT_SECRET: Discord application client secret (required)
OAuthScopes string // Authorisation scopes for OAuth
RedirectPath string // ENV DISCORD_REDIRECT_PATH: Path for the OAuth redirect handler (required)
BotToken string // ENV DISCORD_BOT_TOKEN: Token for the discord bot (required)
GuildID string // ENV DISCORD_GUILD_ID: ID for the discord server the bot should connect to (required)
}
func ConfigFromEnv() (any, error) {
cfg := &Config{
ClientID: env.String("DISCORD_CLIENT_ID", ""),
ClientSecret: env.String("DISCORD_CLIENT_SECRET", ""),
OAuthScopes: getOAuthScopes(),
RedirectPath: env.String("DISCORD_REDIRECT_PATH", ""),
BotToken: env.String("DISCORD_BOT_TOKEN", ""),
GuildID: env.String("DISCORD_GUILD_ID", ""),
}
// Check required fields
if cfg.ClientID == "" {
return nil, errors.New("Envar not set: DISCORD_CLIENT_ID")
}
if cfg.ClientSecret == "" {
return nil, errors.New("Envar not set: DISCORD_CLIENT_SECRET")
}
if cfg.RedirectPath == "" {
return nil, errors.New("Envar not set: DISCORD_REDIRECT_PATH")
}
if cfg.BotToken == "" {
return nil, errors.New("Envar not set: DISCORD_BOT_TOKEN")
}
if cfg.GuildID == "" {
return nil, errors.New("Envar not set: DISCORD_GUILD_ID")
}
return cfg, nil
}
func getOAuthScopes() string {
list := []string{
"connections",
"email",
"guilds",
"gdm.join",
"guilds.members.read",
"identify",
}
scopes := strings.Join(list, "+")
return scopes
}