diff --git a/config/appservice.go b/config/appservice.go index f6768b1..f081c37 100644 --- a/config/appservice.go +++ b/config/appservice.go @@ -12,3 +12,28 @@ type appservice struct { ASToken string `yaml:"as_token"` HSToken string `yaml:"hs_token"` } + +func (a *appservice) setDefaults() error { + if a.ID == "" { + a.ID = "discord" + } + + if err := a.Bot.setDefaults(); err != nil { + return err + } + + return nil +} + +func (a *appservice) UnmarshalYAML(unmarshal func(interface{}) error) error { + type rawAppservice appservice + + raw := rawAppservice{} + if err := unmarshal(&raw); err != nil { + return err + } + + *a = appservice(raw) + + return a.setDefaults() +} diff --git a/config/bot.go b/config/bot.go index 4318823..71e2ed6 100644 --- a/config/bot.go +++ b/config/bot.go @@ -5,3 +5,29 @@ type bot struct { Displayname string `yaml:"displayname"` Avatar string `yaml:"avatar"` } + +func (b *bot) setDefaults() error { + if b.Username == "" { + b.Username = "discordbot" + } + + if b.Displayname == "" { + b.Displayname = "Discord Bridge Bot" + } + + return nil +} + +func (b *bot) UnmarshalYAML(unmarshal func(interface{}) error) error { + type rawBot bot + + raw := rawBot{} + + if err := unmarshal(&raw); err != nil { + return err + } + + *b = bot(raw) + + return b.setDefaults() +} diff --git a/config/bridge.go b/config/bridge.go index 4ff6324..62cf233 100644 --- a/config/bridge.go +++ b/config/bridge.go @@ -1,6 +1,8 @@ package config import ( + "fmt" + "bytes" "text/template" ) @@ -11,6 +13,21 @@ type bridge struct { usernameTemplate *template.Template `yaml:"-"` } +func (b *bridge) setDefaults() error { + var err error + + if b.UsernameTemplate == "" { + b.UsernameTemplate = "Discord_{{.}}" + } + + b.usernameTemplate, err = template.New("username").Parse(b.UsernameTemplate) + if err != nil { + return err + } + + return nil +} + func (b *bridge) UnmarshalYAML(unmarshal func(interface{}) error) error { type rawBridge bridge @@ -21,19 +38,16 @@ func (b *bridge) UnmarshalYAML(unmarshal func(interface{}) error) error { return err } - raw.usernameTemplate, err = template.New("username").Parse(raw.UsernameTemplate) - if err != nil { - return err - } - *b = bridge(raw) - return nil + return b.setDefaults() } func (b bridge) FormatUsername(userid string) string { var buffer bytes.Buffer + fmt.Printf("bridge: %#v\n", b) + b.usernameTemplate.Execute(&buffer, userid) return buffer.String() diff --git a/config/config.go b/config/config.go index fe89d2b..8ace6ff 100644 --- a/config/config.go +++ b/config/config.go @@ -12,6 +12,29 @@ type Config struct { Bridge bridge `yaml:"bridge"` } +func (cfg *Config) setDefaults() error { + if err := cfg.Appservice.setDefaults(); err != nil { + return err + } + + if err := cfg.Bridge.setDefaults(); err != nil { + return err + } + + return nil +} + +func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error { + type rawConfig Config + + raw := rawConfig{} + if err := unmarshal(&raw); err != nil { + return err + } + + return cfg.setDefaults() +} + func FromBytes(data []byte) (*Config, error) { cfg := Config{} @@ -19,6 +42,8 @@ func FromBytes(data []byte) (*Config, error) { return nil, err } + cfg.setDefaults() + return &cfg, nil }