From 8a4968f1af0b41e9594cdb3f69346cf353b21a23 Mon Sep 17 00:00:00 2001 From: rigormorrtiss Date: Sat, 22 May 2021 11:41:06 +0400 Subject: [PATCH] add(types): stage discovery privacy fields (#957) * feat: add stage discovery fields * feat: add stage discovery fields * Update src/types/channels/privacy_level.ts Co-authored-by: ITOH * change: prettier code Co-authored-by: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Co-authored-by: ITOH Co-authored-by: Skillz4Killz --- src/helpers/channels/create_stage_instance.ts | 17 ++++++++++++----- src/helpers/channels/update_stage_instance.ts | 13 ++++++++----- src/types/channels/privacy_level.ts | 7 +++++++ src/types/channels/stage_instance.ts | 6 +++++- 4 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 src/types/channels/privacy_level.ts diff --git a/src/helpers/channels/create_stage_instance.ts b/src/helpers/channels/create_stage_instance.ts index e0da13859..17728e9a0 100644 --- a/src/helpers/channels/create_stage_instance.ts +++ b/src/helpers/channels/create_stage_instance.ts @@ -6,9 +6,11 @@ import type { StageInstance } from "../../types/channels/stage_instance.ts"; import { cacheHandlers } from "../../cache.ts"; import { ChannelTypes } from "../../types/channels/channel_types.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; +import { PrivacyLevel } from "../../types/channels/privacy_level.ts"; +import { snakelize } from "../../util/utils.ts"; /** Creates a new Stage instance associated to a Stage channel. Requires the user to be a moderator of the Stage channel. */ -export async function createStageInstance(channelId: bigint, topic: string) { +export async function createStageInstance(channelId: bigint, topic: string, privacyLevel?: PrivacyLevel) { const channel = await cacheHandlers.get("channels", channelId); if (channel) { @@ -23,8 +25,13 @@ export async function createStageInstance(channelId: bigint, topic: string) { throw new Error(Errors.INVALID_TOPIC_LENGTH); } - return await rest.runMethod("post", endpoints.STAGE_INSTANCES, { - channel_id: channelId, - topic, - }); + return await rest.runMethod( + "post", + endpoints.STAGE_INSTANCES, + snakelize({ + channelId, + topic, + privacyLevel, + }) + ); } diff --git a/src/helpers/channels/update_stage_instance.ts b/src/helpers/channels/update_stage_instance.ts index 08e34f86f..c0cbe8e31 100644 --- a/src/helpers/channels/update_stage_instance.ts +++ b/src/helpers/channels/update_stage_instance.ts @@ -6,9 +6,13 @@ import { validateLength } from "../../util/validate_length.ts"; import { cacheHandlers } from "../../cache.ts"; import { requireBotChannelPermissions } from "../../util/permissions.ts"; import { ChannelTypes } from "../../types/channels/channel_types.ts"; +import { snakelize } from "../../util/utils.ts"; /** Updates fields of an existing Stage instance. Requires the user to be a moderator of the Stage channel. */ -export async function updateStageInstance(channelId: bigint, topic: string) { +export async function updateStageInstance( + channelId: bigint, + data: Partial> = {} +) { const channel = await cacheHandlers.get("channels", channelId); if (channel) { @@ -20,7 +24,8 @@ export async function updateStageInstance(channelId: bigint, topic: string) { } if ( - !validateLength(topic, { + data?.topic && + !validateLength(data.topic, { min: 1, max: 120, }) @@ -28,7 +33,5 @@ export async function updateStageInstance(channelId: bigint, topic: string) { throw new Error(Errors.INVALID_TOPIC_LENGTH); } - return await rest.runMethod("patch", endpoints.STAGE_INSTANCE(channelId), { - topic, - }); + return await rest.runMethod("patch", endpoints.STAGE_INSTANCE(channelId), snakelize(data)); } diff --git a/src/types/channels/privacy_level.ts b/src/types/channels/privacy_level.ts new file mode 100644 index 000000000..b78e77b39 --- /dev/null +++ b/src/types/channels/privacy_level.ts @@ -0,0 +1,7 @@ +// TODO: add resource link +export enum PrivacyLevel { + /** The Stage instance is visible publicly, such as on Stage discovery */ + Public = 1, + /** The Stage instance is visible to only guild members */ + GuildOnly, +} diff --git a/src/types/channels/stage_instance.ts b/src/types/channels/stage_instance.ts index 3862ff9cc..a4e64aee8 100644 --- a/src/types/channels/stage_instance.ts +++ b/src/types/channels/stage_instance.ts @@ -1,4 +1,4 @@ -// TODO: add resource link +/** https://discord.com/developers/docs/resources/stage-instance#auto-closing-stage-instance-structure */ export interface StageInstance { /** The id of this Stage instance */ id: string; @@ -8,4 +8,8 @@ export interface StageInstance { channelId: string; /** The topic of the Stage instance (1-120 characters) */ topic: string; + /** The privacy level of the Stage instance */ + privacyLevel: number; + /** Whether or not Stage discovery is disabled */ + discoverableDisabled: boolean; }