Spaces:
Running
Running
| export type MentionableActivity = { | |
| recipient?: { id?: string } | null; | |
| entities?: Array<{ | |
| type?: string; | |
| mentioned?: { id?: string }; | |
| }> | null; | |
| }; | |
| export function normalizeMSTeamsConversationId(raw: string): string { | |
| return raw.split(";")[0] ?? raw; | |
| } | |
| export function extractMSTeamsConversationMessageId(raw: string): string | undefined { | |
| if (!raw) { | |
| return undefined; | |
| } | |
| const match = /(?:^|;)messageid=([^;]+)/i.exec(raw); | |
| const value = match?.[1]?.trim() ?? ""; | |
| return value || undefined; | |
| } | |
| export function parseMSTeamsActivityTimestamp(value: unknown): Date | undefined { | |
| if (!value) { | |
| return undefined; | |
| } | |
| if (value instanceof Date) { | |
| return value; | |
| } | |
| if (typeof value !== "string") { | |
| return undefined; | |
| } | |
| const date = new Date(value); | |
| return Number.isNaN(date.getTime()) ? undefined : date; | |
| } | |
| export function stripMSTeamsMentionTags(text: string): string { | |
| // Teams wraps mentions in <at>...</at> tags | |
| return text.replace(/<at[^>]*>.*?<\/at>/gi, "").trim(); | |
| } | |
| export function wasMSTeamsBotMentioned(activity: MentionableActivity): boolean { | |
| const botId = activity.recipient?.id; | |
| if (!botId) { | |
| return false; | |
| } | |
| const entities = activity.entities ?? []; | |
| return entities.some((e) => e.type === "mention" && e.mentioned?.id === botId); | |
| } | |