From 751aee6fa7d4c542324a30e9b9bc641b0e7a8bf4 Mon Sep 17 00:00:00 2001 From: cherryblossom000 <31467609+cherryblossom000@users.noreply.github.com> Date: Mon, 27 Dec 2021 01:56:43 +1100 Subject: [PATCH] feat(APIGuildScheduledEvent): add more precise types for stage instance/voice/external events (#278) This commit turns `APIGuildScheduledEvent` into a union of `APIStageInstanceGuildScheduledEvent`, `APIVoiceGuildScheduledEvent`, and `APIExternalGuildScheduledEvent`, which each has more precise types according to [the docs][1]. This commit also fixes a bug as previously `APIGuildScheduledEvent#entity_metadata` was not nullable, even though it should be. [1]: https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-field-requirements-by-entity-type --- deno/payloads/v8/guildScheduledEvent.ts | 31 ++++++++++++++++++++++--- deno/payloads/v9/guildScheduledEvent.ts | 31 ++++++++++++++++++++++--- payloads/v8/guildScheduledEvent.ts | 31 ++++++++++++++++++++++--- payloads/v9/guildScheduledEvent.ts | 31 ++++++++++++++++++++++--- 4 files changed, 112 insertions(+), 12 deletions(-) diff --git a/deno/payloads/v8/guildScheduledEvent.ts b/deno/payloads/v8/guildScheduledEvent.ts index 472a4bacd..f1a366e7f 100644 --- a/deno/payloads/v8/guildScheduledEvent.ts +++ b/deno/payloads/v8/guildScheduledEvent.ts @@ -2,7 +2,7 @@ import type { APIUser } from './user.ts'; import type { APIGuildMember } from './guild.ts'; import type { Snowflake } from '../../globals.ts'; -export interface APIGuildScheduledEvent { +interface APIGuildScheduledEventBase { /** * The id of the guild event */ @@ -46,7 +46,7 @@ export interface APIGuildScheduledEvent { /** * The type of hosting entity associated with the scheduled event */ - entity_type: GuildScheduledEventEntityType; + entity_type: Type; /** * The id of the hosting entity associated with the scheduled event */ @@ -54,7 +54,7 @@ export interface APIGuildScheduledEvent { /** * The entity metadata for the scheduled event */ - entity_metadata: APIGuildScheduledEventEntityMetadata; + entity_metadata: APIGuildScheduledEventEntityMetadata | null; /** * The user that created the scheduled event */ @@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent { user_count?: number; } +export interface APIStageInstanceGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIExternalGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: null; + entity_metadata: Required; +} + +/** + * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure + */ +export type APIGuildScheduledEvent = + | APIStageInstanceGuildScheduledEvent + | APIVoiceGuildScheduledEvent + | APIExternalGuildScheduledEvent; + /** * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata */ diff --git a/deno/payloads/v9/guildScheduledEvent.ts b/deno/payloads/v9/guildScheduledEvent.ts index 472a4bacd..f1a366e7f 100644 --- a/deno/payloads/v9/guildScheduledEvent.ts +++ b/deno/payloads/v9/guildScheduledEvent.ts @@ -2,7 +2,7 @@ import type { APIUser } from './user.ts'; import type { APIGuildMember } from './guild.ts'; import type { Snowflake } from '../../globals.ts'; -export interface APIGuildScheduledEvent { +interface APIGuildScheduledEventBase { /** * The id of the guild event */ @@ -46,7 +46,7 @@ export interface APIGuildScheduledEvent { /** * The type of hosting entity associated with the scheduled event */ - entity_type: GuildScheduledEventEntityType; + entity_type: Type; /** * The id of the hosting entity associated with the scheduled event */ @@ -54,7 +54,7 @@ export interface APIGuildScheduledEvent { /** * The entity metadata for the scheduled event */ - entity_metadata: APIGuildScheduledEventEntityMetadata; + entity_metadata: APIGuildScheduledEventEntityMetadata | null; /** * The user that created the scheduled event */ @@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent { user_count?: number; } +export interface APIStageInstanceGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIExternalGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: null; + entity_metadata: Required; +} + +/** + * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure + */ +export type APIGuildScheduledEvent = + | APIStageInstanceGuildScheduledEvent + | APIVoiceGuildScheduledEvent + | APIExternalGuildScheduledEvent; + /** * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata */ diff --git a/payloads/v8/guildScheduledEvent.ts b/payloads/v8/guildScheduledEvent.ts index 7a50be703..ba0dc7e87 100644 --- a/payloads/v8/guildScheduledEvent.ts +++ b/payloads/v8/guildScheduledEvent.ts @@ -2,7 +2,7 @@ import type { APIUser } from './user'; import type { APIGuildMember } from './guild'; import type { Snowflake } from '../../globals'; -export interface APIGuildScheduledEvent { +interface APIGuildScheduledEventBase { /** * The id of the guild event */ @@ -46,7 +46,7 @@ export interface APIGuildScheduledEvent { /** * The type of hosting entity associated with the scheduled event */ - entity_type: GuildScheduledEventEntityType; + entity_type: Type; /** * The id of the hosting entity associated with the scheduled event */ @@ -54,7 +54,7 @@ export interface APIGuildScheduledEvent { /** * The entity metadata for the scheduled event */ - entity_metadata: APIGuildScheduledEventEntityMetadata; + entity_metadata: APIGuildScheduledEventEntityMetadata | null; /** * The user that created the scheduled event */ @@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent { user_count?: number; } +export interface APIStageInstanceGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIExternalGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: null; + entity_metadata: Required; +} + +/** + * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure + */ +export type APIGuildScheduledEvent = + | APIStageInstanceGuildScheduledEvent + | APIVoiceGuildScheduledEvent + | APIExternalGuildScheduledEvent; + /** * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata */ diff --git a/payloads/v9/guildScheduledEvent.ts b/payloads/v9/guildScheduledEvent.ts index 7a50be703..ba0dc7e87 100644 --- a/payloads/v9/guildScheduledEvent.ts +++ b/payloads/v9/guildScheduledEvent.ts @@ -2,7 +2,7 @@ import type { APIUser } from './user'; import type { APIGuildMember } from './guild'; import type { Snowflake } from '../../globals'; -export interface APIGuildScheduledEvent { +interface APIGuildScheduledEventBase { /** * The id of the guild event */ @@ -46,7 +46,7 @@ export interface APIGuildScheduledEvent { /** * The type of hosting entity associated with the scheduled event */ - entity_type: GuildScheduledEventEntityType; + entity_type: Type; /** * The id of the hosting entity associated with the scheduled event */ @@ -54,7 +54,7 @@ export interface APIGuildScheduledEvent { /** * The entity metadata for the scheduled event */ - entity_metadata: APIGuildScheduledEventEntityMetadata; + entity_metadata: APIGuildScheduledEventEntityMetadata | null; /** * The user that created the scheduled event */ @@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent { user_count?: number; } +export interface APIStageInstanceGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase { + channel_id: Snowflake; + entity_metadata: null; +} + +export interface APIExternalGuildScheduledEvent + extends APIGuildScheduledEventBase { + channel_id: null; + entity_metadata: Required; +} + +/** + * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure + */ +export type APIGuildScheduledEvent = + | APIStageInstanceGuildScheduledEvent + | APIVoiceGuildScheduledEvent + | APIExternalGuildScheduledEvent; + /** * https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata */