mirror of
https://github.com/Penguin-71630/meme-bot-frontend-dc.git
synced 2026-03-12 20:40:16 +08:00
Refactor: cleanup
- Introduce tracing - Introduce cobra / viper framework - Introduce resty client - Seperate files in api/ and bot/ - Trim unused functions
This commit is contained in:
93
main.go
93
main.go
@@ -2,47 +2,76 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/Penguin-71630/meme-bot-frontend-dc/bot"
|
||||
"github.com/Penguin-71630/meme-bot-frontend-dc/config"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/Penguin-71630/meme-bot-frontend-dc/tracing"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Load environment variables
|
||||
if err := godotenv.Load(); err != nil {
|
||||
log.Println("No .env file found, using system environment variables")
|
||||
}
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "dcbot",
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
viper.AutomaticEnv()
|
||||
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
|
||||
viper.BindPFlags(cmd.PersistentFlags())
|
||||
viper.BindPFlags(cmd.Flags())
|
||||
},
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
ctx := cmd.Context()
|
||||
|
||||
// Load configuration
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to load configuration: %v", err)
|
||||
}
|
||||
appname := "go2025-dcbot"
|
||||
tracing.InitTracer(appname)
|
||||
if viper.GetString("uptrace-dsn") != "" {
|
||||
tracing.InitUptrace(appname)
|
||||
defer tracing.DeferUptrace(ctx)
|
||||
}
|
||||
|
||||
// Initialize bot
|
||||
discordBot, err := bot.New(cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create bot: %v", err)
|
||||
}
|
||||
// Initialize bot
|
||||
discordBot, err := bot.New()
|
||||
if err != nil {
|
||||
tracing.Logger.Ctx(ctx).
|
||||
Panic("failed to create bot",
|
||||
zap.Error(err))
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Start bot
|
||||
if err := discordBot.Start(); err != nil {
|
||||
log.Fatalf("Failed to start bot: %v", err)
|
||||
}
|
||||
// Start bot
|
||||
if err := discordBot.Start(); err != nil {
|
||||
tracing.Logger.Ctx(ctx).
|
||||
Panic("failed to start bot",
|
||||
zap.Error(err))
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println("Bot is now running. Press CTRL-C to exit.")
|
||||
defer discordBot.Stop()
|
||||
|
||||
fmt.Println("Bot is now running. Press CTRL-C to exit.")
|
||||
|
||||
// Wait for interrupt signal
|
||||
sc := make(chan os.Signal, 1)
|
||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
||||
<-sc
|
||||
|
||||
// Cleanup
|
||||
discordBot.Stop()
|
||||
fmt.Println("Bot stopped gracefully.")
|
||||
// Wait for interrupt signal
|
||||
sc := make(chan os.Signal, 1)
|
||||
signal.Notify(sc,
|
||||
syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
||||
<-sc
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
cobra.EnableTraverseRunHooks = true
|
||||
rootCmd.Flags().
|
||||
String("discord-bot-token", "", "discord bot token")
|
||||
rootCmd.Flags().
|
||||
String("api-endpoint", "http://localhost:8080", "api endpoint")
|
||||
|
||||
rootCmd.Flags().
|
||||
Bool("zap-production", true, "Toggle production log format")
|
||||
rootCmd.Flags().
|
||||
String("uptrace-dsn", "", "Uptrace DSN (disabled by default)")
|
||||
}
|
||||
|
||||
func main() {
|
||||
rootCmd.Execute()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user