diff --git a/eslint.config.js b/eslint.config.js index d3eef24fa..c5fbfce66 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -135,6 +135,7 @@ export default tseslint.config( files: [`packages/builders/**/*${commonFiles}`], rules: { '@typescript-eslint/no-empty-object-type': 0, + 'jsdoc/valid-types': 0, }, }, { diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 2c27250c3..ffded9cbd 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -1,5 +1,3 @@ -/* eslint-disable jsdoc/check-param-names */ - import type { APITextInputComponent, APIActionRowComponent, @@ -43,10 +41,11 @@ export interface ActionRowBuilderData /** * A builder that creates API-compatible JSON data for action rows. - * - * @typeParam ComponentType - The types of components this action row holds */ export class ActionRowBuilder extends ComponentBuilder> { + /** + * @internal + */ protected readonly data: ActionRowBuilderData; /** @@ -57,7 +56,7 @@ export class ActionRowBuilder extends ComponentBuilder> = {}) { + public constructor(data: Partial> = {}) { super(); + + const { components = [], ...rest } = data; + this.data = { - ...structuredClone(data), - type: ComponentType.ActionRow, + ...structuredClone(rest), components: components.map((component) => createComponentBuilder(component)), + type: ComponentType.ActionRow, }; } diff --git a/packages/builders/src/components/Component.ts b/packages/builders/src/components/Component.ts index 47ea1ad18..9a9a59d12 100644 --- a/packages/builders/src/components/Component.ts +++ b/packages/builders/src/components/Component.ts @@ -13,6 +13,9 @@ export interface ComponentBuilderBaseData { export abstract class ComponentBuilder> implements JSONEncodable { + /** + * @internal + */ protected abstract readonly data: ComponentBuilderBaseData; /** diff --git a/packages/builders/src/components/button/Button.ts b/packages/builders/src/components/button/Button.ts index 0d9e472e5..705478d1c 100644 --- a/packages/builders/src/components/button/Button.ts +++ b/packages/builders/src/components/button/Button.ts @@ -7,6 +7,9 @@ import { ComponentBuilder } from '../Component.js'; * A builder that creates API-compatible JSON data for buttons. */ export abstract class BaseButtonBuilder extends ComponentBuilder { + /** + * @internal + */ declare protected readonly data: Partial; /** diff --git a/packages/builders/src/components/button/CustomIdButton.ts b/packages/builders/src/components/button/CustomIdButton.ts index 70ef0544f..97e6533b9 100644 --- a/packages/builders/src/components/button/CustomIdButton.ts +++ b/packages/builders/src/components/button/CustomIdButton.ts @@ -7,6 +7,9 @@ export type CustomIdButtonStyle = APIButtonComponentWithCustomId['style']; /** * A builder that creates API-compatible JSON data for buttons with custom IDs. + * + * @mixes {@link BaseButtonBuilder}\<{@link discord-api-types/v10#(APIButtonComponentWithCustomId:interface)}\> + * @mixes {@link EmojiOrLabelButtonMixin} */ export abstract class CustomIdButtonBuilder extends Mixin( BaseButtonBuilder, diff --git a/packages/builders/src/components/button/LinkButton.ts b/packages/builders/src/components/button/LinkButton.ts index 3031c17cb..5cdd641a4 100644 --- a/packages/builders/src/components/button/LinkButton.ts +++ b/packages/builders/src/components/button/LinkButton.ts @@ -10,6 +10,9 @@ import { EmojiOrLabelButtonMixin } from './mixins/EmojiOrLabelButtonMixin.js'; /** * A builder that creates API-compatible JSON data for buttons with links. + * + * @mixes {@link BaseButtonBuilder}\<{@link discord-api-types/v10#(APIButtonComponentWithURL:interface)}\> + * @mixes {@link EmojiOrLabelButtonMixin} */ export class LinkButtonBuilder extends Mixin(BaseButtonBuilder, EmojiOrLabelButtonMixin) { protected override readonly data: Partial; diff --git a/packages/builders/src/components/button/mixins/EmojiOrLabelButtonMixin.ts b/packages/builders/src/components/button/mixins/EmojiOrLabelButtonMixin.ts index 6b3e25cb3..382641df6 100644 --- a/packages/builders/src/components/button/mixins/EmojiOrLabelButtonMixin.ts +++ b/packages/builders/src/components/button/mixins/EmojiOrLabelButtonMixin.ts @@ -3,7 +3,13 @@ import type { APIButtonComponent, APIButtonComponentWithSKUId, APIMessageCompone export interface EmojiOrLabelButtonData extends Pick, 'emoji' | 'label'> {} +/** + * A mixin that adds emoji and label symbols to a button builder. + */ export class EmojiOrLabelButtonMixin { + /** + * @internal + */ declare protected readonly data: EmojiOrLabelButtonData; /** diff --git a/packages/builders/src/components/selectMenu/BaseSelectMenu.ts b/packages/builders/src/components/selectMenu/BaseSelectMenu.ts index 6ebc646d6..8afa8bc96 100644 --- a/packages/builders/src/components/selectMenu/BaseSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/BaseSelectMenu.ts @@ -5,12 +5,15 @@ import { ComponentBuilder } from '../Component.js'; /** * The base select menu builder that contains common symbols for select menu builders. * - * @typeParam SelectMenuType - The type of select menu this would be instantiated for. + * @typeParam Data - The type of API data that is stored within the builder */ export abstract class BaseSelectMenuBuilder extends ComponentBuilder implements JSONEncodable { + /** + * @internal + */ protected abstract override readonly data: Partial< Pick >; diff --git a/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts b/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts index 3f7956052..dd3be61a3 100644 --- a/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts @@ -17,9 +17,9 @@ export class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder; /** - * Creates a new select menu from API data. + * Creates a new channel select menu. * - * @param data - The API data to create this select menu with + * @param data - The API data to create this channel select menu with * @example * Creating a select menu from an API data object: * ```ts diff --git a/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts index fb02d8f5f..2c7944f0c 100644 --- a/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts @@ -17,9 +17,9 @@ export class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder; /** - * Creates a new select menu from API data. + * Creates a new mentionable select menu. * - * @param data - The API data to create this select menu with + * @param data - The API data to create this mentionable select menu with * @example * Creating a select menu from an API data object: * ```ts diff --git a/packages/builders/src/components/selectMenu/RoleSelectMenu.ts b/packages/builders/src/components/selectMenu/RoleSelectMenu.ts index e2fe8d05b..94aa2fa49 100644 --- a/packages/builders/src/components/selectMenu/RoleSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/RoleSelectMenu.ts @@ -16,9 +16,9 @@ export class RoleSelectMenuBuilder extends BaseSelectMenuBuilder; /** - * Creates a new select menu from API data. + * Creates a new role select menu. * - * @param data - The API data to create this select menu with + * @param data - The API data to create this role select menu with * @example * Creating a select menu from an API data object: * ```ts diff --git a/packages/builders/src/components/selectMenu/StringSelectMenu.ts b/packages/builders/src/components/selectMenu/StringSelectMenu.ts index 4f7e8bf85..eca016aa2 100644 --- a/packages/builders/src/components/selectMenu/StringSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/StringSelectMenu.ts @@ -1,5 +1,3 @@ -/* eslint-disable jsdoc/check-param-names */ - import { ComponentType } from 'discord-api-types/v10'; import type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10'; import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; @@ -27,9 +25,9 @@ export class StringSelectMenuBuilder extends BaseSelectMenuBuilder = {}) { + public constructor(data: Partial = {}) { super(); + + const { options = [], ...rest } = data; + this.data = { - ...structuredClone(data), + ...structuredClone(rest), options: options.map((option) => new StringSelectMenuOptionBuilder(option)), type: ComponentType.StringSelect, }; diff --git a/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts b/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts index 39723d74e..de024c23e 100644 --- a/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts @@ -10,7 +10,7 @@ export class StringSelectMenuOptionBuilder implements JSONEncodable; /** - * Creates a new string select menu option from API data. + * Creates a new string select menu option. * * @param data - The API data to create this string select menu option with * @example diff --git a/packages/builders/src/components/selectMenu/UserSelectMenu.ts b/packages/builders/src/components/selectMenu/UserSelectMenu.ts index 336a255b2..469461632 100644 --- a/packages/builders/src/components/selectMenu/UserSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/UserSelectMenu.ts @@ -16,9 +16,9 @@ export class UserSelectMenuBuilder extends BaseSelectMenuBuilder; /** - * Creates a new select menu from API data. + * Creates a new user select menu. * - * @param data - The API data to create this select menu with + * @param data - The API data to create this user select menu with * @example * Creating a select menu from an API data object: * ```ts diff --git a/packages/builders/src/components/textInput/TextInput.ts b/packages/builders/src/components/textInput/TextInput.ts index 8fcb34fb7..5d23ec866 100644 --- a/packages/builders/src/components/textInput/TextInput.ts +++ b/packages/builders/src/components/textInput/TextInput.ts @@ -7,10 +7,13 @@ import { textInputPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for text inputs. */ export class TextInputBuilder extends ComponentBuilder { + /** + * @internal + */ protected readonly data: Partial; /** - * Creates a new text input from API data. + * Creates a new text input. * * @param data - The API data to create this text input with * @example diff --git a/packages/builders/src/components/v2/Container.ts b/packages/builders/src/components/v2/Container.ts index 244abce5d..6efd517cd 100644 --- a/packages/builders/src/components/v2/Container.ts +++ b/packages/builders/src/components/v2/Container.ts @@ -34,11 +34,32 @@ export interface ContainerBuilderData extends Partial { + /** + * @internal + */ protected readonly data: ContainerBuilderData; - public constructor({ components = [], ...rest }: Partial = {}) { + /** + * Gets the components within this container. + */ + public get components(): readonly ContainerComponentBuilders[] { + return this.data.components; + } + + /** + * Creates a new container builder. + * + * @param data - The API data to create the container with + */ + public constructor(data: Partial = {}) { super(); + + const { components = [], ...rest } = data; + this.data = { ...structuredClone(rest), components: components.map((component) => createComponentBuilder(component)), diff --git a/packages/builders/src/components/v2/File.ts b/packages/builders/src/components/v2/File.ts index d6fdf1673..66f3b132c 100644 --- a/packages/builders/src/components/v2/File.ts +++ b/packages/builders/src/components/v2/File.ts @@ -3,11 +3,17 @@ import { validate } from '../../util/validation.js'; import { ComponentBuilder } from '../Component.js'; import { filePredicate } from './Assertions.js'; +/** + * A builder that creates API-compatible JSON data for files. + */ export class FileBuilder extends ComponentBuilder { + /** + * @internal + */ protected readonly data: Partial; /** - * Creates a new file from API data. + * Creates a new file. * * @param data - The API data to create this file with * @example @@ -33,9 +39,12 @@ export class FileBuilder extends ComponentBuilder { */ public constructor(data: Partial = {}) { super(); + + const { file, ...rest } = data; + this.data = { - ...structuredClone(data), - file: data.file ? { url: data.file.url } : undefined, + ...structuredClone(rest), + file: file && { url: file.url }, type: ComponentType.File, }; } diff --git a/packages/builders/src/components/v2/MediaGallery.ts b/packages/builders/src/components/v2/MediaGallery.ts index 832bfc872..1bd6ed810 100644 --- a/packages/builders/src/components/v2/MediaGallery.ts +++ b/packages/builders/src/components/v2/MediaGallery.ts @@ -10,11 +10,24 @@ export interface MediaGalleryBuilderData extends Partial { + /** + * @internal + */ protected readonly data: MediaGalleryBuilderData; /** - * Creates a new media gallery from API data. + * The items in this media gallery. + */ + public get items(): readonly MediaGalleryItemBuilder[] { + return this.data.items; + } + + /** + * Creates a new media gallery. * * @param data - The API data to create this container with * @example @@ -49,19 +62,16 @@ export class MediaGalleryBuilder extends ComponentBuilder = {}) { super(); + + const { items = [], ...rest } = data; + this.data = { - items: data?.items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [], + ...structuredClone(rest), + items: items.map((item) => new MediaGalleryItemBuilder(item)), type: ComponentType.MediaGallery, }; } - /** - * The items in this media gallery. - */ - public get items(): readonly MediaGalleryItemBuilder[] { - return this.data.items; - } - /** * Adds a media gallery item to this media gallery. * diff --git a/packages/builders/src/components/v2/MediaGalleryItem.ts b/packages/builders/src/components/v2/MediaGalleryItem.ts index 015be98ba..e67620091 100644 --- a/packages/builders/src/components/v2/MediaGalleryItem.ts +++ b/packages/builders/src/components/v2/MediaGalleryItem.ts @@ -7,7 +7,7 @@ export class MediaGalleryItemBuilder implements JSONEncodable; /** - * Creates a new media gallery item from API data. + * Creates a new media gallery item. * * @param data - The API data to create this media gallery item with * @example @@ -32,9 +32,7 @@ export class MediaGalleryItemBuilder implements JSONEncodable = {}) { - this.data = { - ...structuredClone(data), - }; + this.data = structuredClone(data); } /** diff --git a/packages/builders/src/components/v2/Section.ts b/packages/builders/src/components/v2/Section.ts index 7fa616500..de030963d 100644 --- a/packages/builders/src/components/v2/Section.ts +++ b/packages/builders/src/components/v2/Section.ts @@ -32,15 +32,24 @@ export interface SectionBuilderData extends Partial { + /** + * @internal + */ protected readonly data: SectionBuilderData; + /** + * The components within this section. + */ public get components(): readonly TextDisplayBuilder[] { return this.data.components; } /** - * Creates a new section from API data. + * Creates a new section. * * @param data - The API data to create this section with * @example @@ -81,7 +90,7 @@ export class SectionBuilder extends ComponentBuilder { this.data = { ...structuredClone(rest), - accessory: accessory ? resolveAccessoryComponent(accessory) : undefined, + accessory: accessory && resolveAccessoryComponent(accessory), components: components.map((component) => new TextDisplayBuilder(component)), type: ComponentType.Section, }; diff --git a/packages/builders/src/components/v2/Separator.ts b/packages/builders/src/components/v2/Separator.ts index de8af7683..0e8ad5338 100644 --- a/packages/builders/src/components/v2/Separator.ts +++ b/packages/builders/src/components/v2/Separator.ts @@ -4,11 +4,17 @@ import { validate } from '../../util/validation.js'; import { ComponentBuilder } from '../Component.js'; import { separatorPredicate } from './Assertions.js'; +/** + * A builder that creates API-compatible JSON data for separators. + */ export class SeparatorBuilder extends ComponentBuilder { + /** + * @internal + */ protected readonly data: Partial; /** - * Creates a new separator from API data. + * Creates a new separator. * * @param data - The API data to create this separator with * @example diff --git a/packages/builders/src/components/v2/TextDisplay.ts b/packages/builders/src/components/v2/TextDisplay.ts index 1ad756976..2cff4616f 100644 --- a/packages/builders/src/components/v2/TextDisplay.ts +++ b/packages/builders/src/components/v2/TextDisplay.ts @@ -4,11 +4,17 @@ import { validate } from '../../util/validation.js'; import { ComponentBuilder } from '../Component.js'; import { textDisplayPredicate } from './Assertions.js'; +/** + * A builder that creates API-compatible JSON data for text displays. + */ export class TextDisplayBuilder extends ComponentBuilder { + /** + * @internal + */ protected readonly data: Partial; /** - * Creates a new text display from API data. + * Creates a new text display. * * @param data - The API data to create this text display with * @example diff --git a/packages/builders/src/components/v2/Thumbnail.ts b/packages/builders/src/components/v2/Thumbnail.ts index 15c6937ac..832e5588e 100644 --- a/packages/builders/src/components/v2/Thumbnail.ts +++ b/packages/builders/src/components/v2/Thumbnail.ts @@ -4,11 +4,17 @@ import { validate } from '../../util/validation.js'; import { ComponentBuilder } from '../Component.js'; import { thumbnailPredicate } from './Assertions.js'; +/** + * A builder that creates API-compatible JSON data for thumbnails. + */ export class ThumbnailBuilder extends ComponentBuilder { + /** + * @internal + */ protected readonly data: Partial; /** - * Creates a new thumbnail from API data. + * Creates a new thumbnail. * * @param data - The API data to create this thumbnail with * @example @@ -34,9 +40,12 @@ export class ThumbnailBuilder extends ComponentBuilder { */ public constructor(data: Partial = {}) { super(); + + const { media, ...rest } = data; + this.data = { - ...structuredClone(data), - media: data.media ? { url: data.media.url } : undefined, + ...structuredClone(rest), + media: media && { url: media.url }, type: ComponentType.Thumbnail, }; } diff --git a/packages/builders/src/interactions/commands/Command.ts b/packages/builders/src/interactions/commands/Command.ts index e8d9a64f6..89016d18b 100644 --- a/packages/builders/src/interactions/commands/Command.ts +++ b/packages/builders/src/interactions/commands/Command.ts @@ -16,9 +16,17 @@ export interface CommandData > > {} +/** + * The base class for all command builders. + */ export abstract class CommandBuilder implements JSONEncodable { + /** + * The API data associated with this command. + * + * @internal + */ declare protected readonly data: CommandData; /** diff --git a/packages/builders/src/interactions/commands/SharedName.ts b/packages/builders/src/interactions/commands/SharedName.ts index 798a055ff..c9625bd18 100644 --- a/packages/builders/src/interactions/commands/SharedName.ts +++ b/packages/builders/src/interactions/commands/SharedName.ts @@ -7,6 +7,9 @@ export interface SharedNameData * This mixin holds name and description symbols for chat input commands. */ export class SharedName { + /** + * @internal + */ protected readonly data: SharedNameData = {}; /** diff --git a/packages/builders/src/interactions/commands/SharedNameAndDescription.ts b/packages/builders/src/interactions/commands/SharedNameAndDescription.ts index e6b87478e..949e15c09 100644 --- a/packages/builders/src/interactions/commands/SharedNameAndDescription.ts +++ b/packages/builders/src/interactions/commands/SharedNameAndDescription.ts @@ -10,6 +10,9 @@ export interface SharedNameAndDescriptionData * This mixin holds name and description symbols for chat input commands. */ export class SharedNameAndDescription extends SharedName { + /** + * @internal + */ protected override readonly data: SharedNameAndDescriptionData = {}; /** diff --git a/packages/builders/src/interactions/commands/chatInput/ChatInputCommand.ts b/packages/builders/src/interactions/commands/chatInput/ChatInputCommand.ts index 2401678ca..4d90c2cce 100644 --- a/packages/builders/src/interactions/commands/chatInput/ChatInputCommand.ts +++ b/packages/builders/src/interactions/commands/chatInput/ChatInputCommand.ts @@ -1,4 +1,3 @@ -/* eslint-disable jsdoc/valid-types */ import { ApplicationCommandType, type RESTPostAPIChatInputApplicationCommandsJSONBody } from 'discord-api-types/v10'; import { Mixin } from 'ts-mixer'; import { validate } from '../../../util/validation.js'; diff --git a/packages/builders/src/interactions/commands/chatInput/ChatInputCommandSubcommands.ts b/packages/builders/src/interactions/commands/chatInput/ChatInputCommandSubcommands.ts index a3bb19e76..ae6256be7 100644 --- a/packages/builders/src/interactions/commands/chatInput/ChatInputCommandSubcommands.ts +++ b/packages/builders/src/interactions/commands/chatInput/ChatInputCommandSubcommands.ts @@ -26,8 +26,16 @@ export class ChatInputCommandSubcommandGroupBuilder extends SharedNameAndDescription implements JSONEncodable { + /** + * The API data associated with this subcommand group. + * + * @internal + */ declare protected readonly data: ChatInputCommandSubcommandGroupData & SharedNameAndDescriptionData; + /** + * The options within this subcommand group. + */ public get options(): readonly ChatInputCommandSubcommandBuilder[] { return (this.data.options ??= []); } @@ -78,6 +86,8 @@ export class ChatInputCommandSubcommandGroupBuilder /** * A builder that creates API-compatible JSON data for chat input command subcommands. * + * @mixes {@link SharedNameAndDescription} + * @mixes {@link SharedChatInputCommandOptions} * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups} */ export class ChatInputCommandSubcommandBuilder diff --git a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts index 6045def49..10764b7e3 100644 --- a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts +++ b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts @@ -7,6 +7,9 @@ export interface ApplicationCommandNumericOptionMinMaxValueData * This mixin holds minimum and maximum symbols used for options. */ export abstract class ApplicationCommandNumericOptionMinMaxValueMixin { + /** + * @internal + */ declare protected readonly data: ApplicationCommandNumericOptionMinMaxValueData; /** diff --git a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionChannelTypesMixin.ts b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionChannelTypesMixin.ts index a3f4f6b09..8d5dc77d6 100644 --- a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionChannelTypesMixin.ts +++ b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionChannelTypesMixin.ts @@ -26,6 +26,9 @@ export interface ApplicationCommandOptionChannelTypesData * This mixin holds channel type symbols used for options. */ export class ApplicationCommandOptionChannelTypesMixin { + /** + * @internal + */ declare protected readonly data: ApplicationCommandOptionChannelTypesData; /** diff --git a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts index 74e8446fb..89abe2727 100644 --- a/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts +++ b/packages/builders/src/interactions/commands/chatInput/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts @@ -15,6 +15,9 @@ export interface ApplicationCommandOptionWithAutocompleteData extends Pick { + /** + * @internal + */ declare protected readonly data: ApplicationCommandOptionWithChoicesData; /** diff --git a/packages/builders/src/interactions/commands/chatInput/mixins/SharedChatInputCommandOptions.ts b/packages/builders/src/interactions/commands/chatInput/mixins/SharedChatInputCommandOptions.ts index 46f99934b..27ce5b44a 100644 --- a/packages/builders/src/interactions/commands/chatInput/mixins/SharedChatInputCommandOptions.ts +++ b/packages/builders/src/interactions/commands/chatInput/mixins/SharedChatInputCommandOptions.ts @@ -17,12 +17,16 @@ export interface SharedChatInputCommandOptionsData { /** * This mixin holds symbols that can be shared in chat input command options. - * - * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option. */ export class SharedChatInputCommandOptions { + /** + * @internal + */ declare protected readonly data: SharedChatInputCommandOptionsData; + /** + * The options within this command. + */ public get options(): readonly ApplicationCommandOptionBase[] { return (this.data.options ??= []); } diff --git a/packages/builders/src/interactions/commands/chatInput/mixins/SharedSubcommands.ts b/packages/builders/src/interactions/commands/chatInput/mixins/SharedSubcommands.ts index 2474521b1..4873db723 100644 --- a/packages/builders/src/interactions/commands/chatInput/mixins/SharedSubcommands.ts +++ b/packages/builders/src/interactions/commands/chatInput/mixins/SharedSubcommands.ts @@ -12,10 +12,11 @@ export interface SharedChatInputCommandSubcommandsData { /** * This mixin holds symbols that can be shared in chat input subcommands. - * - * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group. */ export class SharedChatInputCommandSubcommands { + /** + * @internal + */ declare protected readonly data: SharedChatInputCommandSubcommandsData; /** diff --git a/packages/builders/src/interactions/commands/chatInput/options/ApplicationCommandOptionBase.ts b/packages/builders/src/interactions/commands/chatInput/options/ApplicationCommandOptionBase.ts index d2b277074..22dbc96ff 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/ApplicationCommandOptionBase.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/ApplicationCommandOptionBase.ts @@ -21,10 +21,21 @@ export abstract class ApplicationCommandOptionBase extends SharedNameAndDescription implements JSONEncodable { + /** + * @internal + */ protected static readonly predicate: z.ZodTypeAny = basicOptionPredicate; + /** + * @internal + */ declare protected readonly data: ApplicationCommandOptionBaseData & SharedNameAndDescriptionData; + /** + * Creates a new application command option builder. + * + * @param type - The type of the option + */ public constructor(type: ApplicationCommandOptionType) { super(); this.data.type = type; diff --git a/packages/builders/src/interactions/commands/chatInput/options/attachment.ts b/packages/builders/src/interactions/commands/chatInput/options/attachment.ts index 2fe3b5f2e..2cf2be045 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/attachment.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/attachment.ts @@ -5,6 +5,9 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' * A chat input command attachment option. */ export class ChatInputCommandAttachmentOption extends ApplicationCommandOptionBase { + /** + * Creates a new attachment option. + */ public constructor() { super(ApplicationCommandOptionType.Attachment); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/boolean.ts b/packages/builders/src/interactions/commands/chatInput/options/boolean.ts index 38fa85014..27d4ae540 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/boolean.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/boolean.ts @@ -5,6 +5,9 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' * A chat input command boolean option. */ export class ChatInputCommandBooleanOption extends ApplicationCommandOptionBase { + /** + * Creates a new boolean option. + */ public constructor() { super(ApplicationCommandOptionType.Boolean); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/channel.ts b/packages/builders/src/interactions/commands/chatInput/options/channel.ts index 3200d0e50..6b41d8a04 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/channel.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/channel.ts @@ -6,13 +6,22 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' /** * A chat input command channel option. + * + * @mixes {@link ApplicationCommandOptionBase} + * @mixes {@link ApplicationCommandOptionChannelTypesMixin} */ export class ChatInputCommandChannelOption extends Mixin( ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ) { + /** + * @internal + */ protected static override readonly predicate = channelOptionPredicate; + /** + * Creates a new channel option. + */ public constructor() { super(ApplicationCommandOptionType.Channel); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/integer.ts b/packages/builders/src/interactions/commands/chatInput/options/integer.ts index d730fb869..843a8890d 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/integer.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/integer.ts @@ -8,6 +8,11 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' /** * A chat input command integer option. + * + * @mixes {@link ApplicationCommandOptionBase} + * @mixes {@link ApplicationCommandNumericOptionMinMaxValueMixin} + * @mixes {@link ApplicationCommandOptionWithAutocompleteMixin} + * @mixes {@link ApplicationCommandOptionWithChoicesMixin}\ */ export class ChatInputCommandIntegerOption extends Mixin( ApplicationCommandOptionBase, @@ -15,8 +20,14 @@ export class ChatInputCommandIntegerOption extends Mixin( ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, ) { + /** + * @internal + */ protected static override readonly predicate = integerOptionPredicate; + /** + * Creates a new integer option. + */ public constructor() { super(ApplicationCommandOptionType.Integer); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/mentionable.ts b/packages/builders/src/interactions/commands/chatInput/options/mentionable.ts index 65810328c..e039db61f 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/mentionable.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/mentionable.ts @@ -5,6 +5,9 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' * A chat input command mentionable option. */ export class ChatInputCommandMentionableOption extends ApplicationCommandOptionBase { + /** + * Creates a new mentionable option. + */ public constructor() { super(ApplicationCommandOptionType.Mentionable); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/number.ts b/packages/builders/src/interactions/commands/chatInput/options/number.ts index 5f81065c5..05302ae86 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/number.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/number.ts @@ -8,6 +8,11 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' /** * A chat input command number option. + * + * @mixes {@link ApplicationCommandOptionBase} + * @mixes {@link ApplicationCommandNumericOptionMinMaxValueMixin} + * @mixes {@link ApplicationCommandOptionWithAutocompleteMixin} + * @mixes {@link ApplicationCommandOptionWithChoicesMixin}\ */ export class ChatInputCommandNumberOption extends Mixin( ApplicationCommandOptionBase, @@ -15,8 +20,14 @@ export class ChatInputCommandNumberOption extends Mixin( ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, ) { + /** + * @internal + */ protected static override readonly predicate = numberOptionPredicate; + /** + * Creates a new number option. + */ public constructor() { super(ApplicationCommandOptionType.Number); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/role.ts b/packages/builders/src/interactions/commands/chatInput/options/role.ts index 064509cfb..146ce22d0 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/role.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/role.ts @@ -5,6 +5,9 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' * A chat input command role option. */ export class ChatInputCommandRoleOption extends ApplicationCommandOptionBase { + /** + * Creates a new role option. + */ public constructor() { super(ApplicationCommandOptionType.Role); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/string.ts b/packages/builders/src/interactions/commands/chatInput/options/string.ts index fa216d87a..625439fd4 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/string.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/string.ts @@ -10,19 +10,32 @@ import type { ApplicationCommandOptionBaseData } from './ApplicationCommandOptio /** * A chat input command string option. + * + * @mixes {@link ApplicationCommandOptionBase} + * @mixes {@link ApplicationCommandOptionWithAutocompleteMixin} + * @mixes {@link ApplicationCommandOptionWithChoicesMixin}\ */ export class ChatInputCommandStringOption extends Mixin( ApplicationCommandOptionBase, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, ) { + /** + * @internal + */ protected static override readonly predicate = stringOptionPredicate; + /** + * @internal + */ declare protected readonly data: ApplicationCommandOptionBaseData & ApplicationCommandOptionWithAutocompleteData & ApplicationCommandOptionWithChoicesData & Partial>; + /** + * Creates a new string option builder. + */ public constructor() { super(ApplicationCommandOptionType.String); } diff --git a/packages/builders/src/interactions/commands/chatInput/options/user.ts b/packages/builders/src/interactions/commands/chatInput/options/user.ts index 9f59e129a..7f5a83f5e 100644 --- a/packages/builders/src/interactions/commands/chatInput/options/user.ts +++ b/packages/builders/src/interactions/commands/chatInput/options/user.ts @@ -5,6 +5,9 @@ import { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js' * A chat input command user option. */ export class ChatInputCommandUserOption extends ApplicationCommandOptionBase { + /** + * Creates a new user option. + */ public constructor() { super(ApplicationCommandOptionType.User); } diff --git a/packages/builders/src/interactions/commands/contextMenu/ContextMenuCommand.ts b/packages/builders/src/interactions/commands/contextMenu/ContextMenuCommand.ts index 1d12a8134..16cf9f5a3 100644 --- a/packages/builders/src/interactions/commands/contextMenu/ContextMenuCommand.ts +++ b/packages/builders/src/interactions/commands/contextMenu/ContextMenuCommand.ts @@ -10,13 +10,26 @@ export type ContextMenuCommandType = ApplicationCommandType.Message | Applicatio /** * A builder that creates API-compatible JSON data for context menu commands. + * + * @mixes {@link CommandBuilder}\<{@link discord-api-types/v10#(RESTPostAPIContextMenuApplicationCommandsJSONBody:interface)}\> + * @mixes {@link SharedName} */ export abstract class ContextMenuCommandBuilder extends Mixin( CommandBuilder, SharedName, ) { + /** + * The API data associated with this context menu command. + * + * @internal + */ protected override readonly data: Partial; + /** + * Creates a new context menu command. + * + * @param data - The API data to create this context menu command with + */ public constructor(data: Partial = {}) { super(); this.data = structuredClone(data); diff --git a/packages/builders/src/interactions/commands/contextMenu/MessageCommand.ts b/packages/builders/src/interactions/commands/contextMenu/MessageCommand.ts index 4ea63edd9..b0494a421 100644 --- a/packages/builders/src/interactions/commands/contextMenu/MessageCommand.ts +++ b/packages/builders/src/interactions/commands/contextMenu/MessageCommand.ts @@ -3,6 +3,9 @@ import { validate } from '../../../util/validation.js'; import { messageCommandPredicate } from './Assertions.js'; import { ContextMenuCommandBuilder } from './ContextMenuCommand.js'; +/** + * A builder that creates API-compatible JSON data for message context menu commands. + */ export class MessageContextCommandBuilder extends ContextMenuCommandBuilder { /** * {@inheritDoc CommandBuilder.toJSON} diff --git a/packages/builders/src/interactions/commands/contextMenu/UserCommand.ts b/packages/builders/src/interactions/commands/contextMenu/UserCommand.ts index 69279701f..2fb30e203 100644 --- a/packages/builders/src/interactions/commands/contextMenu/UserCommand.ts +++ b/packages/builders/src/interactions/commands/contextMenu/UserCommand.ts @@ -3,6 +3,9 @@ import { validate } from '../../../util/validation.js'; import { userCommandPredicate } from './Assertions.js'; import { ContextMenuCommandBuilder } from './ContextMenuCommand.js'; +/** + * A builder that creates API-compatible JSON data for user context menu commands. + */ export class UserContextCommandBuilder extends ContextMenuCommandBuilder { /** * {@inheritDoc CommandBuilder.toJSON} diff --git a/packages/builders/src/interactions/modals/Modal.ts b/packages/builders/src/interactions/modals/Modal.ts index 75fc61a38..e725bb379 100644 --- a/packages/builders/src/interactions/modals/Modal.ts +++ b/packages/builders/src/interactions/modals/Modal.ts @@ -1,5 +1,3 @@ -/* eslint-disable jsdoc/check-param-names */ - import type { JSONEncodable } from '@discordjs/util'; import type { APIActionRowComponent, @@ -34,13 +32,15 @@ export class ModalBuilder implements JSONEncodable = {}) { + public constructor(data: Partial = {}) { + const { components = [], ...rest } = data; + this.data = { - ...structuredClone(data), + ...structuredClone(rest), components: components.map((component) => createComponentBuilder(component)), }; } diff --git a/packages/builders/src/messages/AllowedMentions.ts b/packages/builders/src/messages/AllowedMentions.ts index a59e4e0f3..9a094a3f0 100644 --- a/packages/builders/src/messages/AllowedMentions.ts +++ b/packages/builders/src/messages/AllowedMentions.ts @@ -8,12 +8,15 @@ import { allowedMentionPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for allowed mentions. */ export class AllowedMentionsBuilder implements JSONEncodable { + /** + * The API data associated with these allowed mentions. + */ private readonly data: Partial; /** - * Creates a new allowed mentions builder from API data. + * Creates a new allowed mentions builder. * - * @param data - The API data to create this allowed mentions builder with + * @param data - The API data to create this allowed mentions with */ public constructor(data: Partial = {}) { this.data = structuredClone(data); diff --git a/packages/builders/src/messages/Attachment.ts b/packages/builders/src/messages/Attachment.ts index 06ee67992..a6cdb58b7 100644 --- a/packages/builders/src/messages/Attachment.ts +++ b/packages/builders/src/messages/Attachment.ts @@ -7,12 +7,15 @@ import { attachmentPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for attachments. */ export class AttachmentBuilder implements JSONEncodable { + /** + * The API data associated with this attachment. + */ private readonly data: Partial; /** - * Creates a new attachment builder from API data. + * Creates a new attachment builder. * - * @param data - The API data to create this attachment builder with + * @param data - The API data to create this attachment with */ public constructor(data: Partial = {}) { this.data = structuredClone(data); diff --git a/packages/builders/src/messages/Message.ts b/packages/builders/src/messages/Message.ts index b74d6d788..1c7521e8a 100644 --- a/packages/builders/src/messages/Message.ts +++ b/packages/builders/src/messages/Message.ts @@ -1,5 +1,3 @@ -/* eslint-disable jsdoc/check-param-names */ - import type { JSONEncodable } from '@discordjs/util'; import type { APIActionRowComponent, @@ -86,21 +84,15 @@ export class MessageBuilder implements JSONEncodable = {}) { + public constructor(data: Partial = {}) { + const { attachments = [], embeds = [], components = [], message_reference, poll, allowed_mentions, ...rest } = data; + this.data = { - ...structuredClone(data), + ...structuredClone(rest), allowed_mentions: allowed_mentions && new AllowedMentionsBuilder(allowed_mentions), attachments: attachments.map((attachment) => new AttachmentBuilder(attachment)), embeds: embeds.map((embed) => new EmbedBuilder(embed)), diff --git a/packages/builders/src/messages/MessageReference.ts b/packages/builders/src/messages/MessageReference.ts index d915ab089..5a026f5e7 100644 --- a/packages/builders/src/messages/MessageReference.ts +++ b/packages/builders/src/messages/MessageReference.ts @@ -7,12 +7,15 @@ import { messageReferencePredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for message references. */ export class MessageReferenceBuilder implements JSONEncodable { + /** + * The API data associated with this message reference. + */ private readonly data: Partial; /** - * Creates a new message reference builder from API data. + * Creates a new message reference builder. * - * @param data - The API data to create this message reference builder with + * @param data - The API data to create this message reference with */ public constructor(data: Partial = {}) { this.data = structuredClone(data); diff --git a/packages/builders/src/messages/embed/Embed.ts b/packages/builders/src/messages/embed/Embed.ts index f0c430d19..9fbaf2699 100644 --- a/packages/builders/src/messages/embed/Embed.ts +++ b/packages/builders/src/messages/embed/Embed.ts @@ -35,16 +35,18 @@ export class EmbedBuilder implements JSONEncodable { } /** - * Creates a new embed from API data. + * Creates a new embed. * * @param data - The API data to create this embed with */ - public constructor(data: APIEmbed = {}) { + public constructor(data: Partial = {}) { + const { author, fields = [], footer, ...rest } = data; + this.data = { - ...structuredClone(data), - author: data.author && new EmbedAuthorBuilder(data.author), - fields: data.fields?.map((field) => new EmbedFieldBuilder(field)) ?? [], - footer: data.footer && new EmbedFooterBuilder(data.footer), + ...structuredClone(rest), + author: author && new EmbedAuthorBuilder(author), + fields: fields.map((field) => new EmbedFieldBuilder(field)), + footer: footer && new EmbedFooterBuilder(footer), }; } @@ -338,9 +340,9 @@ export class EmbedBuilder implements JSONEncodable { const data = { ...structuredClone(rest), // Disable validation because the embedPredicate below will validate those as well - author: this.data.author?.toJSON(false), - fields: this.data.fields?.map((field) => field.toJSON(false)), - footer: this.data.footer?.toJSON(false), + author: author?.toJSON(false), + fields: fields.map((field) => field.toJSON(false)), + footer: footer?.toJSON(false), }; validate(embedPredicate, data, validationOverride); diff --git a/packages/builders/src/messages/embed/EmbedAuthor.ts b/packages/builders/src/messages/embed/EmbedAuthor.ts index 990ecadad..e39e1ed20 100644 --- a/packages/builders/src/messages/embed/EmbedAuthor.ts +++ b/packages/builders/src/messages/embed/EmbedAuthor.ts @@ -7,15 +7,18 @@ import { embedAuthorPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for the embed author. */ export class EmbedAuthorBuilder implements JSONEncodable { + /** + * The API data associated with this embed author. + */ private readonly data: Partial; /** - * Creates a new embed author from API data. + * Creates a new embed author. * - * @param data - The API data to use + * @param data - The API data to create this embed author with */ - public constructor(data?: Partial) { - this.data = structuredClone(data) ?? {}; + public constructor(data: Partial = {}) { + this.data = structuredClone(data); } /** diff --git a/packages/builders/src/messages/embed/EmbedField.ts b/packages/builders/src/messages/embed/EmbedField.ts index b71520242..9466ca267 100644 --- a/packages/builders/src/messages/embed/EmbedField.ts +++ b/packages/builders/src/messages/embed/EmbedField.ts @@ -7,15 +7,18 @@ import { embedFieldPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for embed fields. */ export class EmbedFieldBuilder implements JSONEncodable { + /** + * The API data associated with this embed field. + */ private readonly data: Partial; /** - * Creates a new embed field from API data. + * Creates a new embed field. * - * @param data - The API data to use + * @param data - The API data to create this embed field with */ - public constructor(data?: Partial) { - this.data = structuredClone(data) ?? {}; + public constructor(data: Partial = {}) { + this.data = structuredClone(data); } /** diff --git a/packages/builders/src/messages/embed/EmbedFooter.ts b/packages/builders/src/messages/embed/EmbedFooter.ts index 3304d2dec..13da0d635 100644 --- a/packages/builders/src/messages/embed/EmbedFooter.ts +++ b/packages/builders/src/messages/embed/EmbedFooter.ts @@ -7,15 +7,18 @@ import { embedFooterPredicate } from './Assertions.js'; * A builder that creates API-compatible JSON data for the embed footer. */ export class EmbedFooterBuilder implements JSONEncodable { + /** + * The API data associated with this embed footer. + */ private readonly data: Partial; /** - * Creates a new embed footer from API data. + * Creates a new embed footer. * - * @param data - The API data to use + * @param data - The API data to create this embed footer with */ - public constructor(data?: Partial) { - this.data = structuredClone(data) ?? {}; + public constructor(data: Partial = {}) { + this.data = structuredClone(data); } /** diff --git a/packages/builders/src/messages/poll/Poll.ts b/packages/builders/src/messages/poll/Poll.ts index 59ce2f015..24549c69c 100644 --- a/packages/builders/src/messages/poll/Poll.ts +++ b/packages/builders/src/messages/poll/Poll.ts @@ -29,15 +29,17 @@ export class PollBuilder implements JSONEncodable { } /** - * Creates a new poll from API data. + * Creates a new poll. * * @param data - The API data to create this poll with */ public constructor(data: Partial = {}) { + const { question, answers = [], ...rest } = data; + this.data = { - ...structuredClone(data), - question: new PollQuestionBuilder(data.question), - answers: data.answers?.map((answer) => new PollAnswerBuilder(answer)) ?? [], + ...structuredClone(rest), + question: new PollQuestionBuilder(question), + answers: answers.map((answer) => new PollAnswerBuilder(answer)), }; } diff --git a/packages/builders/src/messages/poll/PollAnswer.ts b/packages/builders/src/messages/poll/PollAnswer.ts index e869e634a..c0574d294 100644 --- a/packages/builders/src/messages/poll/PollAnswer.ts +++ b/packages/builders/src/messages/poll/PollAnswer.ts @@ -9,6 +9,9 @@ export interface PollAnswerData extends Omit> { /** * The API data associated with this poll answer. @@ -16,14 +19,16 @@ export class PollAnswerBuilder implements JSONEncodable> = {}) { + const { poll_media, ...rest } = data; + this.data = { - ...structuredClone(data), - poll_media: new PollAnswerMediaBuilder(data.poll_media), + ...structuredClone(rest), + poll_media: new PollAnswerMediaBuilder(poll_media), }; } diff --git a/packages/builders/src/messages/poll/PollMedia.ts b/packages/builders/src/messages/poll/PollMedia.ts index 879a10b05..30f11c7ac 100644 --- a/packages/builders/src/messages/poll/PollMedia.ts +++ b/packages/builders/src/messages/poll/PollMedia.ts @@ -6,13 +6,15 @@ import type { APIPollMedia } from 'discord-api-types/v10'; export abstract class PollMediaBuilder { /** * The API data associated with this poll media. + * + * @internal */ protected readonly data: Partial; /** - * Creates new poll media from API data. + * Creates new poll media. * - * @param data - The API data to use + * @param data - The API data to create this poll media with */ public constructor(data: Partial = {}) { this.data = structuredClone(data); diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index c9d6686ec..f143aac70 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -211,11 +211,11 @@ export class Client extends AsyncEventEmitter { public readonly api: API; - public constructor({ rest, gateway }: ClientOptions) { + public constructor(options: ClientOptions) { super(); - this.rest = rest; - this.gateway = gateway; - this.api = new API(rest); + this.rest = options.rest; + this.gateway = options.gateway; + this.api = new API(this.rest); this.gateway.on(WebSocketShardEvents.Dispatch, (dispatch, shardId) => { this.emit(dispatch.t, this.toEventProps(dispatch.d, shardId)); diff --git a/packages/rest/src/lib/errors/RateLimitError.ts b/packages/rest/src/lib/errors/RateLimitError.ts index 305256d61..9934e9ad0 100644 --- a/packages/rest/src/lib/errors/RateLimitError.ts +++ b/packages/rest/src/lib/errors/RateLimitError.ts @@ -23,31 +23,19 @@ export class RateLimitError extends Error implements RateLimitData { public scope: RateLimitData['scope']; - public constructor({ - timeToReset, - limit, - method, - hash, - url, - route, - majorParameter, - global, - retryAfter, - sublimitTimeout, - scope, - }: RateLimitData) { + public constructor(data: RateLimitData) { super(); - this.timeToReset = timeToReset; - this.limit = limit; - this.method = method; - this.hash = hash; - this.url = url; - this.route = route; - this.majorParameter = majorParameter; - this.global = global; - this.retryAfter = retryAfter; - this.sublimitTimeout = sublimitTimeout; - this.scope = scope; + this.timeToReset = data.timeToReset; + this.limit = data.limit; + this.method = data.method; + this.hash = data.hash; + this.url = data.url; + this.route = data.route; + this.majorParameter = data.majorParameter; + this.global = data.global; + this.retryAfter = data.retryAfter; + this.sublimitTimeout = data.sublimitTimeout; + this.scope = data.scope; } /** diff --git a/packages/voice/src/receive/AudioReceiveStream.ts b/packages/voice/src/receive/AudioReceiveStream.ts index 45b0ef3e8..a180b0707 100644 --- a/packages/voice/src/receive/AudioReceiveStream.ts +++ b/packages/voice/src/receive/AudioReceiveStream.ts @@ -56,9 +56,11 @@ export class AudioReceiveStream extends Readable { private endTimeout?: NodeJS.Timeout; - public constructor({ end, ...options }: AudioReceiveStreamOptions) { + public constructor(options: AudioReceiveStreamOptions) { + const { end, ...rest } = options; + super({ - ...options, + ...rest, objectMode: true, });