76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
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)")
|
|
}
|