mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-16 03:18:17 +00:00
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { cacheHandlers } from "../../../cache.ts";
|
|
import { rest } from "../../../rest/rest.ts";
|
|
import { ChannelTypes } from "../../../types/channels/channel_types.ts";
|
|
import { StartThread } from "../../../types/channels/threads/start_thread.ts";
|
|
import { Errors } from "../../../types/discordeno/errors.ts";
|
|
import { endpoints } from "../../../util/constants.ts";
|
|
import { snakelize } from "../../../util/utils.ts";
|
|
|
|
/**
|
|
* Creates a new public thread from an existing message. Returns a channel on success, and a 400 BAD REQUEST on invalid parameters. Fires a Thread Create Gateway event.
|
|
* @param messageId when provided the thread will be public
|
|
*/
|
|
export async function startThread(
|
|
channelId: bigint,
|
|
options: StartThread & { messageId?: bigint },
|
|
) {
|
|
const channel = await cacheHandlers.get("channels", channelId);
|
|
if (channel) {
|
|
// TODO(threads): perm check
|
|
if (
|
|
![ChannelTypes.GuildText, ChannelTypes.GuildNews].includes(channel.type)
|
|
) {
|
|
throw new Error(Errors.INVALID_THREAD_PARENT_CHANNEL_TYPE);
|
|
}
|
|
|
|
if (!options.messageId && channel.type === ChannelTypes.GuildNews) {
|
|
throw new Error(Errors.GUILD_NEWS_CHANNEL_ONLY_SUPPORT_PUBLIC_THREADS);
|
|
}
|
|
}
|
|
|
|
return rest.runMethod(
|
|
"post",
|
|
options?.messageId
|
|
? endpoints.THREAD_START_PUBLIC(channelId, options.messageId)
|
|
: endpoints.THREAD_START_PRIVATE(channelId),
|
|
snakelize(options),
|
|
);
|
|
}
|