bingobot/main.go

84 lines
1.8 KiB
Go
Raw Normal View History

2024-11-06 11:34:45 -08:00
package main
import (
"flag"
"log"
"os"
"os/signal"
2024-11-06 11:34:45 -08:00
2025-01-08 00:47:49 +00:00
"gitlab.com/whom/bingobot/internal/activity"
"gitlab.com/whom/bingobot/internal/confession"
"gitlab.com/whom/bingobot/internal/config"
"gitlab.com/whom/bingobot/internal/discord"
"gitlab.com/whom/bingobot/internal/logging"
"gitlab.com/whom/bingobot/internal/state"
2025-01-08 00:47:49 +00:00
"gitlab.com/whom/bingobot/internal/web"
2024-11-06 11:34:45 -08:00
)
var (
token = flag.String("token", "", "Bot authentication token")
2024-11-06 11:34:45 -08:00
)
func main() {
var err error
err = config.Init()
2024-11-06 13:32:37 -08:00
if err != nil {
log.Fatal(err)
}
logging.Init()
flag.Parse()
2024-11-06 14:19:45 -08:00
logging.Info("startup: initializing state engine")
if err := state.Init(
config.Get().InMemoryEventCacheSize,
config.Get().PersistentCacheStore,
); err != nil {
log.Fatalf("couldn't initialize state engine: %s", err.Error())
}
logging.Info("startup: starting activity module")
2025-01-08 00:47:49 +00:00
if err := activity.Start(); err != nil {
// TODO: handle gracefully and continue?
log.Fatalf("failed to start activity module: %s", err.Error())
}
2024-11-06 14:19:45 -08:00
logging.Info("startup: starting confession module")
if err := confession.Start(); err != nil {
// TODO: handle gracefully and continue?
log.Fatalf("failed to start confession module: %s", err.Error())
2025-01-08 00:47:49 +00:00
}
logging.Info("startup: starting web module")
go func() {
if err := web.Start(); err != nil {
log.Fatalf("failed to start local web server: %s", err.Error())
}
}()
2025-01-08 00:47:49 +00:00
// start this LAST
logging.Info("startup: starting state engine")
2025-01-08 00:47:49 +00:00
if err := state.Start(); err != nil {
log.Fatalf("failed to start state machine: %s", err.Error())
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func(){
for _ = range c {
state.Teardown()
discord.Close()
os.Exit(1)
}
}()
logging.Info("startup: connecting to discord")
if err := discord.Connect(*token); err != nil {
2024-11-06 14:19:45 -08:00
log.Fatal(err)
}
for {}
2024-11-06 11:34:45 -08:00
}