package cmds import ( "fmt" "os" "os/signal" "syscall" "gitea.konchin.com/go2025/backend/bot" "gitea.konchin.com/go2025/backend/bot/commands" "gitea.konchin.com/go2025/backend/tracing" "github.com/spf13/cobra" "github.com/spf13/viper" "go.uber.org/zap" ) var dcbotCmd = &cobra.Command{ Use: "dcbot", Run: func(cmd *cobra.Command, args []string) { ctx := cmd.Context() appname := "go2025-dcbot" tracing.InitTracer(appname) if viper.GetString("uptrace-dsn") != "" { tracing.InitUptrace(appname) defer tracing.DeferUptrace(ctx) } // Initialize bot discordBot, err := bot.New() if err != nil { tracing.Logger.Ctx(ctx). Panic("failed to create bot", zap.Error(err)) panic(err) } discordBot.RegisterCommand(commands.NewEchoCommand) discordBot.RegisterCommand(commands.NewGreetCommand) discordBot.RegisterCommand(commands.NewPingCommand) discordBot.RegisterCommand(commands.NewWebCommand) // 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() // Wait for interrupt signal sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) <-sc }, } func init() { dcbotCmd.Flags(). String("preshared-key", "poop", "preshared key") dcbotCmd.Flags(). String("discord-bot-token", "", "discord bot token") dcbotCmd.Flags(). String("api-endpoint", "http://backend:8080", "api endpoint") dcbotCmd.Flags(). String("external-url", "http://localhost:8080", "external url") dcbotCmd.Flags(). Bool("zap-production", true, "Toggle production log format") dcbotCmd.Flags(). String("uptrace-dsn", "", "Uptrace DSN (disabled by default)") }