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) } })) }