diff --git a/deno/gateway/v10.ts b/deno/gateway/v10.ts index 127d291c..636f0983 100644 --- a/deno/gateway/v10.ts +++ b/deno/gateway/v10.ts @@ -3,7 +3,6 @@ */ import type { Snowflake } from '../globals.ts'; -import type { GatewayPresenceUpdate } from '../payloads/v10/gateway.ts'; import type { APIApplication, APIApplicationCommandPermission, @@ -16,7 +15,6 @@ import type { APIGuildMember, APIGuildScheduledEvent, APIInteraction, - APIMessage, APIRole, APIStageInstance, APISticker, @@ -25,8 +23,8 @@ import type { APIUnavailableGuild, APIUser, GatewayActivity, - GatewayPresenceUpdate as RawGatewayPresenceUpdate, - GatewayThreadListSync as RawGatewayThreadListSync, + GatewayPresenceUpdate, + GatewayThreadListSync, GatewayThreadMembersUpdate as RawGatewayThreadMembersUpdate, APIVoiceState, InviteTargetType, @@ -39,6 +37,16 @@ import type { APISoundboardSound, GuildChannelType, ThreadChannelType, + APIBaseGuild, + APIBaseGuildMember, + APIBaseVoiceState, + APIBaseVoiceGuildMember, + APIGuildMemberJoined, + APIFlaggedGuildMember, + APIGuildMemberAvatar, + APIGuildMemberUser, + GatewayGuildMembersChunkPresence, + APIBaseMessage, } from '../payloads/v10/mod.ts'; import type { ReactionType } from '../rest/v10/mod.ts'; import type { _Nullable } from '../utils/internals.ts'; @@ -789,9 +797,7 @@ export type GatewayEntitlementModifyDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#entitlement-create} */ -export type GatewayEntitlementCreateDispatchData = Omit & { - ends_at: GatewayEntitlementModifyDispatchData['ends_at'] | null; -}; +export type GatewayEntitlementCreateDispatchData = GatewayEntitlementModifyDispatchData; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#entitlement-create} @@ -873,7 +879,7 @@ export interface GatewayGuildCreateDispatchData extends APIGuild { * * @see {@link https://discord.com/developers/docs/resources/voice#voice-state-object} */ - voice_states: Omit[]; + voice_states: APIBaseVoiceState[]; /** * Users in the guild * @@ -953,7 +959,7 @@ export type GatewayGuildDeleteDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-delete} */ -export interface GatewayGuildDeleteDispatchData extends Omit { +export interface GatewayGuildDeleteDispatchData extends APIBaseGuild { /** * `true` if this guild is unavailable due to an outage * @@ -1127,15 +1133,18 @@ export type GatewayGuildMemberUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-member-update} */ -export type GatewayGuildMemberUpdateDispatchData = _Nullable> & - Omit & - Partial> & - Required> & { - /** - * The id of the guild - */ - guild_id: Snowflake; - }; +export interface GatewayGuildMemberUpdateDispatchData + extends _Nullable, + APIBaseGuildMember, + Partial, + Partial, + Required, + Required { + /** + * The id of the guild + */ + guild_id: Snowflake; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk} @@ -1145,11 +1154,6 @@ export type GatewayGuildMembersChunkDispatch = _DataPayload< GatewayGuildMembersChunkDispatchData >; -/** - * @see {@link https://discord.com/developers/docs/topics/gateway-events#update-presence} - */ -export type GatewayGuildMembersChunkPresence = Omit; - /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk} */ @@ -1597,7 +1601,7 @@ export type GatewayMessageCreateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-create} */ -export type GatewayMessageCreateDispatchData = GatewayMessageEventExtraFields & Omit; +export interface GatewayMessageCreateDispatchData extends GatewayMessageEventExtraFields, APIBaseMessage {} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-update} @@ -1610,7 +1614,24 @@ export type GatewayMessageUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-update} */ -export type GatewayMessageUpdateDispatchData = GatewayMessageEventExtraFields & Omit; +export interface GatewayMessageUpdateDispatchData extends GatewayMessageEventExtraFields, APIBaseMessage {} + +export interface APIGuildMemberNoUser + extends APIBaseGuildMember, + APIFlaggedGuildMember, + APIGuildMemberAvatar, + APIGuildMemberJoined, + APIBaseVoiceGuildMember {} + +export interface APIUserWithMember extends APIUser { + /** + * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events + * from text-based guild channels + * + * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} + */ + member?: APIGuildMemberNoUser; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-create-message-create-extra-fields} @@ -1628,17 +1649,13 @@ export interface GatewayMessageEventExtraFields { * * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} */ - member?: Omit; + member?: APIGuildMemberNoUser; /** * Users specifically mentioned in the message * - * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events - * from text-based guild channels - * * @see {@link https://discord.com/developers/docs/resources/user#user-object} - * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} */ - mentions: (APIUser & { member?: Omit })[]; + mentions: APIUserWithMember[]; } /** @@ -1696,25 +1713,74 @@ export interface GatewayMessageDeleteBulkDispatchData { /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-add} */ -export type GatewayMessageReactionAddDispatch = GatewayMessageReactionData; +export interface GatewayMessageReactionAddDispatchData extends GatewayMessageReactionRemoveDispatchData { + /** + * The member who reacted if this happened in a guild + * + * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} + */ + member?: APIGuildMember; + /** + * The id of the user that posted the message that was reacted to + */ + message_author_id?: Snowflake; + /** + * Colors used for super-reaction animation in "#rrggbb" format + */ + burst_colors?: string[]; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-add} */ -export type GatewayMessageReactionAddDispatchData = GatewayMessageReactionAddDispatch['d']; - -/** - * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} - */ -export type GatewayMessageReactionRemoveDispatch = GatewayMessageReactionData< - GatewayDispatchEvents.MessageReactionRemove, - 'burst_colors' | 'member' | 'message_author_id' +export type GatewayMessageReactionAddDispatch = _DataPayload< + GatewayDispatchEvents.MessageReactionAdd, + GatewayMessageReactionAddDispatchData >; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} */ -export type GatewayMessageReactionRemoveDispatchData = GatewayMessageReactionRemoveDispatch['d']; +export interface GatewayMessageReactionRemoveDispatchData { + /** + * The id of the user + */ + user_id: Snowflake; + /** + * The id of the channel + */ + channel_id: Snowflake; + /** + * The id of the message + */ + message_id: Snowflake; + /** + * The id of the guild + */ + guild_id?: Snowflake; + /** + * The emoji used to react + * + * @see {@link https://discord.com/developers/docs/resources/emoji#emoji-object} + */ + emoji: APIEmoji; + /** + * True if this is a super-reaction + */ + burst: boolean; + /** + * The type of reaction + */ + type: ReactionType; +} + +/** + * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} + */ +export type GatewayMessageReactionRemoveDispatch = _DataPayload< + GatewayDispatchEvents.MessageReactionRemove, + GatewayMessageReactionRemoveDispatchData +>; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-all} @@ -1758,7 +1824,7 @@ export type GatewayPresenceUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#presence-update} */ -export type GatewayPresenceUpdateDispatchData = RawGatewayPresenceUpdate; +export type GatewayPresenceUpdateDispatchData = GatewayPresenceUpdate; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#stage-instance-create} @@ -1810,7 +1876,7 @@ export type GatewayThreadListSyncDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#thread-list-sync} */ -export type GatewayThreadListSyncDispatchData = RawGatewayThreadListSync; +export type GatewayThreadListSyncDispatchData = GatewayThreadListSync; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#thread-members-update} @@ -2415,7 +2481,7 @@ export type GatewayActivityUpdateData = Pick & { +export interface _NonDispatchPayload extends _BaseBasePayload { t: null; s: null; -}; +} export interface _DataPayload extends _BasePayload { op: GatewayOpcodes.Dispatch; @@ -2445,57 +2514,10 @@ export interface _DataPayload d: D; } +// This is not used internally anymore, just remains to be non-breaking export type GatewayMessageReactionData = _DataPayload< E, - Omit< - { - /** - * The id of the user - */ - user_id: Snowflake; - /** - * The id of the channel - */ - channel_id: Snowflake; - /** - * The id of the message - */ - message_id: Snowflake; - /** - * The id of the guild - */ - guild_id?: Snowflake; - /** - * The member who reacted if this happened in a guild - * - * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} - */ - member?: APIGuildMember; - /** - * The emoji used to react - * - * @see {@link https://discord.com/developers/docs/resources/emoji#emoji-object} - */ - emoji: APIEmoji; - /** - * The id of the user that posted the message that was reacted to - */ - message_author_id?: Snowflake; - /** - * True if this is a super-reaction - */ - burst: boolean; - /** - * Colors used for super-reaction animation in "#rrggbb" format - */ - burst_colors: string[]; - /** - * The type of reaction - */ - type: ReactionType; - }, - O - > + Omit >; export interface GatewayMessageReactionRemoveData { diff --git a/deno/gateway/v9.ts b/deno/gateway/v9.ts index e9485bcc..a2c117e8 100644 --- a/deno/gateway/v9.ts +++ b/deno/gateway/v9.ts @@ -3,7 +3,6 @@ */ import type { Snowflake } from '../globals.ts'; -import type { GatewayPresenceUpdate } from '../payloads/v9/gateway.ts'; import type { APIApplication, APIApplicationCommandPermission, @@ -16,7 +15,6 @@ import type { APIGuildMember, APIGuildScheduledEvent, APIInteraction, - APIMessage, APIRole, APIStageInstance, APISticker, @@ -25,8 +23,8 @@ import type { APIUnavailableGuild, APIUser, GatewayActivity, - GatewayPresenceUpdate as RawGatewayPresenceUpdate, - GatewayThreadListSync as RawGatewayThreadListSync, + GatewayPresenceUpdate, + GatewayThreadListSync, GatewayThreadMembersUpdate as RawGatewayThreadMembersUpdate, APIVoiceState, InviteTargetType, @@ -39,6 +37,16 @@ import type { GuildChannelType, ThreadChannelType, APIEntitlement, + APIBaseGuild, + APIBaseGuildMember, + APIBaseVoiceState, + APIBaseVoiceGuildMember, + APIFlaggedGuildMember, + APIGuildMemberUser, + APIGuildMemberAvatar, + GatewayGuildMembersChunkPresence, + APIBaseMessage, + APIGuildMemberJoined, } from '../payloads/v9/mod.ts'; import type { ReactionType } from '../rest/v9/mod.ts'; import type { _Nullable } from '../utils/internals.ts'; @@ -788,9 +796,7 @@ export type GatewayEntitlementModifyDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#entitlement-create} */ -export type GatewayEntitlementCreateDispatchData = Omit & { - ends_at: GatewayEntitlementModifyDispatchData['ends_at'] | null; -}; +export type GatewayEntitlementCreateDispatchData = GatewayEntitlementModifyDispatchData; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#entitlement-create} @@ -872,7 +878,7 @@ export interface GatewayGuildCreateDispatchData extends APIGuild { * * @see {@link https://discord.com/developers/docs/resources/voice#voice-state-object} */ - voice_states: Omit[]; + voice_states: APIBaseVoiceState[]; /** * Users in the guild * @@ -952,7 +958,7 @@ export type GatewayGuildDeleteDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-delete} */ -export interface GatewayGuildDeleteDispatchData extends Omit { +export interface GatewayGuildDeleteDispatchData extends APIBaseGuild { /** * `true` if this guild is unavailable due to an outage * @@ -1126,15 +1132,18 @@ export type GatewayGuildMemberUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-member-update} */ -export type GatewayGuildMemberUpdateDispatchData = _Nullable> & - Omit & - Partial> & - Required> & { - /** - * The id of the guild - */ - guild_id: Snowflake; - }; +export interface GatewayGuildMemberUpdateDispatchData + extends _Nullable, + APIBaseGuildMember, + Partial, + Partial, + Required, + Required { + /** + * The id of the guild + */ + guild_id: Snowflake; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk} @@ -1144,11 +1153,6 @@ export type GatewayGuildMembersChunkDispatch = _DataPayload< GatewayGuildMembersChunkDispatchData >; -/** - * @see {@link https://discord.com/developers/docs/topics/gateway-events#update-presence} - */ -export type GatewayGuildMembersChunkPresence = Omit; - /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk} */ @@ -1596,7 +1600,7 @@ export type GatewayMessageCreateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-create} */ -export type GatewayMessageCreateDispatchData = GatewayMessageEventExtraFields & Omit; +export interface GatewayMessageCreateDispatchData extends GatewayMessageEventExtraFields, APIBaseMessage {} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-update} @@ -1609,7 +1613,24 @@ export type GatewayMessageUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-update} */ -export type GatewayMessageUpdateDispatchData = GatewayMessageEventExtraFields & Omit; +export interface GatewayMessageUpdateDispatchData extends GatewayMessageEventExtraFields, APIBaseMessage {} + +export interface APIGuildMemberNoUser + extends APIBaseGuildMember, + APIFlaggedGuildMember, + APIGuildMemberAvatar, + APIGuildMemberJoined, + APIBaseVoiceGuildMember {} + +export interface APIUserWithMember extends APIUser { + /** + * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events + * from text-based guild channels + * + * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} + */ + member?: APIGuildMemberNoUser; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-create-message-create-extra-fields} @@ -1627,17 +1648,13 @@ export interface GatewayMessageEventExtraFields { * * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} */ - member?: Omit; + member?: APIGuildMemberNoUser; /** * Users specifically mentioned in the message * - * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events - * from text-based guild channels - * * @see {@link https://discord.com/developers/docs/resources/user#user-object} - * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} */ - mentions: (APIUser & { member?: Omit })[]; + mentions: APIUserWithMember[]; } /** @@ -1695,25 +1712,74 @@ export interface GatewayMessageDeleteBulkDispatchData { /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-add} */ -export type GatewayMessageReactionAddDispatch = GatewayMessageReactionData; +export interface GatewayMessageReactionAddDispatchData extends GatewayMessageReactionRemoveDispatchData { + /** + * The member who reacted if this happened in a guild + * + * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} + */ + member?: APIGuildMember; + /** + * The id of the user that posted the message that was reacted to + */ + message_author_id?: Snowflake; + /** + * Colors used for super-reaction animation in "#rrggbb" format + */ + burst_colors?: string[]; +} /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-add} */ -export type GatewayMessageReactionAddDispatchData = GatewayMessageReactionAddDispatch['d']; - -/** - * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} - */ -export type GatewayMessageReactionRemoveDispatch = GatewayMessageReactionData< - GatewayDispatchEvents.MessageReactionRemove, - 'burst_colors' | 'member' | 'message_author_id' +export type GatewayMessageReactionAddDispatch = _DataPayload< + GatewayDispatchEvents.MessageReactionAdd, + GatewayMessageReactionAddDispatchData >; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} */ -export type GatewayMessageReactionRemoveDispatchData = GatewayMessageReactionRemoveDispatch['d']; +export interface GatewayMessageReactionRemoveDispatchData { + /** + * The id of the user + */ + user_id: Snowflake; + /** + * The id of the channel + */ + channel_id: Snowflake; + /** + * The id of the message + */ + message_id: Snowflake; + /** + * The id of the guild + */ + guild_id?: Snowflake; + /** + * The emoji used to react + * + * @see {@link https://discord.com/developers/docs/resources/emoji#emoji-object} + */ + emoji: APIEmoji; + /** + * True if this is a super-reaction + */ + burst: boolean; + /** + * The type of reaction + */ + type: ReactionType; +} + +/** + * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove} + */ +export type GatewayMessageReactionRemoveDispatch = _DataPayload< + GatewayDispatchEvents.MessageReactionRemove, + GatewayMessageReactionRemoveDispatchData +>; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-all} @@ -1757,7 +1823,7 @@ export type GatewayPresenceUpdateDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#presence-update} */ -export type GatewayPresenceUpdateDispatchData = RawGatewayPresenceUpdate; +export type GatewayPresenceUpdateDispatchData = GatewayPresenceUpdate; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#stage-instance-create} @@ -1809,7 +1875,7 @@ export type GatewayThreadListSyncDispatch = _DataPayload< /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#thread-list-sync} */ -export type GatewayThreadListSyncDispatchData = RawGatewayThreadListSync; +export type GatewayThreadListSyncDispatchData = GatewayThreadListSync; /** * @see {@link https://discord.com/developers/docs/topics/gateway-events#thread-members-update} @@ -2414,7 +2480,8 @@ export type GatewayActivityUpdateData = Pick & { +export interface _NonDispatchPayload extends _BaseBasePayload { t: null; s: null; -}; +} export interface _DataPayload extends _BasePayload { op: GatewayOpcodes.Dispatch; @@ -2444,57 +2513,10 @@ export interface _DataPayload d: D; } +// This is not used internally anymore, just remains to be non-breaking export type GatewayMessageReactionData = _DataPayload< E, - Omit< - { - /** - * The id of the user - */ - user_id: Snowflake; - /** - * The id of the channel - */ - channel_id: Snowflake; - /** - * The id of the message - */ - message_id: Snowflake; - /** - * The id of the guild - */ - guild_id?: Snowflake; - /** - * The member who reacted if this happened in a guild - * - * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} - */ - member?: APIGuildMember; - /** - * The emoji used to react - * - * @see {@link https://discord.com/developers/docs/resources/emoji#emoji-object} - */ - emoji: APIEmoji; - /** - * The id of the user that posted the message that was reacted to - */ - message_author_id?: Snowflake; - /** - * True if this is a super-reaction - */ - burst: boolean; - /** - * Colors used for super-reaction animation in "#rrggbb" format - */ - burst_colors?: string[]; - /** - * The type of reaction - */ - type: ReactionType; - }, - O - > + Omit >; export interface GatewayMessageReactionRemoveData { diff --git a/deno/payloads/v10/_interactions/base.ts b/deno/payloads/v10/_interactions/base.ts index eca13346..7b58120b 100644 --- a/deno/payloads/v10/_interactions/base.ts +++ b/deno/payloads/v10/_interactions/base.ts @@ -9,7 +9,14 @@ import type { ChannelType, ThreadChannelType, } from '../channel.ts'; -import type { APIGuildMember, APIPartialInteractionGuild } from '../guild.ts'; +import type { + APIBaseGuildMember, + APIFlaggedGuildMember, + APIGuildMember, + APIGuildMemberAvatar, + APIGuildMemberJoined, + APIPartialInteractionGuild, +} from '../guild.ts'; import type { APIEntitlement } from '../monetization.ts'; import type { APIUser } from '../user.ts'; import type { InteractionType } from './responses.ts'; @@ -253,7 +260,11 @@ export type APIInteractionDataResolvedChannel = /** * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} */ -export interface APIInteractionDataResolvedGuildMember extends Omit { +export interface APIInteractionDataResolvedGuildMember + extends APIBaseGuildMember, + APIFlaggedGuildMember, + APIGuildMemberAvatar, + APIGuildMemberJoined { permissions: Permissions; } diff --git a/deno/payloads/v10/_interactions/modalSubmit.ts b/deno/payloads/v10/_interactions/modalSubmit.ts index cdadcfba..3a431255 100644 --- a/deno/payloads/v10/_interactions/modalSubmit.ts +++ b/deno/payloads/v10/_interactions/modalSubmit.ts @@ -1,4 +1,4 @@ -import type { APIActionRowComponent, APIComponentInModalActionRow } from '../channel.ts'; +import type { APIBaseComponent } from '../channel.ts'; import type { APIBaseInteraction, APIDMInteractionWrapper, @@ -13,8 +13,7 @@ export interface ModalSubmitComponent { value: string; } -export interface ModalSubmitActionRowComponent - extends Omit, 'components'> { +export interface ModalSubmitActionRowComponent extends APIBaseComponent { components: ModalSubmitComponent[]; } diff --git a/deno/payloads/v10/channel.ts b/deno/payloads/v10/channel.ts index 617b1798..7e3c259a 100644 --- a/deno/payloads/v10/channel.ts +++ b/deno/payloads/v10/channel.ts @@ -13,10 +13,7 @@ import type { APIPoll } from './poll.ts'; import type { APISticker, APIStickerItem } from './sticker.ts'; import type { APIUser } from './user.ts'; -/** - * Not documented, but partial only includes id, name, and type - */ -export interface APIPartialChannel { +export interface APIBasePartialChannel { /** * The id of the channel */ @@ -27,12 +24,20 @@ export interface APIPartialChannel { * @see {@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types} */ type: ChannelType; +} + +export interface APINameableChannel { /** * The name of the channel (1-100 characters) */ name?: string | null; } +/** + * Not documented, but partial only includes id, name, and type + */ +export interface APIPartialChannel extends APIBasePartialChannel, APINameableChannel {} + /** * A channel obtained from fetching an invite. */ @@ -58,7 +63,7 @@ export type APIWebhookSourceChannel = Required<_NonNullableFields extends APIPartialChannel { +export interface APIChannelBase extends APIBasePartialChannel { type: T; flags?: ChannelFlags; } @@ -76,16 +81,7 @@ export type TextChannelType = export type GuildChannelType = Exclude; -export interface APITextBasedChannel extends APIChannelBase { - /** - * The id of the last message sent in this channel (may not point to an existing or valid message) - */ - last_message_id?: Snowflake | null; - /** - * When the last pinned message was pinned. - * This may be `null` in events such as `GUILD_CREATE` when a message is not pinned - */ - last_pin_timestamp?: string | null; +export interface APISlowmodeChannel extends APIChannelBase { /** * Amount of seconds a user has to wait before sending another message (0-21600); * bots, as well as users with the permission `MANAGE_MESSAGES` or `MANAGE_CHANNELS`, are unaffected @@ -105,7 +101,22 @@ export interface APISortableChannel { position: number; } -export interface APIGuildChannel extends Omit, 'name'> { +export interface APITextBasedChannel extends APIChannelBase, APISlowmodeChannel { + /** + * The id of the last message sent in this channel (may not point to an existing or valid message) + */ + last_message_id?: Snowflake | null; +} + +export interface APIPinChannel extends APIChannelBase { + /** + * When the last pinned message was pinned. + * This may be `null` in events such as `GUILD_CREATE` when a message is not pinned + */ + last_pin_timestamp?: string | null; +} + +export interface APIGuildChannel extends APIChannelBase { /** * The name of the channel (1-100 characters) */ @@ -137,9 +148,10 @@ export interface APIGuildChannel extends Omit; export interface APIGuildTextChannel - extends Omit, 'name'>, + extends APITextBasedChannel, APIGuildChannel, - APISortableChannel { + APISortableChannel, + APIPinChannel { /** * Default duration for newly created threads, in minutes, to automatically archive the thread after recent activity */ @@ -162,7 +174,8 @@ export interface APIGuildCategoryChannel extends APIGuildChannel extends APIGuildChannel, APISortableChannel, - Omit, 'last_pin_timestamp' | 'name'> { + APITextBasedChannel, + APISlowmodeChannel { /** * The bitrate (in bits) of the voice or stage channel */ @@ -189,7 +202,7 @@ export type APIGuildVoiceChannel = APIVoiceChannelBase; export type APIGuildStageVoiceChannel = APIVoiceChannelBase; -export interface APIDMChannelBase extends Omit, 'rate_limit_per_user'> { +export interface APIDMChannelBase extends APITextBasedChannel, APIPinChannel { /** * The recipients of the DM * @@ -198,14 +211,14 @@ export interface APIDMChannelBase extends Omit, 'name'> { +export interface APIDMChannel extends APIDMChannelBase { /** * The name of the channel (always null for DM channels) */ name: null; } -export interface APIGroupDMChannel extends Omit, 'name'> { +export interface APIGroupDMChannel extends APIDMChannelBase { /** * The name of the channel (1-100 characters) */ @@ -235,8 +248,9 @@ export interface APIGroupDMChannel extends Omit - extends Omit, 'name'>, - APIGuildChannel { + extends APITextBasedChannel, + APIGuildChannel, + APIPinChannel { /** * The client users member for the thread, only included in select endpoints */ @@ -529,18 +543,27 @@ export enum VideoQualityMode { Full, } +export interface APIMessageMentions { + /** + * Users specifically mentioned in the message + * + * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events + * from text-based guild channels + * + * @see {@link https://discord.com/developers/docs/resources/user#user-object} + * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} + */ + mentions: APIUser[]; +} + /** * @see {@link https://discord.com/developers/docs/resources/channel#message-object-message-structure} */ -export interface APIMessage { +export interface APIBaseMessageNoChannel { /** * ID of the message */ id: Snowflake; - /** - * ID of the channel the message was sent in - */ - channel_id: Snowflake; /** * The author of this message (only a valid user in the case where the message is generated by a user or bot user) * @@ -577,16 +600,6 @@ export interface APIMessage { * Whether this message mentions everyone */ mention_everyone: boolean; - /** - * Users specifically mentioned in the message - * - * The `member` field is only present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events - * from text-based guild channels - * - * @see {@link https://discord.com/developers/docs/resources/user#user-object} - * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object} - */ - mentions: APIUser[]; /** * Roles specifically mentioned in this message * @@ -774,6 +787,21 @@ export interface APIMessage { call?: APIMessageCall; } +/** + * @see {@link https://discord.com/developers/docs/resources/channel#message-object-message-structure} + */ +export interface APIBaseMessage extends APIBaseMessageNoChannel { + /** + * ID of the channel the message was sent in + */ + channel_id: Snowflake; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/channel#message-object-message-structure} + */ +export interface APIMessage extends APIBaseMessage, APIMessageMentions {} + /** * @see {@link https://discord.com/developers/docs/resources/channel#message-object-message-types} */ @@ -1701,28 +1729,31 @@ export interface APIActionRowComponent components: T[]; } -/** - * @see {@link https://discord.com/developers/docs/components/reference#button} - */ -export interface APIButtonComponentBase