Spaces:
Running
Running
| import type { MsgContext } from "../auto-reply/templating.js"; | |
| import { normalizeChatType } from "./chat-type.js"; | |
| function extractConversationId(from?: string): string | undefined { | |
| const trimmed = from?.trim(); | |
| if (!trimmed) { | |
| return undefined; | |
| } | |
| const parts = trimmed.split(":").filter(Boolean); | |
| return parts.length > 0 ? parts[parts.length - 1] : trimmed; | |
| } | |
| function shouldAppendId(id: string): boolean { | |
| if (/^[0-9]+$/.test(id)) { | |
| return true; | |
| } | |
| if (id.includes("@g.us")) { | |
| return true; | |
| } | |
| return false; | |
| } | |
| export function resolveConversationLabel(ctx: MsgContext): string | undefined { | |
| const explicit = ctx.ConversationLabel?.trim(); | |
| if (explicit) { | |
| return explicit; | |
| } | |
| const threadLabel = ctx.ThreadLabel?.trim(); | |
| if (threadLabel) { | |
| return threadLabel; | |
| } | |
| const chatType = normalizeChatType(ctx.ChatType); | |
| if (chatType === "direct") { | |
| return ctx.SenderName?.trim() || ctx.From?.trim() || undefined; | |
| } | |
| const base = | |
| ctx.GroupChannel?.trim() || | |
| ctx.GroupSubject?.trim() || | |
| ctx.GroupSpace?.trim() || | |
| ctx.From?.trim() || | |
| ""; | |
| if (!base) { | |
| return undefined; | |
| } | |
| const id = extractConversationId(ctx.From); | |
| if (!id) { | |
| return base; | |
| } | |
| if (!shouldAppendId(id)) { | |
| return base; | |
| } | |
| if (base === id) { | |
| return base; | |
| } | |
| if (base.includes(id)) { | |
| return base; | |
| } | |
| if (base.toLowerCase().includes(" id:")) { | |
| return base; | |
| } | |
| if (base.startsWith("#") || base.startsWith("@")) { | |
| return base; | |
| } | |
| return `${base} id:${id}`; | |
| } | |