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.
58 lines
1.0 KiB
58 lines
1.0 KiB
package config
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"encoding/json"
|
|
"regexp"
|
|
)
|
|
|
|
type Process struct {
|
|
Command string
|
|
Args []string
|
|
ExecCmd *exec.Cmd
|
|
}
|
|
|
|
type Config struct {
|
|
Triggers []string
|
|
Includes []string
|
|
Processes map[string]Process
|
|
StartingHP int
|
|
Deadline string
|
|
OneErrorPerLine bool
|
|
|
|
ConfigPath string
|
|
|
|
TriggerRegex []*regexp.Regexp
|
|
IncludeRegex []*regexp.Regexp
|
|
}
|
|
|
|
|
|
func ParseFlags(c *Config) {
|
|
flag.StringVar(&c.ConfigPath, "config", ".ttarpit.json", ".ttarpit.json to load")
|
|
flag.Parse()
|
|
}
|
|
|
|
func Load() Config {
|
|
var settings Config
|
|
|
|
ParseFlags(&settings)
|
|
|
|
data, err := os.ReadFile(settings.ConfigPath)
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
err = json.Unmarshal(data, &settings)
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
for _, reg := range settings.Triggers {
|
|
settings.TriggerRegex = append(settings.TriggerRegex, regexp.MustCompile(reg))
|
|
}
|
|
|
|
for _, reg := range settings.Includes {
|
|
settings.IncludeRegex = append(settings.IncludeRegex, regexp.MustCompile(reg))
|
|
}
|
|
|
|
return settings
|
|
}
|
|
|