Spaces:
Running
Running
File size: 1,785 Bytes
fb4d8fe | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import type { Guild, Message, User } from "@buape/carbon";
import { formatAgentEnvelope, type EnvelopeFormatOptions } from "../../auto-reply/envelope.js";
import { resolveTimestampMs } from "./format.js";
import { resolveDiscordSenderIdentity } from "./sender-identity.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 sender = resolveDiscordSenderIdentity({
author: referenced.author,
pluralkitInfo: null,
});
const fromLabel = referenced.author ? buildDirectLabel(referenced.author, sender.tag) : "Unknown";
const body = `${referencedText}\n[discord message id: ${referenced.id} channel: ${referenced.channelId} from: ${sender.tag ?? sender.label} user id:${sender.id}]`;
return formatAgentEnvelope({
channel: "Discord",
from: fromLabel,
timestamp: resolveTimestampMs(referenced.timestamp),
body,
envelope: options?.envelope,
});
}
export function buildDirectLabel(author: User, tagOverride?: string) {
const username =
tagOverride?.trim() || resolveDiscordSenderIdentity({ author, pluralkitInfo: null }).tag;
return `${username ?? "unknown"} 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}`;
}
|