Discord: include reply context
This commit is contained in:
@@ -172,12 +172,7 @@ export async function monitorDiscordProvider(opts: MonitorDiscordOpts = {}) {
|
|||||||
const botId = client.user?.id;
|
const botId = client.user?.id;
|
||||||
const wasMentioned =
|
const wasMentioned =
|
||||||
!isDirectMessage && Boolean(botId && message.mentions.has(botId));
|
!isDirectMessage && Boolean(botId && message.mentions.has(botId));
|
||||||
const attachment = message.attachments.first();
|
const baseText = resolveDiscordMessageText(message);
|
||||||
const baseText =
|
|
||||||
message.content?.trim() ||
|
|
||||||
(attachment ? inferPlaceholder(attachment) : "") ||
|
|
||||||
message.embeds[0]?.description ||
|
|
||||||
"";
|
|
||||||
if (isVerbose()) {
|
if (isVerbose()) {
|
||||||
logVerbose(
|
logVerbose(
|
||||||
`discord: inbound id=${message.id} guild=${message.guild?.id ?? "dm"} channel=${message.channelId} mention=${wasMentioned ? "yes" : "no"} type=${isDirectMessage ? "dm" : isGroupDm ? "group-dm" : "guild"} content=${baseText ? "yes" : "no"}`,
|
`discord: inbound id=${message.id} guild=${message.guild?.id ?? "dm"} channel=${message.channelId} mention=${wasMentioned ? "yes" : "no"} type=${isDirectMessage ? "dm" : isGroupDm ? "group-dm" : "guild"} content=${baseText ? "yes" : "no"}`,
|
||||||
@@ -357,6 +352,10 @@ export async function monitorDiscordProvider(opts: MonitorDiscordOpts = {}) {
|
|||||||
combinedBody = `${combinedBody}\n[from: ${name} id:${id}]`;
|
combinedBody = `${combinedBody}\n[from: ${name} id:${id}]`;
|
||||||
shouldClearHistory = true;
|
shouldClearHistory = true;
|
||||||
}
|
}
|
||||||
|
const replyContext = await resolveReplyContext(message);
|
||||||
|
if (replyContext) {
|
||||||
|
combinedBody = `[Replied message - for context]\n${replyContext}\n\n${combinedBody}`;
|
||||||
|
}
|
||||||
|
|
||||||
const ctxPayload = {
|
const ctxPayload = {
|
||||||
Body: combinedBody,
|
Body: combinedBody,
|
||||||
@@ -659,6 +658,43 @@ function inferPlaceholder(attachment: import("discord.js").Attachment): string {
|
|||||||
return "<media:document>";
|
return "<media:document>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resolveDiscordMessageText(message: Message): string {
|
||||||
|
const attachment = message.attachments.first();
|
||||||
|
return (
|
||||||
|
message.content?.trim() ||
|
||||||
|
(attachment ? inferPlaceholder(attachment) : "") ||
|
||||||
|
message.embeds[0]?.description ||
|
||||||
|
""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function resolveReplyContext(message: Message): Promise<string | null> {
|
||||||
|
if (!message.reference?.messageId) return null;
|
||||||
|
try {
|
||||||
|
const referenced = await message.fetchReference();
|
||||||
|
if (!referenced?.author) return null;
|
||||||
|
const referencedText = resolveDiscordMessageText(referenced);
|
||||||
|
if (!referencedText) return null;
|
||||||
|
const channelType = referenced.channel.type as ChannelType;
|
||||||
|
const isDirectMessage = channelType === ChannelType.DM;
|
||||||
|
const fromLabel = isDirectMessage
|
||||||
|
? buildDirectLabel(referenced)
|
||||||
|
: referenced.member?.displayName ?? referenced.author.tag;
|
||||||
|
const body = `${referencedText}\n[discord message id: ${referenced.id} channel: ${referenced.channelId} from: ${referenced.author.tag} id:${referenced.author.id}]`;
|
||||||
|
return formatAgentEnvelope({
|
||||||
|
surface: "Discord",
|
||||||
|
from: fromLabel,
|
||||||
|
timestamp: referenced.createdTimestamp,
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
logVerbose(
|
||||||
|
`discord: failed to fetch reply context for ${message.id}: ${String(err)}`,
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function buildDirectLabel(message: import("discord.js").Message) {
|
function buildDirectLabel(message: import("discord.js").Message) {
|
||||||
const username = message.author.tag;
|
const username = message.author.tag;
|
||||||
return `${username} id:${message.author.id}`;
|
return `${username} id:${message.author.id}`;
|
||||||
|
|||||||
Reference in New Issue
Block a user