package main import ( "flag" "log" "gitlab.com/whom/bingobot/internal/config" "gitlab.com/whom/bingobot/internal/discord" "gitlab.com/whom/bingobot/internal/logging" "gitlab.com/whom/bingobot/internal/state" ) 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()) } // TODO: start modules HERE and not elsewhere err = startBot() if err := state.Start(); err != nil { log.Fatal("failed to start state machine: %s", err.Error()) } defer state.Teardown() if 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 }