81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"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"
|
|
"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()
|
|
|
|
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")
|
|
if err := activity.Start(); err != nil {
|
|
log.Fatalf("failed to start activity module: %s", err.Error())
|
|
}
|
|
|
|
logging.Info("startup: starting confession module")
|
|
if err := confession.Start(); err != nil {
|
|
log.Fatalf("failed to start confession module: %s", err.Error())
|
|
}
|
|
|
|
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())
|
|
}
|
|
}()
|
|
|
|
// start this LAST
|
|
logging.Info("startup: starting state engine")
|
|
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 {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for {}
|
|
}
|