diff --git a/internal/channels/slack/handlers_mention.go b/internal/channels/slack/handlers_mention.go index 62b6ecd3..8991adb5 100644 --- a/internal/channels/slack/handlers_mention.go +++ b/internal/channels/slack/handlers_mention.go @@ -21,14 +21,17 @@ func (c *Channel) handleAppMention(ev *slackevents.AppMentionEvent) { return } - // Dedup: app_mention may arrive alongside a message event - dedupKey := ev.Channel + ":" + ev.TimeStamp - if _, loaded := c.dedup.LoadOrStore(dedupKey, time.Now()); loaded { + // If requireMention is false, message handler already processes all channel messages. + // Return BEFORE storing dedup key so we don't block the message handler. + if !c.requireMention { return } - // If requireMention is false, message handler already processes all channel messages - if !c.requireMention { + // Dedup: app_mention may arrive alongside a message event. + // Shares the same key format as handleMessage so whichever arrives first + // processes the mention; the other is safely dropped. + dedupKey := ev.Channel + ":" + ev.TimeStamp + if _, loaded := c.dedup.LoadOrStore(dedupKey, time.Now()); loaded { return }