mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 04:37:40 +00:00
83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
import type { User } from "@buape/carbon";
|
|
import type { PluralKitMessageInfo } from "../pluralkit.js";
|
|
import { formatDiscordUserTag } from "./format.js";
|
|
|
|
export type DiscordSenderIdentity = {
|
|
id: string;
|
|
name?: string;
|
|
tag?: string;
|
|
label: string;
|
|
isPluralKit: boolean;
|
|
pluralkit?: {
|
|
memberId: string;
|
|
memberName?: string;
|
|
systemId?: string;
|
|
systemName?: string;
|
|
};
|
|
};
|
|
|
|
type DiscordWebhookMessageLike = {
|
|
webhookId?: string | null;
|
|
webhook_id?: string | null;
|
|
};
|
|
|
|
export function resolveDiscordWebhookId(message: DiscordWebhookMessageLike): string | null {
|
|
const candidate = message.webhookId ?? message.webhook_id;
|
|
return typeof candidate === "string" && candidate.trim() ? candidate.trim() : null;
|
|
}
|
|
|
|
export function resolveDiscordSenderIdentity(params: {
|
|
author: User;
|
|
// oxlint-disable-next-line typescript/no-explicit-any
|
|
member?: any;
|
|
pluralkitInfo?: PluralKitMessageInfo | null;
|
|
}): DiscordSenderIdentity {
|
|
const pkInfo = params.pluralkitInfo ?? null;
|
|
const pkMember = pkInfo?.member ?? undefined;
|
|
const pkSystem = pkInfo?.system ?? undefined;
|
|
const memberId = pkMember?.id?.trim();
|
|
const memberNameRaw = pkMember?.display_name ?? pkMember?.name ?? "";
|
|
const memberName = memberNameRaw?.trim();
|
|
if (memberId && memberName) {
|
|
const systemName = pkSystem?.name?.trim();
|
|
const label = systemName ? `${memberName} (PK:${systemName})` : `${memberName} (PK)`;
|
|
return {
|
|
id: memberId,
|
|
name: memberName,
|
|
tag: pkMember?.name?.trim() || undefined,
|
|
label,
|
|
isPluralKit: true,
|
|
pluralkit: {
|
|
memberId,
|
|
memberName,
|
|
systemId: pkSystem?.id?.trim() || undefined,
|
|
systemName,
|
|
},
|
|
};
|
|
}
|
|
|
|
const senderTag = formatDiscordUserTag(params.author);
|
|
const senderDisplay =
|
|
params.member?.nickname ?? params.author.globalName ?? params.author.username;
|
|
const senderLabel =
|
|
senderDisplay && senderTag && senderDisplay !== senderTag
|
|
? `${senderDisplay} (${senderTag})`
|
|
: (senderDisplay ?? senderTag ?? params.author.id);
|
|
return {
|
|
id: params.author.id,
|
|
name: params.author.username ?? undefined,
|
|
tag: senderTag,
|
|
label: senderLabel,
|
|
isPluralKit: false,
|
|
};
|
|
}
|
|
|
|
export function resolveDiscordSenderLabel(params: {
|
|
author: User;
|
|
// oxlint-disable-next-line typescript/no-explicit-any
|
|
member?: any;
|
|
pluralkitInfo?: PluralKitMessageInfo | null;
|
|
}): string {
|
|
return resolveDiscordSenderIdentity(params).label;
|
|
}
|