2026-01-14 01:08:15 +00:00
|
|
|
import type { Guild, Message, User } from "@buape/carbon";
|
2026-01-31 19:50:06 -06:00
|
|
|
import { resolveTimestampMs } from "./format.js";
|
|
|
|
|
import { resolveDiscordSenderIdentity } from "./sender-identity.js";
|
2026-01-14 01:08:15 +00:00
|
|
|
|
2026-02-10 00:35:56 -06:00
|
|
|
export type DiscordReplyContext = {
|
|
|
|
|
id: string;
|
|
|
|
|
channelId: string;
|
|
|
|
|
sender: string;
|
|
|
|
|
body: string;
|
|
|
|
|
timestamp?: number;
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-14 01:08:15 +00:00
|
|
|
export function resolveReplyContext(
|
|
|
|
|
message: Message,
|
2026-01-14 14:31:43 +00:00
|
|
|
resolveDiscordMessageText: (message: Message, options?: { includeForwarded?: boolean }) => string,
|
2026-02-10 00:35:56 -06:00
|
|
|
): DiscordReplyContext | null {
|
2026-01-14 01:08:15 +00:00
|
|
|
const referenced = message.referencedMessage;
|
2026-01-31 16:19:20 +09:00
|
|
|
if (!referenced?.author) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2026-01-14 01:08:15 +00:00
|
|
|
const referencedText = resolveDiscordMessageText(referenced, {
|
|
|
|
|
includeForwarded: true,
|
|
|
|
|
});
|
2026-01-31 16:19:20 +09:00
|
|
|
if (!referencedText) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2026-01-31 19:50:06 -06:00
|
|
|
const sender = resolveDiscordSenderIdentity({
|
|
|
|
|
author: referenced.author,
|
|
|
|
|
pluralkitInfo: null,
|
|
|
|
|
});
|
2026-02-10 00:35:56 -06:00
|
|
|
return {
|
|
|
|
|
id: referenced.id,
|
|
|
|
|
channelId: referenced.channelId,
|
|
|
|
|
sender: sender.tag ?? sender.label ?? "unknown",
|
|
|
|
|
body: referencedText,
|
2026-01-14 01:08:15 +00:00
|
|
|
timestamp: resolveTimestampMs(referenced.timestamp),
|
2026-02-10 00:35:56 -06:00
|
|
|
};
|
2026-01-14 01:08:15 +00:00
|
|
|
}
|
|
|
|
|
|
2026-01-31 19:50:06 -06:00
|
|
|
export function buildDirectLabel(author: User, tagOverride?: string) {
|
|
|
|
|
const username =
|
|
|
|
|
tagOverride?.trim() || resolveDiscordSenderIdentity({ author, pluralkitInfo: null }).tag;
|
|
|
|
|
return `${username ?? "unknown"} user id:${author.id}`;
|
2026-01-14 01:08:15 +00:00
|
|
|
}
|
|
|
|
|
|
2026-02-15 18:47:36 +00:00
|
|
|
export function buildGuildLabel(params: {
|
|
|
|
|
guild?: Guild<true> | Guild;
|
|
|
|
|
channelName: string;
|
|
|
|
|
channelId: string;
|
|
|
|
|
}) {
|
2026-01-14 01:08:15 +00:00
|
|
|
const { guild, channelName, channelId } = params;
|
|
|
|
|
return `${guild?.name ?? "Guild"} #${channelName} channel id:${channelId}`;
|
|
|
|
|
}
|