// 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 }