The new logbot, not committed from the wrong terminal window this time.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

64 lines
1.2 KiB

package config
import (
"encoding/json"
"fmt"
"os"
"sync"
)
// Config represents the logbot's configuration.
type Config struct {
Bot struct {
Nicks []string `json:"nicks"`
User string `json:"user"`
RealName string `json:"realName"`
} `json:"bot"`
Server struct {
Address string `json:"server"`
SSL bool `json:"ssl"`
}
API struct {
Endpoint string `json:"endpoint"`
Username string `json:"username"`
Key struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"key"`
} `json:"api"`
Commands struct {
OnJoinOp []string `json:"onJoinOp"`
OnReady []string `json:"onReady"`
} `json:"commands"`
Names struct {
ChanServ string `json:"chanserv"`
}
}
var mutex sync.Mutex
var config *Config
// Get lazy-loads the configuration in a thread-safe manner.
func Get() Config {
mutex.Lock()
defer mutex.Unlock()
if config == nil {
config = &Config{}
file, err := os.Open("/etc/aiterp/logbot3.json")
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to load config: %s\n", err)
os.Exit(1)
}
defer file.Close()
err = json.NewDecoder(file).Decode(&config)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to parse config: %s\n", err)
os.Exit(1)
}
}
return *config
}