From 6aab89939faa7857a059377076c9ef28bd3414ab Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 14 Feb 2026 21:42:41 +0000 Subject: [PATCH] refactor(slack): dedupe pin event handlers --- src/slack/monitor/events/pins.ts | 136 +++++++++++++++---------------- 1 file changed, 64 insertions(+), 72 deletions(-) diff --git a/src/slack/monitor/events/pins.ts b/src/slack/monitor/events/pins.ts index c1259179efb..1cb0328a82c 100644 --- a/src/slack/monitor/events/pins.ts +++ b/src/slack/monitor/events/pins.ts @@ -5,84 +5,76 @@ import { danger } from "../../../globals.js"; import { enqueueSystemEvent } from "../../../infra/system-events.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; +async function handleSlackPinEvent(params: { + ctx: SlackMonitorContext; + body: unknown; + event: unknown; + action: "pinned" | "unpinned"; + contextKeySuffix: "added" | "removed"; + errorLabel: string; +}): Promise { + const { ctx, body, event, action, contextKeySuffix, errorLabel } = params; + + try { + if (ctx.shouldDropMismatchedSlackEvent(body)) { + return; + } + + const payload = event as SlackPinEvent; + const channelId = payload.channel_id; + const channelInfo = channelId ? await ctx.resolveChannelName(channelId) : {}; + if ( + !ctx.isChannelAllowed({ + channelId, + channelName: channelInfo?.name, + channelType: channelInfo?.type, + }) + ) { + return; + } + const label = resolveSlackChannelLabel({ + channelId, + channelName: channelInfo?.name, + }); + const userInfo = payload.user ? await ctx.resolveUserName(payload.user) : {}; + const userLabel = userInfo?.name ?? payload.user ?? "someone"; + const itemType = payload.item?.type ?? "item"; + const messageId = payload.item?.message?.ts ?? payload.event_ts; + const sessionKey = ctx.resolveSlackSystemEventSessionKey({ + channelId, + channelType: channelInfo?.type ?? undefined, + }); + enqueueSystemEvent(`Slack: ${userLabel} ${action} a ${itemType} in ${label}.`, { + sessionKey, + contextKey: `slack:pin:${contextKeySuffix}:${channelId ?? "unknown"}:${messageId ?? "unknown"}`, + }); + } catch (err) { + ctx.runtime.error?.(danger(`slack ${errorLabel} handler failed: ${String(err)}`)); + } +} + export function registerSlackPinEvents(params: { ctx: SlackMonitorContext }) { const { ctx } = params; ctx.app.event("pin_added", async ({ event, body }: SlackEventMiddlewareArgs<"pin_added">) => { - try { - if (ctx.shouldDropMismatchedSlackEvent(body)) { - return; - } - - const payload = event as SlackPinEvent; - const channelId = payload.channel_id; - const channelInfo = channelId ? await ctx.resolveChannelName(channelId) : {}; - if ( - !ctx.isChannelAllowed({ - channelId, - channelName: channelInfo?.name, - channelType: channelInfo?.type, - }) - ) { - return; - } - const label = resolveSlackChannelLabel({ - channelId, - channelName: channelInfo?.name, - }); - const userInfo = payload.user ? await ctx.resolveUserName(payload.user) : {}; - const userLabel = userInfo?.name ?? payload.user ?? "someone"; - const itemType = payload.item?.type ?? "item"; - const messageId = payload.item?.message?.ts ?? payload.event_ts; - const sessionKey = ctx.resolveSlackSystemEventSessionKey({ - channelId, - channelType: channelInfo?.type ?? undefined, - }); - enqueueSystemEvent(`Slack: ${userLabel} pinned a ${itemType} in ${label}.`, { - sessionKey, - contextKey: `slack:pin:added:${channelId ?? "unknown"}:${messageId ?? "unknown"}`, - }); - } catch (err) { - ctx.runtime.error?.(danger(`slack pin added handler failed: ${String(err)}`)); - } + await handleSlackPinEvent({ + ctx, + body, + event, + action: "pinned", + contextKeySuffix: "added", + errorLabel: "pin added", + }); }); ctx.app.event("pin_removed", async ({ event, body }: SlackEventMiddlewareArgs<"pin_removed">) => { - try { - if (ctx.shouldDropMismatchedSlackEvent(body)) { - return; - } - - const payload = event as SlackPinEvent; - const channelId = payload.channel_id; - const channelInfo = channelId ? await ctx.resolveChannelName(channelId) : {}; - if ( - !ctx.isChannelAllowed({ - channelId, - channelName: channelInfo?.name, - channelType: channelInfo?.type, - }) - ) { - return; - } - const label = resolveSlackChannelLabel({ - channelId, - channelName: channelInfo?.name, - }); - const userInfo = payload.user ? await ctx.resolveUserName(payload.user) : {}; - const userLabel = userInfo?.name ?? payload.user ?? "someone"; - const itemType = payload.item?.type ?? "item"; - const messageId = payload.item?.message?.ts ?? payload.event_ts; - const sessionKey = ctx.resolveSlackSystemEventSessionKey({ - channelId, - channelType: channelInfo?.type ?? undefined, - }); - enqueueSystemEvent(`Slack: ${userLabel} unpinned a ${itemType} in ${label}.`, { - sessionKey, - contextKey: `slack:pin:removed:${channelId ?? "unknown"}:${messageId ?? "unknown"}`, - }); - } catch (err) { - ctx.runtime.error?.(danger(`slack pin removed handler failed: ${String(err)}`)); - } + await handleSlackPinEvent({ + ctx, + body, + event, + action: "unpinned", + contextKeySuffix: "removed", + errorLabel: "pin removed", + }); }); }