canopeas/config/config.go

116 lines
2.9 KiB
Go

package config
import (
_ "embed"
"io/ioutil"
"os"
"github.com/pelletier/go-toml"
)
//go:embed canopeas.example.toml
var defaultConfig []byte
type Config struct {
Token string `toml:"token"`
Prefix string `toml:"prefix"`
MCM struct {
Token string `toml:"token"`
URL string `toml:"url"`
} `toml:"mcm"`
Server struct {
Address string `toml:"address"`
Port int `toml:"port"`
} `toml:"server"`
DBPath string `toml:"db_path"`
MCPath string `toml:"mc_path"`
ImgurClientID string `toml:"imgur_client_id"`
ServerAPI struct {
Endpoint string `toml:"endpoint"`
Token string `toml:"token"`
} `toml:"serverapi"`
Twitter struct {
ConsumerKey string `toml:"consumer_key"`
ConsumerSecret string `toml:"consumer_secret"`
AccessToken string `toml:"access_token"`
AccessSecret string `toml:"access_secret"`
} `toml:"twitter"`
StaffRoles []string `toml:"staff_roles"`
Echoes []Echo `toml:"echoes"`
Albums []Album `toml:"albums"`
MessageRoles []MessageRole `toml:"message_roles"`
RegisterRole string `toml:"register_role"`
RegisteredChannel string `toml:"registered_channel"`
LeaveChannel string `toml:"leave_channel"`
FiredRole string `toml:"fired_role"`
MemeRate string `toml:"meme_rate"`
Insult struct {
Targets []string `toml:"targets"`
Comparisons []string `toml:"comparisons"`
Adjectives []string `toml:"adjectives"`
Nouns []string `toml:"nouns"`
} `toml:"insult"`
Compliment struct {
Verbs []string `toml:"verbs"`
Nouns []string `toml:"nouns"`
MinorThings []string `toml:"minor_things"`
} `toml:"compliment"`
}
type MessageRole struct {
ChannelID string `toml:"channel_id"`
MessageID string `toml:"message_id"`
Reactions []MessageReaction `toml:"reactions"`
}
type MessageReaction struct {
Emoji string `toml:"emoji"`
RoleID string `toml:"role_id"`
}
type Echo struct {
Name string `toml:"name"`
Aliases []string `toml:"aliases"`
Message string `toml:"message"`
Help string `toml:"help"`
}
type Album struct {
Name string `toml:"name"`
Aliases []string `toml:"aliases"`
AlbumID string `toml:"album_id"`
Help string `toml:"help"`
}
func Load(configPath string) (*Config, error) {
var err error
var configContent []byte
if len(configPath) == 0 {
configPath = "sedbot.toml"
}
configContent, err = ioutil.ReadFile(configPath)
if err != nil {
if os.IsNotExist(err) {
if err = ioutil.WriteFile(configPath, defaultConfig, os.ModePerm); err != nil {
return nil, err
}
configContent = defaultConfig
} else {
return nil, err
}
}
var cfg Config
tree, err := toml.LoadBytes(configContent)
if err != nil {
return nil, err
}
if err := tree.Unmarshal(&cfg); err != nil {
return nil, err
}
return &cfg, nil
}