diff --git a/src/discord/send.creates-thread.test.ts b/src/discord/send.creates-thread.test.ts index 3d89b507a7e..8b5994f4c7d 100644 --- a/src/discord/send.creates-thread.test.ts +++ b/src/discord/send.creates-thread.test.ts @@ -120,6 +120,24 @@ describe("sendMessageDiscord", () => { ); }); + it("respects explicit thread type for standalone threads", async () => { + const { rest, getMock, postMock } = makeRest(); + getMock.mockResolvedValue({ type: ChannelType.GuildText }); + postMock.mockResolvedValue({ id: "t1" }); + await createThreadDiscord( + "chan1", + { name: "thread", type: ChannelType.PrivateThread }, + { rest, token: "t" }, + ); + expect(getMock).toHaveBeenCalledWith(Routes.channel("chan1")); + expect(postMock).toHaveBeenCalledWith( + Routes.threads("chan1"), + expect.objectContaining({ + body: expect.objectContaining({ name: "thread", type: ChannelType.PrivateThread }), + }), + ); + }); + it("lists active threads by guild", async () => { const { rest, getMock } = makeRest(); getMock.mockResolvedValue({ threads: [] }); diff --git a/src/discord/send.messages.ts b/src/discord/send.messages.ts index 1d776f5726a..92ff6bb8ebb 100644 --- a/src/discord/send.messages.ts +++ b/src/discord/send.messages.ts @@ -105,6 +105,9 @@ export async function createThreadDiscord( if (payload.autoArchiveMinutes) { body.auto_archive_duration = payload.autoArchiveMinutes; } + if (!payload.messageId && payload.type !== undefined) { + body.type = payload.type; + } let channelType: ChannelType | undefined; if (!payload.messageId) { // Only detect channel kind for route-less thread creation.