Discord: preserve media caption whitespace

This commit is contained in:
Shadow
2026-02-12 16:39:58 -06:00
parent 01e4e15364
commit 61d57be4c2
2 changed files with 32 additions and 2 deletions

View File

@@ -246,6 +246,32 @@ describe("sendMessageDiscord", () => {
);
});
it("sends media with empty text without content field", async () => {
const { rest, postMock } = makeRest();
postMock.mockResolvedValue({ id: "msg", channel_id: "789" });
const res = await sendMessageDiscord("channel:789", "", {
rest,
token: "t",
mediaUrl: "file:///tmp/photo.jpg",
});
expect(res.messageId).toBe("msg");
const body = postMock.mock.calls[0]?.[1]?.body;
expect(body).not.toHaveProperty("content");
expect(body).toHaveProperty("files");
});
it("preserves whitespace in media captions", async () => {
const { rest, postMock } = makeRest();
postMock.mockResolvedValue({ id: "msg", channel_id: "789" });
await sendMessageDiscord("channel:789", " spaced ", {
rest,
token: "t",
mediaUrl: "file:///tmp/photo.jpg",
});
const body = postMock.mock.calls[0]?.[1]?.body;
expect(body).toHaveProperty("content", " spaced ");
});
it("includes message_reference when replying", async () => {
const { rest, postMock } = makeRest();
postMock.mockResolvedValue({ id: "msg1", channel_id: "789" });

View File

@@ -361,13 +361,17 @@ async function sendDiscordMedia(
const media = await loadWebMedia(mediaUrl);
const chunks = text ? buildDiscordTextChunks(text, { maxLinesPerMessage, chunkMode }) : [];
const caption = chunks[0] ?? "";
const hasCaption = caption.trim().length > 0;
const messageReference = replyTo ? { message_id: replyTo, fail_if_not_exists: false } : undefined;
const res = (await request(
() =>
rest.post(Routes.channelMessages(channelId), {
body: {
content: caption || undefined,
message_reference: messageReference,
// Only include content when there is actual text; Discord rejects
// media-only messages that carry an empty or undefined content field
// when sent as multipart/form-data. Preserve whitespace in captions.
...(hasCaption ? { content: caption } : {}),
...(messageReference ? { message_reference: messageReference } : {}),
...(embeds?.length ? { embeds } : {}),
files: [
{