oups
This commit is contained in:
+72
-7
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
@@ -15,6 +16,7 @@ import (
|
||||
"github.com/leolionad58/ticketbot/internal/discord/components"
|
||||
"github.com/leolionad58/ticketbot/internal/discord/events"
|
||||
"github.com/leolionad58/ticketbot/internal/logger"
|
||||
"github.com/leolionad58/ticketbot/internal/panel"
|
||||
"github.com/leolionad58/ticketbot/internal/tickets"
|
||||
"github.com/leolionad58/ticketbot/internal/transcript"
|
||||
)
|
||||
@@ -34,8 +36,23 @@ func main() {
|
||||
must(err, "open db")
|
||||
defer sqldb.Close()
|
||||
|
||||
// CLI admin subcommand — handle and exit before starting the bot
|
||||
if handleAdminCLI(sqldb) {
|
||||
return
|
||||
}
|
||||
|
||||
// Migrate YAML panels to DB on first boot
|
||||
panelRepo := db.NewPanelConfigRepo(sqldb)
|
||||
if err := panel.MigrateYAMLPanels(context.Background(), panelRepo, cfg, os.Getenv("GUILD_ID")); err != nil {
|
||||
slog.Warn("YAML panel migration failed", "err", err)
|
||||
}
|
||||
|
||||
ticketRepo := db.NewTicketRepo(sqldb)
|
||||
claimRepo := db.NewClaimMessageRepo(sqldb)
|
||||
convocRepo := db.NewConvocationConfigRepo(sqldb)
|
||||
adminRepo := db.NewPanelAdminRepo(sqldb)
|
||||
sessionRepo := db.NewPanelSessionRepo(sqldb)
|
||||
auditRepo := db.NewAuditLogRepo(sqldb)
|
||||
|
||||
token := os.Getenv("DISCORD_TOKEN")
|
||||
if token == "" {
|
||||
@@ -45,12 +62,27 @@ func main() {
|
||||
appID := os.Getenv("DISCORD_APP_ID")
|
||||
guildID := os.Getenv("GUILD_ID")
|
||||
|
||||
bot, err := discordbot.New(token, cfgProvider, ticketRepo, claimRepo, guildID)
|
||||
// Build guild allowlist: config yaml takes priority, env GUILD_ID is always included
|
||||
allowedGuilds := append([]string{}, cfg.Bot.AllowedGuilds...)
|
||||
if guildID != "" {
|
||||
found := false
|
||||
for _, id := range allowedGuilds {
|
||||
if id == guildID {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
allowedGuilds = append(allowedGuilds, guildID)
|
||||
}
|
||||
}
|
||||
|
||||
bot, err := discordbot.New(token, cfgProvider, ticketRepo, claimRepo, guildID, allowedGuilds)
|
||||
must(err, "create bot")
|
||||
|
||||
// Services
|
||||
auth := tickets.NewAuthService(cfgProvider)
|
||||
ticketSvc := tickets.NewService(ticketRepo, auth, bot.Session, cfgProvider)
|
||||
ticketSvc := tickets.NewService(ticketRepo, panelRepo, auth, bot.Session, cfgProvider)
|
||||
claimMgr := claim.NewManager(cfgProvider, ticketRepo, claimRepo)
|
||||
logSvc := logger.NewDiscordLogger(bot.Session, cfgProvider)
|
||||
transcriptGen := transcript.NewGenerator("transcripts", bot.Session)
|
||||
@@ -76,6 +108,7 @@ func main() {
|
||||
panelComp := &components.PanelComponent{
|
||||
TicketSvc: ticketSvc,
|
||||
TicketRepo: ticketRepo,
|
||||
PanelRepo: panelRepo,
|
||||
ClaimMgr: claimMgr,
|
||||
LogSvc: logSvc,
|
||||
Config: cfgProvider,
|
||||
@@ -88,14 +121,22 @@ func main() {
|
||||
Transcript: transcriptGen,
|
||||
Auth: auth,
|
||||
}
|
||||
convocComp := &components.ConvocationComponent{
|
||||
ConvocRepo: convocRepo,
|
||||
TicketRepo: ticketRepo,
|
||||
Auth: auth,
|
||||
LogSvc: logSvc,
|
||||
}
|
||||
|
||||
// Router
|
||||
router := &discordbot.Router{
|
||||
PanelCmd: panelCmd,
|
||||
TicketCmd: ticketCmd,
|
||||
ConvocCmd: convocCmd,
|
||||
PanelComp: panelComp,
|
||||
TicketComp: ticketComp,
|
||||
PanelCmd: panelCmd,
|
||||
TicketCmd: ticketCmd,
|
||||
ConvocCmd: convocCmd,
|
||||
PanelComp: panelComp,
|
||||
TicketComp: ticketComp,
|
||||
ConvocComp: convocComp,
|
||||
IsGuildAllowed: bot.IsGuildAllowed,
|
||||
}
|
||||
bot.Session.AddHandler(router.Handle)
|
||||
|
||||
@@ -123,6 +164,30 @@ func main() {
|
||||
slog.Warn("config watcher failed to start", "err", err)
|
||||
}
|
||||
|
||||
// Start panel HTTP server if configured
|
||||
if cfg.Panel.BaseURL != "" || cfg.Panel.Port > 0 {
|
||||
botSvc := discordbot.NewBotService(bot.Session, panelRepo, ticketRepo, convocRepo, guildID, allowedGuilds)
|
||||
panelSrv := panel.NewServer(
|
||||
cfg.Panel,
|
||||
ticketRepo,
|
||||
adminRepo,
|
||||
sessionRepo,
|
||||
auditRepo,
|
||||
panelRepo,
|
||||
convocRepo,
|
||||
guildID,
|
||||
botSvc,
|
||||
)
|
||||
ctx, cancelPanel := context.WithCancel(context.Background())
|
||||
go func() {
|
||||
slog.Info("panel server starting", "port", cfg.Panel.Port)
|
||||
if err := panelSrv.Start(ctx); err != nil {
|
||||
slog.Error("panel server stopped", "err", err)
|
||||
}
|
||||
}()
|
||||
defer cancelPanel()
|
||||
}
|
||||
|
||||
slog.Info("ticketbot ready, Ctrl+C to stop")
|
||||
stop := make(chan os.Signal, 1)
|
||||
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
Reference in New Issue
Block a user