clessy-ng/main.go

67 lines
1.6 KiB
Go

package main
import (
"flag"
"log"
"os"
"strings"
"git.fromouter.space/crunchy-rocks/clessy-ng/modules"
"git.fromouter.space/crunchy-rocks/clessy-ng/modules/metafora"
"git.fromouter.space/hamcha/tg"
)
var mods = map[string]modules.Module{
"metafora": &metafora.Module{},
}
func checkErr(err error, message string, args ...interface{}) {
if err != nil {
args = append(args, err)
log.Fatalf("FATAL: "+message+"\n\t%s", args)
}
}
func main() {
disable := flag.String("disable", "", "Blacklist mods (separated by comma)")
enable := flag.String("enable", "", "Whitelist mods (separated by comma)")
flag.Parse()
bind := os.Getenv("CLESSY_BIND")
if bind == "" {
bind = ":8080"
}
api := tg.MakeAPIClient(os.Getenv("CLESSY_TOKEN"))
name, err := api.GetMe()
checkErr(err, "could not retrieve bot info")
toActivate := make(map[string]modules.Module)
if *disable != "" {
for _, modname := range strings.Split(*disable, ",") {
modname = strings.TrimSpace(modname)
delete(mods, modname)
}
toActivate = mods
} else if *enable != "" {
for _, modname := range strings.Split(*enable, ",") {
toActivate[modname] = mods[modname]
}
} else {
toActivate = mods
}
for modname, mod := range toActivate {
log.Printf("Initializing %s", modname)
err := mod.Initialize(api, name.Username)
checkErr(err, "Starting module %s failed with error", modname)
}
api.SetWebhook(os.Getenv("CLESSY_WEBHOOK"))
log.Fatal(api.HandleWebhook(bind, os.Getenv("CLESSY_PATH"), func(update tg.APIUpdate) {
for _, mod := range toActivate {
mod.OnUpdate(update)
}
}))
}