37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
import type { Guild, Message, User } from "@buape/carbon";
|
|
|
|
import { formatAgentEnvelope, type EnvelopeFormatOptions } from "../../auto-reply/envelope.js";
|
|
import { formatDiscordUserTag, resolveTimestampMs } from "./format.js";
|
|
|
|
export function resolveReplyContext(
|
|
message: Message,
|
|
resolveDiscordMessageText: (message: Message, options?: { includeForwarded?: boolean }) => string,
|
|
options?: { envelope?: EnvelopeFormatOptions },
|
|
): string | null {
|
|
const referenced = message.referencedMessage;
|
|
if (!referenced?.author) return null;
|
|
const referencedText = resolveDiscordMessageText(referenced, {
|
|
includeForwarded: true,
|
|
});
|
|
if (!referencedText) return null;
|
|
const fromLabel = referenced.author ? buildDirectLabel(referenced.author) : "Unknown";
|
|
const body = `${referencedText}\n[discord message id: ${referenced.id} channel: ${referenced.channelId} from: ${formatDiscordUserTag(referenced.author)} user id:${referenced.author?.id ?? "unknown"}]`;
|
|
return formatAgentEnvelope({
|
|
channel: "Discord",
|
|
from: fromLabel,
|
|
timestamp: resolveTimestampMs(referenced.timestamp),
|
|
body,
|
|
envelope: options?.envelope,
|
|
});
|
|
}
|
|
|
|
export function buildDirectLabel(author: User) {
|
|
const username = formatDiscordUserTag(author);
|
|
return `${username} user id:${author.id}`;
|
|
}
|
|
|
|
export function buildGuildLabel(params: { guild?: Guild; channelName: string; channelId: string }) {
|
|
const { guild, channelName, channelId } = params;
|
|
return `${guild?.name ?? "Guild"} #${channelName} channel id:${channelId}`;
|
|
}
|