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.
53 lines
1.0 KiB
53 lines
1.0 KiB
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
// Config represents the logbot's configuration.
|
|
type Config struct {
|
|
Bot struct {
|
|
Nicks []string `json:"nicks"`
|
|
Server string `json:"server"`
|
|
CommandChannel string `json:"commandChannel"`
|
|
} `json:"bot"`
|
|
API struct {
|
|
Endpoint string `json:"endpoint"`
|
|
Username string `json:"username"`
|
|
Key struct {
|
|
ID string `json:"id"`
|
|
Secret string `json:"secret"`
|
|
} `json:"key"`
|
|
} `json:"api"`
|
|
}
|
|
|
|
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
|
|
}
|