From 79537af22d901448e3a66b5ca7c7a2d84627fd45 Mon Sep 17 00:00:00 2001 From: biast12 Date: Thu, 9 Apr 2026 22:31:21 +0200 Subject: [PATCH] Delete pin notifications using DB lookup Handle channel-pinned bot notifications by querying the tickets DB directly instead of the cached getTicket path. This avoids a race where thread message events can be cached as "not a ticket" before SetChannelId commits. If a pinned-message event from the bot is in a ticket channel, the message is deleted inside a Sentry span; errors are reported to Sentry. The previous getTicket-based check was reorganized and duplicate logic removed. --- bot/listeners/message.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/bot/listeners/message.go b/bot/listeners/message.go index a57c11a..dcd8c82 100644 --- a/bot/listeners/message.go +++ b/bot/listeners/message.go @@ -40,19 +40,22 @@ func OnMessage(worker *worker.Context, e events.MessageCreate) { return } - ticket, isTicket, err := getTicket(span.Context(), e.ChannelId) - if err != nil { - sentry.ErrorWithContext(err, utils.MessageCreateErrorContext(e)) + // Delete pin notification messages in ticket channels. + if e.Type == message.MessageTypeChannelPinnedMessage && e.Author.Id == worker.BotId { + ticket, ok, err := dbclient.Client.Tickets.GetByChannel(span.Context(), e.ChannelId) + if err == nil && ok && ticket.Id != 0 { + sentry.WithSpan0(span.Context(), "Delete pin notification", func(span *sentry.Span) { + if err := worker.DeleteMessage(e.ChannelId, e.Id); err != nil { + sentry.ErrorWithContext(err, utils.MessageCreateErrorContext(e)) + } + }) + } return } - // Delete pin notification messages in ticket channels - if isTicket && ticket.Id != 0 && e.Type == message.MessageTypeChannelPinnedMessage && e.Author.Id == worker.BotId { - sentry.WithSpan0(span.Context(), "Delete pin notification", func(span *sentry.Span) { - if err := worker.DeleteMessage(e.ChannelId, e.Id); err != nil { - sentry.ErrorWithContext(err, utils.MessageCreateErrorContext(e)) - } - }) + ticket, isTicket, err := getTicket(span.Context(), e.ChannelId) + if err != nil { + sentry.ErrorWithContext(err, utils.MessageCreateErrorContext(e)) return }