This commit is contained in:
lfirmin
2026-05-10 18:07:51 +02:00
parent 50af2452b1
commit a5f888b3c1
59 changed files with 6682 additions and 108 deletions
+27 -7
View File
@@ -63,8 +63,12 @@ func (m *Manager) DeleteClaimMessage(ctx context.Context, s *discordgo.Session,
if err != nil || cm == nil {
return
}
cfg := m.cfg.Get()
if err := s.ChannelMessageDelete(cfg.Bot.ClaimChannel, cm.MessageID); err != nil {
// Resolve claim channel: look up ticket for per-ticket channel, fall back to config.
claimChannelID := m.cfg.Get().Bot.ClaimChannel
if t, err := m.repo.GetByID(ctx, ticketID); err == nil && t != nil && t.ClaimChannelID != "" {
claimChannelID = t.ClaimChannelID
}
if err := s.ChannelMessageDelete(claimChannelID, cm.MessageID); err != nil {
slog.Warn("claim: delete message", "ticket_id", ticketID, "err", err)
}
m.claims.Delete(ctx, ticketID) //nolint
@@ -80,6 +84,9 @@ func (m *Manager) MarkClaimed(ctx context.Context, s *discordgo.Session, ticket
}
cfg := m.cfg.Get()
claimChannelID := cfg.Bot.ClaimChannel
if ticket.ClaimChannelID != "" {
claimChannelID = ticket.ClaimChannelID
}
if claimChannelID == "" {
m.claims.Delete(ctx, ticket.ID) //nolint
return
@@ -131,7 +138,11 @@ func (m *Manager) startReupLoop(s *discordgo.Session, ticket *db.Ticket, lastReu
}()
cfg := m.cfg.Get()
interval := time.Duration(cfg.Bot.ClaimReupMinutes) * time.Minute
reupMins := cfg.Bot.ClaimReupMinutes
if ticket.ClaimReupMinutes > 0 {
reupMins = ticket.ClaimReupMinutes
}
interval := time.Duration(reupMins) * time.Minute
elapsed := time.Since(lastReupAt)
next := interval - elapsed
if next <= 0 {
@@ -175,7 +186,11 @@ func (m *Manager) startReupLoop(s *discordgo.Session, ticket *db.Ticket, lastReu
// Re-read config in case of hot reload
cfg = m.cfg.Get()
interval = time.Duration(cfg.Bot.ClaimReupMinutes) * time.Minute
reupMins = cfg.Bot.ClaimReupMinutes
if ticket.ClaimReupMinutes > 0 {
reupMins = ticket.ClaimReupMinutes
}
interval = time.Duration(reupMins) * time.Minute
timer.Reset(interval)
}
}
@@ -185,19 +200,24 @@ func (m *Manager) startReupLoop(s *discordgo.Session, ticket *db.Ticket, lastReu
func (m *Manager) postClaim(ctx context.Context, s *discordgo.Session, ticket *db.Ticket, withPing bool) (string, error) {
cfg := m.cfg.Get()
claimChannelID := cfg.Bot.ClaimChannel
if ticket.ClaimChannelID != "" {
claimChannelID = ticket.ClaimChannelID
}
if claimChannelID == "" {
return "", fmt.Errorf("claim_channel not configured")
}
// Determine embed color from type config, fallback to blurple
// Determine embed color and staff role — prefer ticket fields (set at open time for DB panels)
embedColor := 0x5865f2
var staffRoleID string
staffRoleID := ticket.StaffRoleID
if panel, ok := cfg.Panels[ticket.Panel]; ok {
if t, ok := panel.Types[ticket.Type]; ok {
if c := parseHexColor(t.EmbedColor); c != 0 {
embedColor = c
}
staffRoleID = t.StaffRole
if staffRoleID == "" {
staffRoleID = t.StaffRole
}
}
}