Before, we were exposing a Logger as logging.Log. This works, but results in code calling Logger.Log.Info() which is a little wordy. Instead, the logger is now kept private and we expose Info, Warn and Error as public functions that wrap logger.Info, logger.Warn and logger.Error.
70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
"gitlab.com/whom/bingobot/internal/config"
|
|
"gitlab.com/whom/bingobot/internal/logging"
|
|
"gitlab.com/whom/bingobot/internal/state"
|
|
)
|
|
|
|
var (
|
|
Token = flag.String("token", "", "Bot authentication token")
|
|
App = flag.String("app", "", "Application ID")
|
|
Guild = flag.String("guild", "", "Guild ID") // Do we want it to be tied to one server?
|
|
|
|
appConfig *config.AppConfig
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
if *App == "" {
|
|
log.Fatal("application id is not set")
|
|
}
|
|
|
|
var err error
|
|
|
|
appConfig, err = config.Parse()
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
logging.Init(appConfig)
|
|
|
|
err = startBot()
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func startBot() error {
|
|
state.DiscordSession, _ = discordgo.New("Bot " + *Token)
|
|
|
|
err := state.DiscordSession.Open()
|
|
if err != nil {
|
|
logging.Error("could not open discord session", "type", "error", "error", err)
|
|
return err
|
|
}
|
|
|
|
logging.Info("shutting down gracefully", "type", "shutdown")
|
|
|
|
sigch := make(chan os.Signal, 1)
|
|
signal.Notify(sigch, os.Interrupt)
|
|
<-sigch
|
|
|
|
logging.Info("shutting down gracefully", "type", "shutdown")
|
|
|
|
err = state.DiscordSession.Close()
|
|
if err != nil {
|
|
logging.Error("could not close discord session gracefully", "type", "error", "error", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|