62 lines
1.8 KiB
Go
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
|
|
}
|