discord: auto-create thread when sending to Forum/Media channels (#12380)

* discord: auto-create thread when sending to Forum/Media channels

* Discord: harden forum thread sends (#12380) (thanks @magendary)

* fix: clean up discord send exports (#12380) (thanks @magendary)

---------

Co-authored-by: Shadow <shadow@clawd.bot>
This commit is contained in:
magendary
2026-02-09 18:26:42 -08:00
committed by GitHub
parent 6d26ba3bb6
commit ead3bb645f
5 changed files with 286 additions and 66 deletions

View File

@@ -278,6 +278,24 @@ async function resolveChannelId(
return { channelId: dmChannel.id, dm: true };
}
export function buildDiscordTextChunks(
text: string,
opts: { maxLinesPerMessage?: number; chunkMode?: ChunkMode; maxChars?: number } = {},
): string[] {
if (!text) {
return [];
}
const chunks = chunkDiscordTextWithMode(text, {
maxChars: opts.maxChars ?? DISCORD_TEXT_LIMIT,
maxLines: opts.maxLinesPerMessage,
chunkMode: opts.chunkMode,
});
if (!chunks.length && text) {
chunks.push(text);
}
return chunks;
}
async function sendDiscordText(
rest: RequestClient,
channelId: string,
@@ -292,14 +310,7 @@ async function sendDiscordText(
throw new Error("Message must be non-empty for Discord sends");
}
const messageReference = replyTo ? { message_id: replyTo, fail_if_not_exists: false } : undefined;
const chunks = chunkDiscordTextWithMode(text, {
maxChars: DISCORD_TEXT_LIMIT,
maxLines: maxLinesPerMessage,
chunkMode,
});
if (!chunks.length && text) {
chunks.push(text);
}
const chunks = buildDiscordTextChunks(text, { maxLinesPerMessage, chunkMode });
if (chunks.length === 1) {
const res = (await request(
() =>
@@ -348,16 +359,7 @@ async function sendDiscordMedia(
chunkMode?: ChunkMode,
) {
const media = await loadWebMedia(mediaUrl);
const chunks = text
? chunkDiscordTextWithMode(text, {
maxChars: DISCORD_TEXT_LIMIT,
maxLines: maxLinesPerMessage,
chunkMode,
})
: [];
if (!chunks.length && text) {
chunks.push(text);
}
const chunks = text ? buildDiscordTextChunks(text, { maxLinesPerMessage, chunkMode }) : [];
const caption = chunks[0] ?? "";
const messageReference = replyTo ? { message_id: replyTo, fail_if_not_exists: false } : undefined;
const res = (await request(