import type { ResolvedSlackAccount } from "../accounts.js"; import type { SlackMessageEvent } from "../types.js"; import type { SlackMonitorContext } from "./context.js"; import { dispatchPreparedSlackMessage } from "./message-handler/dispatch.js"; import { prepareSlackMessage } from "./message-handler/prepare.js"; export type SlackMessageHandler = ( message: SlackMessageEvent, opts: { source: "message" | "app_mention"; wasMentioned?: boolean }, ) => Promise; export function createSlackMessageHandler(params: { ctx: SlackMonitorContext; account: ResolvedSlackAccount; }): SlackMessageHandler { const { ctx, account } = params; return async (message, opts) => { if (opts.source === "message" && message.type !== "message") return; if ( opts.source === "message" && message.subtype && message.subtype !== "file_share" && message.subtype !== "bot_message" ) { return; } if (ctx.markMessageSeen(message.channel, message.ts)) return; const prepared = await prepareSlackMessage({ ctx, account, message, opts }); if (!prepared) return; await dispatchPreparedSlackMessage(prepared); }; }