| import type { ReplyToMode } from "../config/types.js"; |
| import type { SlackAppMentionEvent, SlackMessageEvent } from "./types.js"; |
|
|
| export type SlackThreadContext = { |
| incomingThreadTs?: string; |
| messageTs?: string; |
| isThreadReply: boolean; |
| replyToId?: string; |
| messageThreadId?: string; |
| }; |
|
|
| export function resolveSlackThreadContext(params: { |
| message: SlackMessageEvent | SlackAppMentionEvent; |
| replyToMode: ReplyToMode; |
| }): SlackThreadContext { |
| const incomingThreadTs = params.message.thread_ts; |
| const eventTs = params.message.event_ts; |
| const messageTs = params.message.ts ?? eventTs; |
| const hasThreadTs = typeof incomingThreadTs === "string" && incomingThreadTs.length > 0; |
| const isThreadReply = |
| hasThreadTs && (incomingThreadTs !== messageTs || Boolean(params.message.parent_user_id)); |
| const replyToId = incomingThreadTs ?? messageTs; |
| const messageThreadId = isThreadReply |
| ? incomingThreadTs |
| : params.replyToMode === "all" |
| ? messageTs |
| : undefined; |
| return { |
| incomingThreadTs, |
| messageTs, |
| isThreadReply, |
| replyToId, |
| messageThreadId, |
| }; |
| } |
|
|
| export function resolveSlackThreadTargets(params: { |
| message: SlackMessageEvent | SlackAppMentionEvent; |
| replyToMode: ReplyToMode; |
| }) { |
| const { incomingThreadTs, messageTs } = resolveSlackThreadContext(params); |
| const replyThreadTs = incomingThreadTs ?? (params.replyToMode === "all" ? messageTs : undefined); |
| const statusThreadTs = replyThreadTs ?? messageTs; |
| return { replyThreadTs, statusThreadTs }; |
| } |
|
|