Files
bunny-bot/cmd/bunny-bot/main.go
2025-06-23 22:35:48 +03:00

88 lines
1.8 KiB
Go

package main
import (
"bunny-bot/internal/moon"
"fmt"
"os"
"os/signal"
"path/filepath"
"syscall"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// TODO: use https://dev.to/gholami1313/saving-log-messages-to-a-custom-log-file-in-golang-ce5 for
//
// chat messages.
func main() {
var err error
// Main config.
executablePath, err := os.Executable()
if err != nil {
panic(fmt.Sprintf("Unable to get current executable path: %s", err))
}
configJSONPath := fmt.Sprintf("%s/data/config.json", filepath.Dir(executablePath))
moon.Cfg, err = moon.ParseConfig(configJSONPath)
if err != nil {
panic(err)
}
// Config for Zap logger facility.
var logCfg = zap.NewDevelopmentConfig()
// Define loglevel.
var l zapcore.Level
if err := l.UnmarshalText([]byte(moon.Cfg.LogLevel)); err != nil {
panic("Unknown LogLevel")
}
logCfg.Level = zap.NewAtomicLevelAt(l)
// Define output file if set in config.
if moon.Cfg.LogFile != "" {
logCfg.OutputPaths[0] = moon.Cfg.LogFile
}
// We do not want to see caller in logs.
logCfg.DisableCaller = true
// We want human-readable timestamp in logs.
logCfg.EncoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout(time.DateTime)
logger := zap.Must(logCfg.Build())
moon.Log = logger.Sugar()
mystdlogger := zap.RedirectStdLog(logger)
defer mystdlogger()
moon.Log.Info("Config read looks good")
// Самое время поставить траппер сигналов.
signal.Notify(moon.SigChan,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go moon.SigHandler()
moon.Log.Info("Singnal handler installed")
moon.Log.Info("Starting RunAndBan() periodic task")
go moon.RunAndBan()
moon.Log.Info("Starting main loop")
moon.Telegram(moon.Cfg)
}
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */