OpenClawBot / src /web /auto-reply /monitor /group-members.ts
darkfire514's picture
Upload 2526 files
fb4d8fe verified
import { normalizeE164 } from "../../../utils.js";
export function noteGroupMember(
groupMemberNames: Map<string, Map<string, string>>,
conversationId: string,
e164?: string,
name?: string,
) {
if (!e164 || !name) {
return;
}
const normalized = normalizeE164(e164);
const key = normalized ?? e164;
if (!key) {
return;
}
let roster = groupMemberNames.get(conversationId);
if (!roster) {
roster = new Map();
groupMemberNames.set(conversationId, roster);
}
roster.set(key, name);
}
export function formatGroupMembers(params: {
participants: string[] | undefined;
roster: Map<string, string> | undefined;
fallbackE164?: string;
}) {
const { participants, roster, fallbackE164 } = params;
const seen = new Set<string>();
const ordered: string[] = [];
if (participants?.length) {
for (const entry of participants) {
if (!entry) {
continue;
}
const normalized = normalizeE164(entry) ?? entry;
if (!normalized || seen.has(normalized)) {
continue;
}
seen.add(normalized);
ordered.push(normalized);
}
}
if (roster) {
for (const entry of roster.keys()) {
const normalized = normalizeE164(entry) ?? entry;
if (!normalized || seen.has(normalized)) {
continue;
}
seen.add(normalized);
ordered.push(normalized);
}
}
if (ordered.length === 0 && fallbackE164) {
const normalized = normalizeE164(fallbackE164) ?? fallbackE164;
if (normalized) {
ordered.push(normalized);
}
}
if (ordered.length === 0) {
return undefined;
}
return ordered
.map((entry) => {
const name = roster?.get(entry);
return name ? `${name} (${entry})` : entry;
})
.join(", ");
}