package main import ( "flag" "log" "gitlab.com/whom/bingobot/internal/activity" "gitlab.com/whom/bingobot/internal/config" "gitlab.com/whom/bingobot/internal/discord" "gitlab.com/whom/bingobot/internal/logging" "gitlab.com/whom/bingobot/internal/state" "gitlab.com/whom/bingobot/internal/web" ) var ( token = flag.String("token", "", "Bot authentication token") ) func main() { var err error err = config.Init() if err != nil { log.Fatal(err) } logging.Init() flag.Parse() if err := state.Init( config.Get().InMemoryEventCacheSize, config.Get().PersistentCacheStore, ); err != nil { log.Fatalf("couldn't initialize state engine: %s", err.Error()) } if err := activity.Start(); err != nil { // TODO: handle gracefully and continue? log.Fatalf("failed to start activity module: %s", err.Error()) } if err := web.Start(); err != nil { log.Fatalf("failed to start local web server: %s", err.Error()) } // start this LAST if err := state.Start(); err != nil { log.Fatalf("failed to start state machine: %s", err.Error()) } defer state.Teardown() if err := startBot(); err != nil { log.Fatal(err) } } func startBot() error { err := discord.Connect(*token) if err != nil { return err } logging.Info("shutting down gracefully", "type", "shutdown") discord.Close() return nil }