export async function createThreadDiscord(
channelId: string,
payload: DiscordThreadCreate,
opts: DiscordReactOpts,
) { const rest = resolveDiscordRest(opts); const body: Record<string, unknown> = { name: payload.name }; 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. // If this lookup fails, keep prior behavior and let Discord validate. try { const channel = (await rest.get(Routes.channel(channelId))) as APIChannel | null | undefined;
channelType = channel?.type;
} catch {
channelType = undefined;
}
} const isForumLike =
channelType === ChannelType.GuildForum || channelType === ChannelType.GuildMedia; if (isForumLike) { const starterContent = payload.content?.trim() ? payload.content : payload.name;
body.message = { content: starterContent }; if (payload.appliedTags?.length) {
body.applied_tags = payload.appliedTags;
}
} // When creating a standalone thread (no messageId) in a non-forum channel, // default to public thread (type 11). Discord defaults to private (type 12) // which is unexpected for most users. (#14147) if (!payload.messageId && !isForumLike && body.type === undefined) {
body.type = ChannelType.PublicThread;
} const route = payload.messageId
? Routes.threads(channelId, payload.messageId)
: Routes.threads(channelId); constthread = (await rest.post(route, { body })) as { id: string };
// For non-forum channels, send the initial message separately after thread creation. // Forum channels handle this via the `message` field in the request body. if (!isForumLike && payload.content?.trim()) {
await rest.post(Routes.channelMessages(thread.id), {
body: { content: payload.content },
});
}
returnthread;
}
export async function listThreadsDiscord(payload: DiscordThreadList, opts: DiscordReactOpts) { const rest = resolveDiscordRest(opts); if (payload.includeArchived) { if (!payload.channelId) { thrownew Error("channelId required to list archived threads");
} const params: Record<string, string | number> = {}; if (payload.before) {
params.before = payload.before;
} if (payload.limit) {
params.limit = payload.limit;
} return await rest.get(Routes.channelThreads(payload.channelId, "public"), params);
} return await rest.get(Routes.guildActiveThreads(payload.guildId));
}
export async function searchMessagesDiscord(query: DiscordSearchQuery, opts: DiscordReactOpts) { const rest = resolveDiscordRest(opts); const params = new URLSearchParams();
params.set("content", query.content); if (query.channelIds?.length) { for (const channelId of query.channelIds) {
params.append("channel_id", channelId);
}
} if (query.authorIds?.length) { for (const authorId of query.authorIds) {
params.append("author_id", authorId);
}
} if (query.limit) { const limit = Math.min(Math.max(Math.floor(query.limit), 1), 25);
params.set("limit", String(limit));
} return await rest.get(`/guilds/${query.guildId}/messages/search?${params.toString()}`);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-09)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.