UNPKG

@discordjs/builders

Version:

A set of builders that you can use when creating your bot

1,386 lines (1,363 loc) • 451 kB
import * as _sapphire_shapeshift from '@sapphire/shapeshift'; import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIBaseComponent, ComponentType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIModalComponent, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileUploadComponent, APILabelComponent, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; export * from '@discordjs/formatters'; import { JSONEncodable, Equatable } from '@discordjs/util'; declare const fieldNamePredicate: _sapphire_shapeshift.StringValidator<string>; declare const fieldValuePredicate: _sapphire_shapeshift.StringValidator<string>; declare const fieldInlinePredicate: _sapphire_shapeshift.UnionValidator<boolean | undefined>; declare const embedFieldPredicate: _sapphire_shapeshift.ObjectValidator<{ name: string; value: string; inline: boolean | undefined; }, _sapphire_shapeshift.UndefinedToOptional<{ name: string; value: string; inline: boolean | undefined; }>>; declare const embedFieldsArrayPredicate: _sapphire_shapeshift.ArrayValidator<_sapphire_shapeshift.UndefinedToOptional<{ name: string; value: string; inline: boolean | undefined; }>[], _sapphire_shapeshift.UndefinedToOptional<{ name: string; value: string; inline: boolean | undefined; }>>; declare const fieldLengthPredicate: _sapphire_shapeshift.NumberValidator<number>; declare function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void; declare const authorNamePredicate: _sapphire_shapeshift.UnionValidator<string | null>; declare const imageURLPredicate: _sapphire_shapeshift.UnionValidator<string | null | undefined>; declare const urlPredicate: _sapphire_shapeshift.UnionValidator<string | null | undefined>; declare const embedAuthorPredicate: _sapphire_shapeshift.ObjectValidator<{ name: string | null; iconURL: string | null | undefined; url: string | null | undefined; }, _sapphire_shapeshift.UndefinedToOptional<{ name: string | null; iconURL: string | null | undefined; url: string | null | undefined; }>>; declare const RGBPredicate: _sapphire_shapeshift.NumberValidator<number>; declare const colorPredicate: _sapphire_shapeshift.UnionValidator<number | [number, number, number] | null>; declare const descriptionPredicate$1: _sapphire_shapeshift.UnionValidator<string | null>; declare const footerTextPredicate: _sapphire_shapeshift.UnionValidator<string | null>; declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ text: string | null; iconURL: string | null | undefined; }, _sapphire_shapeshift.UndefinedToOptional<{ text: string | null; iconURL: string | null | undefined; }>>; declare const timestampPredicate: _sapphire_shapeshift.UnionValidator<number | Date | null>; declare const titlePredicate: _sapphire_shapeshift.UnionValidator<string | null>; declare const Assertions$9_RGBPredicate: typeof RGBPredicate; declare const Assertions$9_authorNamePredicate: typeof authorNamePredicate; declare const Assertions$9_colorPredicate: typeof colorPredicate; declare const Assertions$9_embedAuthorPredicate: typeof embedAuthorPredicate; declare const Assertions$9_embedFieldPredicate: typeof embedFieldPredicate; declare const Assertions$9_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; declare const Assertions$9_embedFooterPredicate: typeof embedFooterPredicate; declare const Assertions$9_fieldInlinePredicate: typeof fieldInlinePredicate; declare const Assertions$9_fieldLengthPredicate: typeof fieldLengthPredicate; declare const Assertions$9_fieldNamePredicate: typeof fieldNamePredicate; declare const Assertions$9_fieldValuePredicate: typeof fieldValuePredicate; declare const Assertions$9_footerTextPredicate: typeof footerTextPredicate; declare const Assertions$9_imageURLPredicate: typeof imageURLPredicate; declare const Assertions$9_timestampPredicate: typeof timestampPredicate; declare const Assertions$9_titlePredicate: typeof titlePredicate; declare const Assertions$9_urlPredicate: typeof urlPredicate; declare const Assertions$9_validateFieldLength: typeof validateFieldLength; declare namespace Assertions$9 { export { Assertions$9_RGBPredicate as RGBPredicate, Assertions$9_authorNamePredicate as authorNamePredicate, Assertions$9_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$9_embedAuthorPredicate as embedAuthorPredicate, Assertions$9_embedFieldPredicate as embedFieldPredicate, Assertions$9_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$9_embedFooterPredicate as embedFooterPredicate, Assertions$9_fieldInlinePredicate as fieldInlinePredicate, Assertions$9_fieldLengthPredicate as fieldLengthPredicate, Assertions$9_fieldNamePredicate as fieldNamePredicate, Assertions$9_fieldValuePredicate as fieldValuePredicate, Assertions$9_footerTextPredicate as footerTextPredicate, Assertions$9_imageURLPredicate as imageURLPredicate, Assertions$9_timestampPredicate as timestampPredicate, Assertions$9_titlePredicate as titlePredicate, Assertions$9_urlPredicate as urlPredicate, Assertions$9_validateFieldLength as validateFieldLength }; } /** * Normalizes data that is a rest parameter or an array into an array with a depth of 1. * * @typeParam ItemType - The data that must satisfy {@link RestOrArray}. * @param arr - The (possibly variadic) data to normalize */ declare function normalizeArray<ItemType>(arr: RestOrArray<ItemType>): ItemType[]; /** * Represents data that may be an array or came from a rest parameter. * * @remarks * This type is used throughout builders to ensure both an array and variadic arguments * may be used. It is normalized with {@link normalizeArray}. */ type RestOrArray<Type> = Type[] | [Type[]]; /** * A tuple satisfying the RGB color model. * * @see {@link https://developer.mozilla.org/docs/Glossary/RGB} */ type RGBTuple = [red: number, green: number, blue: number]; /** * The base icon data typically used in payloads. */ interface IconData { /** * The URL of the icon. */ iconURL?: string; /** * The proxy URL of the icon. */ proxyIconURL?: string; } /** * Represents the author data of an embed. */ interface EmbedAuthorData extends IconData, Omit<APIEmbedAuthor, 'icon_url' | 'proxy_icon_url'> { } /** * Represents the author options of an embed. */ interface EmbedAuthorOptions extends Omit<EmbedAuthorData, 'proxyIconURL'> { } /** * Represents the footer data of an embed. */ interface EmbedFooterData extends IconData, Omit<APIEmbedFooter, 'icon_url' | 'proxy_icon_url'> { } /** * Represents the footer options of an embed. */ interface EmbedFooterOptions extends Omit<EmbedFooterData, 'proxyIconURL'> { } /** * Represents the image data of an embed. */ interface EmbedImageData extends Omit<APIEmbedImage, 'proxy_url'> { /** * The proxy URL for the image. */ proxyURL?: string; } /** * A builder that creates API-compatible JSON data for embeds. */ declare class EmbedBuilder { /** * The API data associated with this embed. */ readonly data: APIEmbed; /** * Creates a new embed from API data. * * @param data - The API data to create this embed with */ constructor(data?: APIEmbed); /** * Appends fields to the embed. * * @remarks * This method accepts either an array of fields or a variable number of field parameters. * The maximum amount of fields that can be added is 25. * @example * Using an array: * ```ts * const fields: APIEmbedField[] = ...; * const embed = new EmbedBuilder() * .addFields(fields); * ``` * @example * Using rest parameters (variadic): * ```ts * const embed = new EmbedBuilder() * .addFields( * { name: 'Field 1', value: 'Value 1' }, * { name: 'Field 2', value: 'Value 2' }, * ); * ``` * @param fields - The fields to add */ addFields(...fields: RestOrArray<APIEmbedField>): this; /** * Removes, replaces, or inserts fields for this embed. * * @remarks * This method behaves similarly * to {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}. * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. * @example * Remove the first field: * ```ts * embed.spliceFields(0, 1); * ``` * @example * Remove the first n fields: * ```ts * const n = 4; * embed.spliceFields(0, n); * ``` * @example * Remove the last field: * ```ts * embed.spliceFields(-1, 1); * ``` * @param index - The index to start at * @param deleteCount - The number of fields to remove * @param fields - The replacing field objects */ spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this; /** * Sets the fields for this embed. * * @remarks * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically, * it splices the entire array of fields, replacing them with the provided fields. * * You can set a maximum of 25 fields. * @param fields - The fields to set */ setFields(...fields: RestOrArray<APIEmbedField>): this; /** * Sets the author of this embed. * * @param options - The options to use */ setAuthor(options: EmbedAuthorOptions | null): this; /** * Sets the color of this embed. * * @param color - The color to use */ setColor(color: RGBTuple | number | null): this; /** * Sets the description of this embed. * * @param description - The description to use */ setDescription(description: string | null): this; /** * Sets the footer of this embed. * * @param options - The footer to use */ setFooter(options: EmbedFooterOptions | null): this; /** * Sets the image of this embed. * * @param url - The image URL to use */ setImage(url: string | null): this; /** * Sets the thumbnail of this embed. * * @param url - The thumbnail URL to use */ setThumbnail(url: string | null): this; /** * Sets the timestamp of this embed. * * @param timestamp - The timestamp or date to use */ setTimestamp(timestamp?: Date | number | null): this; /** * Sets the title for this embed. * * @param title - The title to use */ setTitle(title: string | null): this; /** * Sets the URL of this embed. * * @param url - The URL to use */ setURL(url: string | null): this; /** * Serializes this builder to API-compatible JSON data. * * @remarks * This method runs validations on the data before serializing it. * As such, it may throw an error if the data is invalid. */ toJSON(): APIEmbed; } /** * A builder that creates API-compatible JSON data for string select menu options. */ declare class StringSelectMenuOptionBuilder implements JSONEncodable<APISelectMenuOption> { data: Partial<APISelectMenuOption>; /** * Creates a new string select menu option from API data. * * @param data - The API data to create this string select menu option with * @example * Creating a string select menu option from an API data object: * ```ts * const selectMenuOption = new SelectMenuOptionBuilder({ * label: 'catchy label', * value: '1', * }); * ``` * @example * Creating a string select menu option using setters and API data: * ```ts * const selectMenuOption = new SelectMenuOptionBuilder({ * default: true, * value: '1', * }) * .setLabel('woah'); * ``` */ constructor(data?: Partial<APISelectMenuOption>); /** * Sets the label for this option. * * @param label - The label to use */ setLabel(label: string): this; /** * Sets the value for this option. * * @param value - The value to use */ setValue(value: string): this; /** * Sets the description for this option. * * @param description - The description to use */ setDescription(description: string): this; /** * Sets whether this option is selected by default. * * @param isDefault - Whether this option is selected by default */ setDefault(isDefault?: boolean): this; /** * Sets the emoji to display for this option. * * @param emoji - The emoji to use */ setEmoji(emoji: APIMessageComponentEmoji): this; /** * {@inheritDoc BaseSelectMenuBuilder.toJSON} */ toJSON(): APISelectMenuOption; } declare const idValidator: _sapphire_shapeshift.NumberValidator<number>; declare const customIdValidator: _sapphire_shapeshift.StringValidator<string>; declare const emojiValidator: _sapphire_shapeshift.ObjectValidator<{ name?: string | undefined; id?: string | undefined; animated?: boolean | undefined; }, _sapphire_shapeshift.UndefinedToOptional<{ name?: string | undefined; id?: string | undefined; animated?: boolean | undefined; }>>; declare const disabledValidator: _sapphire_shapeshift.BooleanValidator<boolean>; declare const buttonLabelValidator: _sapphire_shapeshift.StringValidator<string>; declare const buttonStyleValidator: _sapphire_shapeshift.NativeEnumValidator<typeof ButtonStyle>; declare const placeholderValidator$1: _sapphire_shapeshift.StringValidator<string>; declare const minMaxValidator: _sapphire_shapeshift.NumberValidator<number>; declare const labelValueDescriptionValidator: _sapphire_shapeshift.StringValidator<string>; /** * @deprecated Replaced with selectMenuStringOptionPredicate. */ declare const jsonOptionValidator: _sapphire_shapeshift.ObjectValidator<{ label: string; value: string; description: string | undefined; emoji: _sapphire_shapeshift.UndefinedToOptional<{ name?: string | undefined; id?: string | undefined; animated?: boolean | undefined; }> | undefined; default: boolean | undefined; }, _sapphire_shapeshift.UndefinedToOptional<{ label: string; value: string; description: string | undefined; emoji: _sapphire_shapeshift.UndefinedToOptional<{ name?: string | undefined; id?: string | undefined; animated?: boolean | undefined; }> | undefined; default: boolean | undefined; }>>; declare const optionValidator: _sapphire_shapeshift.InstanceValidator<StringSelectMenuOptionBuilder>; declare const optionsValidator: _sapphire_shapeshift.ArrayValidator<StringSelectMenuOptionBuilder[], StringSelectMenuOptionBuilder>; declare const optionsLengthValidator: _sapphire_shapeshift.NumberValidator<number>; declare function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string): void; declare const defaultValidator: _sapphire_shapeshift.BooleanValidator<boolean>; declare function validateRequiredSelectMenuOptionParameters(label?: string, value?: string): void; declare const channelTypesValidator: _sapphire_shapeshift.ArrayValidator<ChannelType[], ChannelType>; declare const urlValidator: _sapphire_shapeshift.StringValidator<string>; declare function validateRequiredButtonParameters(style?: ButtonStyle, label?: string, emoji?: APIMessageComponentEmoji, customId?: string, skuId?: string, url?: string): void; declare const Assertions$8_buttonLabelValidator: typeof buttonLabelValidator; declare const Assertions$8_buttonStyleValidator: typeof buttonStyleValidator; declare const Assertions$8_channelTypesValidator: typeof channelTypesValidator; declare const Assertions$8_customIdValidator: typeof customIdValidator; declare const Assertions$8_defaultValidator: typeof defaultValidator; declare const Assertions$8_disabledValidator: typeof disabledValidator; declare const Assertions$8_emojiValidator: typeof emojiValidator; declare const Assertions$8_idValidator: typeof idValidator; declare const Assertions$8_jsonOptionValidator: typeof jsonOptionValidator; declare const Assertions$8_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; declare const Assertions$8_minMaxValidator: typeof minMaxValidator; declare const Assertions$8_optionValidator: typeof optionValidator; declare const Assertions$8_optionsLengthValidator: typeof optionsLengthValidator; declare const Assertions$8_optionsValidator: typeof optionsValidator; declare const Assertions$8_urlValidator: typeof urlValidator; declare const Assertions$8_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; declare const Assertions$8_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; declare const Assertions$8_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; declare namespace Assertions$8 { export { Assertions$8_buttonLabelValidator as buttonLabelValidator, Assertions$8_buttonStyleValidator as buttonStyleValidator, Assertions$8_channelTypesValidator as channelTypesValidator, Assertions$8_customIdValidator as customIdValidator, Assertions$8_defaultValidator as defaultValidator, Assertions$8_disabledValidator as disabledValidator, Assertions$8_emojiValidator as emojiValidator, Assertions$8_idValidator as idValidator, Assertions$8_jsonOptionValidator as jsonOptionValidator, Assertions$8_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$8_minMaxValidator as minMaxValidator, Assertions$8_optionValidator as optionValidator, Assertions$8_optionsLengthValidator as optionsLengthValidator, Assertions$8_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$8_urlValidator as urlValidator, Assertions$8_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$8_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$8_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ type AnyAPIActionRowComponent = APIActionRowComponent<APIComponentInActionRow> | APIComponentInActionRow | APIMessageComponent | APIModalComponent; /** * The base component builder that contains common symbols for all sorts of components. * * @typeParam DataType - The type of internal API data that is stored within the component */ declare abstract class ComponentBuilder<DataType extends Partial<APIBaseComponent<ComponentType>> = APIBaseComponent<ComponentType>> implements JSONEncodable<AnyAPIActionRowComponent> { /** * The API data associated with this component. */ readonly data: Partial<DataType>; /** * Serializes this builder to API-compatible JSON data. * * @remarks * This method runs validations on the data before serializing it. * As such, it may throw an error if the data is invalid. */ abstract toJSON(): AnyAPIActionRowComponent; /** * Constructs a new kind of component. * * @param data - The data to construct a component out of */ constructor(data: Partial<DataType>); /** * Sets the id (not the custom id) for this component. * * @param id - The id for this component */ setId(id: number): this; /** * Clears the id of this component, defaulting to a default incremented id. */ clearId(): this; } /** * A builder that creates API-compatible JSON data for buttons. */ declare class ButtonBuilder extends ComponentBuilder<APIButtonComponent> { /** * Creates a new button from API data. * * @param data - The API data to create this button with * @example * Creating a button from an API data object: * ```ts * const button = new ButtonBuilder({ * custom_id: 'a cool button', * style: ButtonStyle.Primary, * label: 'Click Me', * emoji: { * name: 'smile', * id: '123456789012345678', * }, * }); * ``` * @example * Creating a button using setters and API data: * ```ts * const button = new ButtonBuilder({ * style: ButtonStyle.Secondary, * label: 'Click Me', * }) * .setEmoji({ name: '🙂' }) * .setCustomId('another cool button'); * ``` */ constructor(data?: Partial<APIButtonComponent>); /** * Sets the style of this button. * * @param style - The style to use */ setStyle(style: ButtonStyle): this; /** * Sets the URL for this button. * * @remarks * This method is only available to buttons using the `Link` button style. * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`. * @param url - The URL to use */ setURL(url: string): this; /** * Sets the custom id for this button. * * @remarks * This method is only applicable to buttons that are not using the `Link` button style. * @param customId - The custom id to use */ setCustomId(customId: string): this; /** * Sets the SKU id that represents a purchasable SKU for this button. * * @remarks Only available when using premium-style buttons. * @param skuId - The SKU id to use */ setSKUId(skuId: Snowflake): this; /** * Sets the emoji to display on this button. * * @param emoji - The emoji to use */ setEmoji(emoji: APIMessageComponentEmoji): this; /** * Sets whether this button is disabled. * * @param disabled - Whether to disable this button */ setDisabled(disabled?: boolean): this; /** * Sets the label for this button. * * @param label - The label to use */ setLabel(label: string): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APIButtonComponent; } /** * 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. */ declare abstract class BaseSelectMenuBuilder<SelectMenuType extends APISelectMenuComponent> extends ComponentBuilder<SelectMenuType> { /** * Sets the placeholder for this select menu. * * @param placeholder - The placeholder to use */ setPlaceholder(placeholder: string): this; /** * Sets the minimum values that must be selected in the select menu. * * @param minValues - The minimum values that must be selected */ setMinValues(minValues: number): this; /** * Sets the maximum values that can be selected in the select menu. * * @param maxValues - The maximum values that can be selected */ setMaxValues(maxValues: number): this; /** * Sets the custom id for this select menu. * * @param customId - The custom id to use */ setCustomId(customId: string): this; /** * Sets whether this select menu is disabled. * * @param disabled - Whether this select menu is disabled */ setDisabled(disabled?: boolean): this; /** * Sets whether this select menu is required. * * @remarks Only for use in modals. * @param required - Whether this select menu is required */ setRequired(required?: boolean): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): SelectMenuType; } /** * A builder that creates API-compatible JSON data for channel select menus. */ declare class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder<APIChannelSelectComponent> { /** * Creates a new select menu from API data. * * @param data - The API data to create this select menu with * @example * Creating a select menu from an API data object: * ```ts * const selectMenu = new ChannelSelectMenuBuilder({ * custom_id: 'a cool select menu', * placeholder: 'select an option', * max_values: 2, * }); * ``` * @example * Creating a select menu using setters and API data: * ```ts * const selectMenu = new ChannelSelectMenuBuilder({ * custom_id: 'a cool select menu', * }) * .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) * .setMinValues(2); * ``` */ constructor(data?: Partial<APIChannelSelectComponent>); /** * Adds channel types to this select menu. * * @param types - The channel types to use */ addChannelTypes(...types: RestOrArray<ChannelType>): this; /** * Sets channel types for this select menu. * * @param types - The channel types to use */ setChannelTypes(...types: RestOrArray<ChannelType>): this; /** * Adds default channels to this auto populated select menu. * * @param channels - The channels to add */ addDefaultChannels(...channels: RestOrArray<Snowflake>): this; /** * Sets default channels for this auto populated select menu. * * @param channels - The channels to set */ setDefaultChannels(...channels: RestOrArray<Snowflake>): this; /** * {@inheritDoc BaseSelectMenuBuilder.toJSON} */ toJSON(): APIChannelSelectComponent; } /** * A builder that creates API-compatible JSON data for mentionable select menus. */ declare class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder<APIMentionableSelectComponent> { /** * Creates a new select menu from API data. * * @param data - The API data to create this select menu with * @example * Creating a select menu from an API data object: * ```ts * const selectMenu = new MentionableSelectMenuBuilder({ * custom_id: 'a cool select menu', * placeholder: 'select an option', * max_values: 2, * }); * ``` * @example * Creating a select menu using setters and API data: * ```ts * const selectMenu = new MentionableSelectMenuBuilder({ * custom_id: 'a cool select menu', * }) * .setMinValues(1); * ``` */ constructor(data?: Partial<APIMentionableSelectComponent>); /** * Adds default roles to this auto populated select menu. * * @param roles - The roles to add */ addDefaultRoles(...roles: RestOrArray<Snowflake>): this; /** * Adds default users to this auto populated select menu. * * @param users - The users to add */ addDefaultUsers(...users: RestOrArray<Snowflake>): this; /** * Adds default values to this auto populated select menu. * * @param values - The values to add */ addDefaultValues(...values: RestOrArray<APISelectMenuDefaultValue<SelectMenuDefaultValueType.Role> | APISelectMenuDefaultValue<SelectMenuDefaultValueType.User>>): this; /** * Sets default values for this auto populated select menu. * * @param values - The values to set */ setDefaultValues(...values: RestOrArray<APISelectMenuDefaultValue<SelectMenuDefaultValueType.Role> | APISelectMenuDefaultValue<SelectMenuDefaultValueType.User>>): this; } /** * A builder that creates API-compatible JSON data for role select menus. */ declare class RoleSelectMenuBuilder extends BaseSelectMenuBuilder<APIRoleSelectComponent> { /** * Creates a new select menu from API data. * * @param data - The API data to create this select menu with * @example * Creating a select menu from an API data object: * ```ts * const selectMenu = new RoleSelectMenuBuilder({ * custom_id: 'a cool select menu', * placeholder: 'select an option', * max_values: 2, * }); * ``` * @example * Creating a select menu using setters and API data: * ```ts * const selectMenu = new RoleSelectMenuBuilder({ * custom_id: 'a cool select menu', * }) * .setMinValues(1); * ``` */ constructor(data?: Partial<APIRoleSelectComponent>); /** * Adds default roles to this auto populated select menu. * * @param roles - The roles to add */ addDefaultRoles(...roles: RestOrArray<Snowflake>): this; /** * Sets default roles for this auto populated select menu. * * @param roles - The roles to set */ setDefaultRoles(...roles: RestOrArray<Snowflake>): this; } /** * A builder that creates API-compatible JSON data for string select menus. */ declare class StringSelectMenuBuilder extends BaseSelectMenuBuilder<APIStringSelectComponent> { /** * The options within this select menu. */ readonly options: StringSelectMenuOptionBuilder[]; /** * Creates a new select menu from API data. * * @param data - The API data to create this select menu with * @example * Creating a select menu from an API data object: * ```ts * const selectMenu = new StringSelectMenuBuilder({ * custom_id: 'a cool select menu', * placeholder: 'select an option', * max_values: 2, * options: [ * { label: 'option 1', value: '1' }, * { label: 'option 2', value: '2' }, * { label: 'option 3', value: '3' }, * ], * }); * ``` * @example * Creating a select menu using setters and API data: * ```ts * const selectMenu = new StringSelectMenuBuilder({ * custom_id: 'a cool select menu', * }) * .setMinValues(1) * .addOptions({ * label: 'Catchy', * value: 'catch', * }); * ``` */ constructor(data?: Partial<APIStringSelectComponent>); /** * Adds options to this select menu. * * @param options - The options to add */ addOptions(...options: RestOrArray<APISelectMenuOption | StringSelectMenuOptionBuilder>): this; /** * Sets the options for this select menu. * * @param options - The options to set */ setOptions(...options: RestOrArray<APISelectMenuOption | StringSelectMenuOptionBuilder>): this; /** * Removes, replaces, or inserts options for this select menu. * * @remarks * This method behaves similarly * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}. * It's useful for modifying and adjusting the order of existing options. * @example * Remove the first option: * ```ts * selectMenu.spliceOptions(0, 1); * ``` * @example * Remove the first n option: * ```ts * const n = 4; * selectMenu.spliceOptions(0, n); * ``` * @example * Remove the last option: * ```ts * selectMenu.spliceOptions(-1, 1); * ``` * @param index - The index to start at * @param deleteCount - The number of options to remove * @param options - The replacing option objects or builders */ spliceOptions(index: number, deleteCount: number, ...options: RestOrArray<APISelectMenuOption | StringSelectMenuOptionBuilder>): this; /** * {@inheritDoc BaseSelectMenuBuilder.toJSON} */ toJSON(): APIStringSelectComponent; } /** * A builder that creates API-compatible JSON data for user select menus. */ declare class UserSelectMenuBuilder extends BaseSelectMenuBuilder<APIUserSelectComponent> { /** * Creates a new select menu from API data. * * @param data - The API data to create this select menu with * @example * Creating a select menu from an API data object: * ```ts * const selectMenu = new UserSelectMenuBuilder({ * custom_id: 'a cool select menu', * placeholder: 'select an option', * max_values: 2, * }); * ``` * @example * Creating a select menu using setters and API data: * ```ts * const selectMenu = new UserSelectMenuBuilder({ * custom_id: 'a cool select menu', * }) * .setMinValues(1); * ``` */ constructor(data?: Partial<APIUserSelectComponent>); /** * Adds default users to this auto populated select menu. * * @param users - The users to add */ addDefaultUsers(...users: RestOrArray<Snowflake>): this; /** * Sets default users for this auto populated select menu. * * @param users - The users to set */ setDefaultUsers(...users: RestOrArray<Snowflake>): this; } /** * A builder that creates API-compatible JSON data for text inputs. */ declare class TextInputBuilder extends ComponentBuilder<APITextInputComponent> implements Equatable<APITextInputComponent | JSONEncodable<APITextInputComponent>> { /** * Creates a new text input from API data. * * @param data - The API data to create this text input with * @example * Creating a text input from an API data object: * ```ts * const textInput = new TextInputBuilder({ * custom_id: 'a cool text input', * placeholder: 'Type something', * style: TextInputStyle.Short, * }); * ``` * @example * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ * placeholder: 'Type something else', * }) * .setCustomId('woah') * .setStyle(TextInputStyle.Paragraph); * ``` */ constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput; }); /** * Sets the custom id for this text input. * * @param customId - The custom id to use */ setCustomId(customId: string): this; /** * Sets the label for this text input. * * @param label - The label to use * @deprecated Use a label builder to create a label (and optionally a description) instead. */ setLabel(label: string): this; /** * Sets the style for this text input. * * @param style - The style to use */ setStyle(style: TextInputStyle): this; /** * Sets the minimum length of text for this text input. * * @param minLength - The minimum length of text for this text input */ setMinLength(minLength: number): this; /** * Sets the maximum length of text for this text input. * * @param maxLength - The maximum length of text for this text input */ setMaxLength(maxLength: number): this; /** * Sets the placeholder for this text input. * * @param placeholder - The placeholder to use */ setPlaceholder(placeholder: string): this; /** * Sets the value for this text input. * * @param value - The value to use */ setValue(value: string): this; /** * Sets whether this text input is required. * * @param required - Whether this text input is required */ setRequired(required?: boolean): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APITextInputComponent; /** * Whether this is equal to another structure. */ equals(other: APITextInputComponent | JSONEncodable<APITextInputComponent>): boolean; } /** * The builders that may be used for modals. */ type ModalComponentBuilder = ActionRowBuilder<ModalActionRowComponentBuilder> | ModalActionRowComponentBuilder; /** * The builders that may be used within an action row for messages. */ type MessageActionRowComponentBuilder = ButtonBuilder | ChannelSelectMenuBuilder | MentionableSelectMenuBuilder | RoleSelectMenuBuilder | StringSelectMenuBuilder | UserSelectMenuBuilder; /** * The builders that may be used within an action row for modals. */ type ModalActionRowComponentBuilder = TextInputBuilder; /** * Any builder. */ type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder; /** * A builder that creates API-compatible JSON data for action rows. * * @typeParam ComponentType - The types of components this action row holds */ declare class ActionRowBuilder<ComponentType extends AnyComponentBuilder> extends ComponentBuilder<APIActionRowComponent<APIComponentInMessageActionRow | APIComponentInModalActionRow>> { /** * The components within this action row. */ readonly components: ComponentType[]; /** * Creates a new action row from API data. * * @param data - The API data to create this action row with * @example * Creating an action row from an API data object: * ```ts * const actionRow = new ActionRowBuilder({ * components: [ * { * custom_id: "custom id", * label: "Type something", * style: TextInputStyle.Short, * type: ComponentType.TextInput, * }, * ], * }); * ``` * @example * Creating an action row using setters and API data: * ```ts * const actionRow = new ActionRowBuilder({ * components: [ * { * custom_id: "custom id", * label: "Click me", * style: ButtonStyle.Primary, * type: ComponentType.Button, * }, * ], * }) * .addComponents(button2, button3); * ``` */ constructor({ components, ...data }?: Partial<APIActionRowComponent<APIComponentInActionRow>>); /** * Adds components to this action row. * * @param components - The components to add */ addComponents(...components: RestOrArray<ComponentType>): this; /** * Sets components for this action row. * * @param components - The components to set */ setComponents(...components: RestOrArray<ComponentType>): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APIActionRowComponent<ReturnType<ComponentType['toJSON']>>; } /** * A builder that creates API-compatible JSON data for file uploads. */ declare class FileUploadBuilder extends ComponentBuilder<APIFileUploadComponent> { /** * Creates a new file upload. * * @param data - The API data to create this file upload with * @example * Creating a file upload from an API data object: * ```ts * const fileUpload = new FileUploadBuilder({ * custom_id: "file_upload", * min_values: 2, * max_values: 5, * }); * ``` * @example * Creating a file upload using setters and API data: * ```ts * const fileUpload = new FileUploadBuilder({ * custom_id: "file_upload", * min_values: 2, * max_values: 5, * }).setRequired(); * ``` */ constructor(data?: Partial<APIFileUploadComponent>); /** * Sets the custom id for this file upload. * * @param customId - The custom id to use */ setCustomId(customId: string): this; /** * Sets the minimum number of file uploads required. * * @param minValues - The minimum values that must be uploaded */ setMinValues(minValues: number): this; /** * Clears the minimum values. */ clearMinValues(): this; /** * Sets the maximum number of file uploads required. * * @param maxValues - The maximum values that can be uploaded */ setMaxValues(maxValues: number): this; /** * Clears the maximum values. */ clearMaxValues(): this; /** * Sets whether this file upload is required. * * @param required - Whether this file upload is required */ setRequired(required?: boolean): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APIFileUploadComponent; } interface LabelBuilderData extends Partial<Omit<APILabelComponent, 'component'>> { component?: ChannelSelectMenuBuilder | FileUploadBuilder | MentionableSelectMenuBuilder | RoleSelectMenuBuilder | StringSelectMenuBuilder | TextInputBuilder | UserSelectMenuBuilder; } /** * A builder that creates API-compatible JSON data for labels. */ declare class LabelBuilder extends ComponentBuilder<LabelBuilderData> { /** * @internal */ readonly data: LabelBuilderData; /** * Creates a new label. * * @param data - The API data to create this label with * @example * Creating a label from an API data object: * ```ts * const label = new LabelBuilder({ * label: "label", * component, * }); * ``` * @example * Creating a label using setters and API data: * ```ts * const label = new LabelBuilder({ * label: 'label', * component, * }).setLabel('new text'); * ``` */ constructor(data?: Partial<APILabelComponent>); /** * Sets the label for this label. * * @param label - The label to use */ setLabel(label: string): this; /** * Sets the description for this label. * * @param description - The description to use */ setDescription(description: string): this; /** * Clears the description for this label. */ clearDescription(): this; /** * Sets a string select menu component to this label. * * @param input - A function that returns a component builder or an already built builder */ setStringSelectMenuComponent(input: APIStringSelectComponent | StringSelectMenuBuilder | ((builder: StringSelectMenuBuilder) => StringSelectMenuBuilder)): this; /** * Sets a user select menu component to this label. * * @param input - A function that returns a component builder or an already built builder */ setUserSelectMenuComponent(input: APIUserSelectComponent | UserSelectMenuBuilder | ((builder: UserSelectMenuBuilder) => UserSelectMenuBuilder)): this; /** * Sets a role select menu component to this label. * * @param input - A function that returns a component builder or an already built builder */ setRoleSelectMenuComponent(input: APIRoleSelectComponent | RoleSelectMenuBuilder | ((builder: RoleSelectMenuBuilder) => RoleSelectMenuBuilder)): this; /** * Sets a mentionable select menu component to this label. * * @param input - A function that returns a component builder or an already built builder */ setMentionableSelectMenuComponent(input: APIMentionableSelectComponent | MentionableSelectMenuBuilder | ((builder: MentionableSelectMenuBuilder) => MentionableSelectMenuBuilder)): this; /** * Sets a channel select menu component to this label. * * @param input - A function that returns a component builder or an already built builder */ setChannelSelectMenuComponent(input: APIChannelSelectComponent | ChannelSelectMenuBuilder | ((builder: ChannelSelectMenuBuilder) => ChannelSelectMenuBuilder)): this; /** * Sets a text input component to this label. * * @param input - A function that returns a component builder or an already built builder */ setTextInputComponent(input: APITextInputComponent | TextInputBuilder | ((builder: TextInputBuilder) => TextInputBuilder)): this; /** * Sets a file upload component to this label. * * @param input - A function that returns a component builder or an already built builder */ setFileUploadComponent(input: APIFileUploadComponent | FileUploadBuilder | ((builder: FileUploadBuilder) => FileUploadBuilder)): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APILabelComponent; } declare class FileBuilder extends ComponentBuilder<APIFileComponent> { /** * Creates a new file from API data. * * @param data - The API data to create this file with * @example * Creating a file from an API data object: * ```ts * const file = new FileBuilder({ * spoiler: true, * file: { * url: 'attachment://file.png', * }, * }); * ``` * @example * Creating a file using setters and API data: * ```ts * const file = new FileBuilder({ * file: { * url: 'attachment://image.jpg', * }, * }) * .setSpoiler(false); * ``` */ constructor(data?: Partial<APIFileComponent>); /** * Sets the spoiler status of this file. * * @param spoiler - The spoiler status to use */ setSpoiler(spoiler?: boolean): this; /** * Sets the media URL of this file. * * @param url - The URL to use */ setURL(url: string): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APIFileComponent; } declare class SeparatorBuilder extends ComponentBuilder<APISeparatorComponent> { /** * Creates a new separator from API data. * * @param data - The API data to create this separator with * @example * Creating a separator from an API data object: * ```ts * const separator = new SeparatorBuilder({ * spacing: SeparatorSpacingSize.Small, * divider: true, * }); * ``` * @example * Creating a separator using setters and API data: * ```ts * const separator = new SeparatorBuilder({ * spacing: SeparatorSpacingSize.Large, * }) * .setDivider(false); * ``` */ constructor(data?: Partial<APISeparatorComponent>); /** * Sets whether this separator should show a divider line. * * @param divider - Whether to show a divider line */ setDivider(divider?: boolean): this; /** * Sets the spacing of this separator. * * @param spacing - The spacing to use */ setSpacing(spacing: SeparatorSpacingSize): this; /** * Clears the spacing of this separator. */ clearSpacing(): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APISeparatorComponent; } declare class TextDisplayBuilder extends ComponentBuilder<APITextDisplayComponent> { /** * Creates a new text display from API data. * * @param data - The API data to create this text display with * @example * Creating a text display from an API data object: * ```ts * const textDisplay = new TextDisplayBuilder({ * content: 'some text', * }); * ``` * @example * Creating a text display using setters and API data: * ```ts * const textDisplay = new TextDisplayBuilder({ * content: 'old text', * }) * .setContent('new text'); * ``` */ constructor(data?: Partial<APITextDisplayComponent>); /** * Sets the text of this text display. * * @param content - The text to use */ setContent(content: string): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APITextDisplayComponent; } /** * The builders that may be used within a container. */ type ContainerComponentBuilder = ActionRowBuilder<AnyComponentBuilder> | FileBuilder | MediaGalleryBuilder | SectionBuilder | SeparatorBuilder | TextDisplayBuilder; /** * A builder that creates API-compatible JSON data for a container. */ declare class ContainerBuilder extends ComponentBuilder<APIContainerComponent> { /** * The components within this container. */ readonly components: ContainerComponentBuilder[]; /** * Creates a new container from API data. * * @param data - The API data to create this container with * @example * Creating a container from an API data object: * ```ts * const container = new ContainerBuilder({ * components: [ * { * content: "Some text here", * type: ComponentType.TextDisplay, * }, * ], * }); * ``` * @example * Creating a container using setters and API data: * ```ts * const container = new ContainerBuilder({ * components: [ * { * content: "# Heading", * type: ComponentType.TextDisplay, * }, * ], * }) * .addSeparatorComponents(separator) * .addSectionComponents(section); * ``` */ constructor({ components, ...data }?: Partial<APIContainerComponent>); /** * Sets the accent color of this container. * * @param color - The color to use */ setAccentColor(color?: RGBTuple | number): this; /** * Clears the accent color of this container. */ clearAccentColor(): this; /** * Adds action ro