UNPKG

@discordjs/builders

Version:

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

1,298 lines (1,272 loc) • 81.3 kB
import * as _sapphire_shapeshift from '@sapphire/shapeshift'; import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIActionRowComponentTypes, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIMessageActionRowComponent, APIModalActionRowComponent, APIModalComponent, APIMessageComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, 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: _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$5_RGBPredicate: typeof RGBPredicate; declare const Assertions$5_authorNamePredicate: typeof authorNamePredicate; declare const Assertions$5_colorPredicate: typeof colorPredicate; declare const Assertions$5_descriptionPredicate: typeof descriptionPredicate; declare const Assertions$5_embedAuthorPredicate: typeof embedAuthorPredicate; declare const Assertions$5_embedFieldPredicate: typeof embedFieldPredicate; declare const Assertions$5_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; declare const Assertions$5_embedFooterPredicate: typeof embedFooterPredicate; declare const Assertions$5_fieldInlinePredicate: typeof fieldInlinePredicate; declare const Assertions$5_fieldLengthPredicate: typeof fieldLengthPredicate; declare const Assertions$5_fieldNamePredicate: typeof fieldNamePredicate; declare const Assertions$5_fieldValuePredicate: typeof fieldValuePredicate; declare const Assertions$5_footerTextPredicate: typeof footerTextPredicate; declare const Assertions$5_imageURLPredicate: typeof imageURLPredicate; declare const Assertions$5_timestampPredicate: typeof timestampPredicate; declare const Assertions$5_titlePredicate: typeof titlePredicate; declare const Assertions$5_urlPredicate: typeof urlPredicate; declare const Assertions$5_validateFieldLength: typeof validateFieldLength; declare namespace Assertions$5 { export { Assertions$5_RGBPredicate as RGBPredicate, Assertions$5_authorNamePredicate as authorNamePredicate, Assertions$5_colorPredicate as colorPredicate, Assertions$5_descriptionPredicate as descriptionPredicate, Assertions$5_embedAuthorPredicate as embedAuthorPredicate, Assertions$5_embedFieldPredicate as embedFieldPredicate, Assertions$5_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$5_embedFooterPredicate as embedFooterPredicate, Assertions$5_fieldInlinePredicate as fieldInlinePredicate, Assertions$5_fieldLengthPredicate as fieldLengthPredicate, Assertions$5_fieldNamePredicate as fieldNamePredicate, Assertions$5_fieldValuePredicate as fieldValuePredicate, Assertions$5_footerTextPredicate as footerTextPredicate, Assertions$5_imageURLPredicate as imageURLPredicate, Assertions$5_timestampPredicate as timestampPredicate, Assertions$5_titlePredicate as titlePredicate, Assertions$5_urlPredicate as urlPredicate, Assertions$5_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/en-US/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 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>; 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$4_buttonLabelValidator: typeof buttonLabelValidator; declare const Assertions$4_buttonStyleValidator: typeof buttonStyleValidator; declare const Assertions$4_channelTypesValidator: typeof channelTypesValidator; declare const Assertions$4_customIdValidator: typeof customIdValidator; declare const Assertions$4_defaultValidator: typeof defaultValidator; declare const Assertions$4_disabledValidator: typeof disabledValidator; declare const Assertions$4_emojiValidator: typeof emojiValidator; declare const Assertions$4_jsonOptionValidator: typeof jsonOptionValidator; declare const Assertions$4_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; declare const Assertions$4_minMaxValidator: typeof minMaxValidator; declare const Assertions$4_optionValidator: typeof optionValidator; declare const Assertions$4_optionsLengthValidator: typeof optionsLengthValidator; declare const Assertions$4_optionsValidator: typeof optionsValidator; declare const Assertions$4_urlValidator: typeof urlValidator; declare const Assertions$4_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; declare const Assertions$4_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; declare const Assertions$4_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; declare namespace Assertions$4 { export { Assertions$4_buttonLabelValidator as buttonLabelValidator, Assertions$4_buttonStyleValidator as buttonStyleValidator, Assertions$4_channelTypesValidator as channelTypesValidator, Assertions$4_customIdValidator as customIdValidator, Assertions$4_defaultValidator as defaultValidator, Assertions$4_disabledValidator as disabledValidator, Assertions$4_emojiValidator as emojiValidator, Assertions$4_jsonOptionValidator as jsonOptionValidator, Assertions$4_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$4_minMaxValidator as minMaxValidator, Assertions$4_optionValidator as optionValidator, Assertions$4_optionsLengthValidator as optionsLengthValidator, Assertions$4_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$4_urlValidator as urlValidator, Assertions$4_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$4_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$4_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ type AnyAPIActionRowComponent = APIActionRowComponent<APIActionRowComponentTypes> | APIActionRowComponentTypes; /** * 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>); } /** * 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 must be selected in the select menu. * * @param maxValues - The maximum values that must 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; /** * {@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', * label: 'Type something', * style: TextInputStyle.Short, * }); * ``` * @example * Creating a text input using setters and API data: * ```ts * const textInput = new TextInputBuilder({ * label: '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 */ 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 messages. */ type MessageComponentBuilder = ActionRowBuilder<MessageActionRowComponentBuilder> | MessageActionRowComponentBuilder; /** * 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<APIMessageActionRowComponent | APIModalActionRowComponent>> { /** * 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<APIActionRowComponentTypes>>); /** * 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']>>; } /** * Components here are mapped to their respective builder. */ interface MappedComponentTypes { /** * The action row component type is associated with an {@link ActionRowBuilder}. */ [ComponentType.ActionRow]: ActionRowBuilder<AnyComponentBuilder>; /** * The button component type is associated with a {@link ButtonBuilder}. */ [ComponentType.Button]: ButtonBuilder; /** * The string select component type is associated with a {@link StringSelectMenuBuilder}. */ [ComponentType.StringSelect]: StringSelectMenuBuilder; /** * The text input component type is associated with a {@link TextInputBuilder}. */ [ComponentType.TextInput]: TextInputBuilder; /** * The user select component type is associated with a {@link UserSelectMenuBuilder}. */ [ComponentType.UserSelect]: UserSelectMenuBuilder; /** * The role select component type is associated with a {@link RoleSelectMenuBuilder}. */ [ComponentType.RoleSelect]: RoleSelectMenuBuilder; /** * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}. */ [ComponentType.MentionableSelect]: MentionableSelectMenuBuilder; /** * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}. */ [ComponentType.ChannelSelect]: ChannelSelectMenuBuilder; } /** * Factory for creating components from API data. * * @typeParam ComponentType - The type of component to use * @param data - The API data to transform to a component class */ declare function createComponentBuilder<ComponentType extends keyof MappedComponentTypes>(data: (APIModalComponent | APIMessageComponent) & { type: ComponentType; }): MappedComponentTypes[ComponentType]; /** * Factory for creating components from API data. * * @typeParam ComponentBuilder - The type of component to use * @param data - The API data to transform to a component class */ declare function createComponentBuilder<ComponentBuilder extends MessageComponentBuilder | ModalComponentBuilder>(data: ComponentBuilder): ComponentBuilder; declare const textInputStyleValidator: _sapphire_shapeshift.NativeEnumValidator<typeof TextInputStyle>; declare const minLengthValidator: _sapphire_shapeshift.NumberValidator<number>; declare const maxLengthValidator: _sapphire_shapeshift.NumberValidator<number>; declare const requiredValidator: _sapphire_shapeshift.BooleanValidator<boolean>; declare const valueValidator: _sapphire_shapeshift.StringValidator<string>; declare const placeholderValidator: _sapphire_shapeshift.StringValidator<string>; declare const labelValidator: _sapphire_shapeshift.StringValidator<string>; declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void; declare const Assertions$3_labelValidator: typeof labelValidator; declare const Assertions$3_maxLengthValidator: typeof maxLengthValidator; declare const Assertions$3_minLengthValidator: typeof minLengthValidator; declare const Assertions$3_placeholderValidator: typeof placeholderValidator; declare const Assertions$3_requiredValidator: typeof requiredValidator; declare const Assertions$3_textInputStyleValidator: typeof textInputStyleValidator; declare const Assertions$3_valueValidator: typeof valueValidator; declare namespace Assertions$3 { export { Assertions$3_labelValidator as labelValidator, Assertions$3_maxLengthValidator as maxLengthValidator, Assertions$3_minLengthValidator as minLengthValidator, Assertions$3_placeholderValidator as placeholderValidator, Assertions$3_requiredValidator as requiredValidator, Assertions$3_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$3_valueValidator as valueValidator }; } /** * A builder that creates API-compatible JSON data for modals. */ declare class ModalBuilder implements JSONEncodable<APIModalInteractionResponseCallbackData> { /** * The API data associated with this modal. */ readonly data: Partial<APIModalInteractionResponseCallbackData>; /** * The components within this modal. */ readonly components: ActionRowBuilder<ModalActionRowComponentBuilder>[]; /** * Creates a new modal from API data. * * @param data - The API data to create this modal with */ constructor({ components, ...data }?: Partial<APIModalInteractionResponseCallbackData>); /** * Sets the title of this modal. * * @param title - The title to use */ setTitle(title: string): this; /** * Sets the custom id of this modal. * * @param customId - The custom id to use */ setCustomId(customId: string): this; /** * Adds components to this modal. * * @param components - The components to add */ addComponents(...components: RestOrArray<ActionRowBuilder<ModalActionRowComponentBuilder> | APIActionRowComponent<APIModalActionRowComponent>>): this; /** * Sets components for this modal. * * @param components - The components to set */ setComponents(...components: RestOrArray<ActionRowBuilder<ModalActionRowComponentBuilder>>): this; /** * {@inheritDoc ComponentBuilder.toJSON} */ toJSON(): APIModalInteractionResponseCallbackData; } declare const titleValidator: _sapphire_shapeshift.StringValidator<string>; declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder<AnyComponentBuilder>, ...ActionRowBuilder<AnyComponentBuilder>[]], ActionRowBuilder<AnyComponentBuilder>>; declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder<ModalActionRowComponentBuilder>[]): void; declare const Assertions$2_componentsValidator: typeof componentsValidator; declare const Assertions$2_titleValidator: typeof titleValidator; declare namespace Assertions$2 { export { Assertions$2_componentsValidator as componentsValidator, Assertions$2_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; } /** * This mixin holds name and description symbols for slash commands. */ declare class SharedNameAndDescription { /** * The name of this command. */ readonly name: string; /** * The name localizations of this command. */ readonly name_localizations?: LocalizationMap; /** * The description of this command. */ readonly description: string; /** * The description localizations of this command. */ readonly description_localizations?: LocalizationMap; /** * Sets the name of this command. * * @param name - The name to use */ setName(name: string): this; /** * Sets the description of this command. * * @param description - The description to use */ setDescription(description: string): this; /** * Sets a name localization for this command. * * @param locale - The locale to set * @param localizedName - The localized name for the given `locale` */ setNameLocalization(locale: LocaleString, localizedName: string | null): this; /** * Sets the name localizations for this command. * * @param localizedNames - The object of localized names to set */ setNameLocalizations(localizedNames: LocalizationMap | null): this; /** * Sets a description localization for this command. * * @param locale - The locale to set * @param localizedDescription - The localized description for the given locale */ setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null): this; /** * Sets the description localizations for this command. * * @param localizedDescriptions - The object of localized descriptions to set */ setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null): this; } /** * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands. */ declare class SharedSlashCommand { readonly name: string; readonly name_localizations?: LocalizationMap; readonly description: string; readonly description_localizations?: LocalizationMap; readonly options: ToAPIApplicationCommandOptions[]; readonly contexts?: InteractionContextType[]; /** * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead. */ readonly default_permission: boolean | undefined; readonly default_member_permissions: Permissions | null | undefined; /** * @deprecated Use {@link SharedSlashCommand.contexts} instead. */ readonly dm_permission: boolean | undefined; readonly integration_types?: ApplicationIntegrationType[]; readonly nsfw: boolean | undefined; /** * Sets the contexts of this command. * * @param contexts - The contexts */ setContexts(...contexts: RestOrArray<InteractionContextType>): this; /** * Sets the integration types of this command. * * @param integrationTypes - The integration types */ setIntegrationTypes(...integrationTypes: RestOrArray<ApplicationIntegrationType>): this; /** * Sets whether the command is enabled by default when the application is added to a guild. * * @remarks * If set to `false`, you will have to later `PUT` the permissions for this command. * @param value - Whether or not to enable this command by default * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions} * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead. */ setDefaultPermission(value: boolean): this; /** * Sets the default permissions a member should have in order to run the command. * * @remarks * You can set this to `'0'` to disable the command by default. * @param permissions - The permissions bit field to set * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions} */ setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined): this; /** * Sets if the command is available in direct messages with the application. * * @remarks * By default, commands are visible. This method is only for global commands. * @param enabled - Whether the command should be enabled in direct messages * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions} * @deprecated * Use {@link SharedSlashCommand.setContexts} instead. */ setDMPermission(enabled: boolean | null | undefined): this; /** * Sets whether this command is NSFW. * * @param nsfw - Whether this command is NSFW */ setNSFW(nsfw?: boolean): 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(): RESTPostAPIChatInputApplicationCommandsJSONBody; } /** * The base application command option builder that contains common symbols for application