Skip to content

Commit 751aee6

Browse files
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
1 parent 9f4f59c commit 751aee6

4 files changed

Lines changed: 112 additions & 12 deletions

File tree

deno/payloads/v8/guildScheduledEvent.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { APIUser } from './user.ts';
22
import type { APIGuildMember } from './guild.ts';
33
import type { Snowflake } from '../../globals.ts';
44

5-
export interface APIGuildScheduledEvent {
5+
interface APIGuildScheduledEventBase<Type extends GuildScheduledEventEntityType> {
66
/**
77
* The id of the guild event
88
*/
@@ -46,15 +46,15 @@ export interface APIGuildScheduledEvent {
4646
/**
4747
* The type of hosting entity associated with the scheduled event
4848
*/
49-
entity_type: GuildScheduledEventEntityType;
49+
entity_type: Type;
5050
/**
5151
* The id of the hosting entity associated with the scheduled event
5252
*/
5353
entity_id: Snowflake | null;
5454
/**
5555
* The entity metadata for the scheduled event
5656
*/
57-
entity_metadata: APIGuildScheduledEventEntityMetadata;
57+
entity_metadata: APIGuildScheduledEventEntityMetadata | null;
5858
/**
5959
* The user that created the scheduled event
6060
*/
@@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent {
6565
user_count?: number;
6666
}
6767

68+
export interface APIStageInstanceGuildScheduledEvent
69+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.StageInstance> {
70+
channel_id: Snowflake;
71+
entity_metadata: null;
72+
}
73+
74+
export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.Voice> {
75+
channel_id: Snowflake;
76+
entity_metadata: null;
77+
}
78+
79+
export interface APIExternalGuildScheduledEvent
80+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.External> {
81+
channel_id: null;
82+
entity_metadata: Required<APIGuildScheduledEventEntityMetadata>;
83+
}
84+
85+
/**
86+
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure
87+
*/
88+
export type APIGuildScheduledEvent =
89+
| APIStageInstanceGuildScheduledEvent
90+
| APIVoiceGuildScheduledEvent
91+
| APIExternalGuildScheduledEvent;
92+
6893
/**
6994
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata
7095
*/

deno/payloads/v9/guildScheduledEvent.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { APIUser } from './user.ts';
22
import type { APIGuildMember } from './guild.ts';
33
import type { Snowflake } from '../../globals.ts';
44

5-
export interface APIGuildScheduledEvent {
5+
interface APIGuildScheduledEventBase<Type extends GuildScheduledEventEntityType> {
66
/**
77
* The id of the guild event
88
*/
@@ -46,15 +46,15 @@ export interface APIGuildScheduledEvent {
4646
/**
4747
* The type of hosting entity associated with the scheduled event
4848
*/
49-
entity_type: GuildScheduledEventEntityType;
49+
entity_type: Type;
5050
/**
5151
* The id of the hosting entity associated with the scheduled event
5252
*/
5353
entity_id: Snowflake | null;
5454
/**
5555
* The entity metadata for the scheduled event
5656
*/
57-
entity_metadata: APIGuildScheduledEventEntityMetadata;
57+
entity_metadata: APIGuildScheduledEventEntityMetadata | null;
5858
/**
5959
* The user that created the scheduled event
6060
*/
@@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent {
6565
user_count?: number;
6666
}
6767

68+
export interface APIStageInstanceGuildScheduledEvent
69+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.StageInstance> {
70+
channel_id: Snowflake;
71+
entity_metadata: null;
72+
}
73+
74+
export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.Voice> {
75+
channel_id: Snowflake;
76+
entity_metadata: null;
77+
}
78+
79+
export interface APIExternalGuildScheduledEvent
80+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.External> {
81+
channel_id: null;
82+
entity_metadata: Required<APIGuildScheduledEventEntityMetadata>;
83+
}
84+
85+
/**
86+
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure
87+
*/
88+
export type APIGuildScheduledEvent =
89+
| APIStageInstanceGuildScheduledEvent
90+
| APIVoiceGuildScheduledEvent
91+
| APIExternalGuildScheduledEvent;
92+
6893
/**
6994
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata
7095
*/

payloads/v8/guildScheduledEvent.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { APIUser } from './user';
22
import type { APIGuildMember } from './guild';
33
import type { Snowflake } from '../../globals';
44

5-
export interface APIGuildScheduledEvent {
5+
interface APIGuildScheduledEventBase<Type extends GuildScheduledEventEntityType> {
66
/**
77
* The id of the guild event
88
*/
@@ -46,15 +46,15 @@ export interface APIGuildScheduledEvent {
4646
/**
4747
* The type of hosting entity associated with the scheduled event
4848
*/
49-
entity_type: GuildScheduledEventEntityType;
49+
entity_type: Type;
5050
/**
5151
* The id of the hosting entity associated with the scheduled event
5252
*/
5353
entity_id: Snowflake | null;
5454
/**
5555
* The entity metadata for the scheduled event
5656
*/
57-
entity_metadata: APIGuildScheduledEventEntityMetadata;
57+
entity_metadata: APIGuildScheduledEventEntityMetadata | null;
5858
/**
5959
* The user that created the scheduled event
6060
*/
@@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent {
6565
user_count?: number;
6666
}
6767

68+
export interface APIStageInstanceGuildScheduledEvent
69+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.StageInstance> {
70+
channel_id: Snowflake;
71+
entity_metadata: null;
72+
}
73+
74+
export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.Voice> {
75+
channel_id: Snowflake;
76+
entity_metadata: null;
77+
}
78+
79+
export interface APIExternalGuildScheduledEvent
80+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.External> {
81+
channel_id: null;
82+
entity_metadata: Required<APIGuildScheduledEventEntityMetadata>;
83+
}
84+
85+
/**
86+
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure
87+
*/
88+
export type APIGuildScheduledEvent =
89+
| APIStageInstanceGuildScheduledEvent
90+
| APIVoiceGuildScheduledEvent
91+
| APIExternalGuildScheduledEvent;
92+
6893
/**
6994
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata
7095
*/

payloads/v9/guildScheduledEvent.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { APIUser } from './user';
22
import type { APIGuildMember } from './guild';
33
import type { Snowflake } from '../../globals';
44

5-
export interface APIGuildScheduledEvent {
5+
interface APIGuildScheduledEventBase<Type extends GuildScheduledEventEntityType> {
66
/**
77
* The id of the guild event
88
*/
@@ -46,15 +46,15 @@ export interface APIGuildScheduledEvent {
4646
/**
4747
* The type of hosting entity associated with the scheduled event
4848
*/
49-
entity_type: GuildScheduledEventEntityType;
49+
entity_type: Type;
5050
/**
5151
* The id of the hosting entity associated with the scheduled event
5252
*/
5353
entity_id: Snowflake | null;
5454
/**
5555
* The entity metadata for the scheduled event
5656
*/
57-
entity_metadata: APIGuildScheduledEventEntityMetadata;
57+
entity_metadata: APIGuildScheduledEventEntityMetadata | null;
5858
/**
5959
* The user that created the scheduled event
6060
*/
@@ -65,6 +65,31 @@ export interface APIGuildScheduledEvent {
6565
user_count?: number;
6666
}
6767

68+
export interface APIStageInstanceGuildScheduledEvent
69+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.StageInstance> {
70+
channel_id: Snowflake;
71+
entity_metadata: null;
72+
}
73+
74+
export interface APIVoiceGuildScheduledEvent extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.Voice> {
75+
channel_id: Snowflake;
76+
entity_metadata: null;
77+
}
78+
79+
export interface APIExternalGuildScheduledEvent
80+
extends APIGuildScheduledEventBase<GuildScheduledEventEntityType.External> {
81+
channel_id: null;
82+
entity_metadata: Required<APIGuildScheduledEventEntityMetadata>;
83+
}
84+
85+
/**
86+
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure
87+
*/
88+
export type APIGuildScheduledEvent =
89+
| APIStageInstanceGuildScheduledEvent
90+
| APIVoiceGuildScheduledEvent
91+
| APIExternalGuildScheduledEvent;
92+
6893
/**
6994
* https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata
7095
*/

0 commit comments

Comments
 (0)