mirror of
https://github.com/discordeno/discordeno.git
synced 2026-09-17 08:47:22 +00:00
feat(types,bot)!: Add desiredProperties for components (#4179)
- feat(bot): Add desiredProperties for components, as well as media gallery items and unfurled media items - fix(types)!: Rename the following types to match the newly updated discord docs: - InputText to TextInput - SelectMenu to StringSelect - SelectMenuUsers to UserSelect - SelectMenuRoles to RoleSelect - SelectMenuMentionable to MentionableSelect - SelectMenuChannels to ChannelSelect - Update some JSDOC comments to match the new discord docs Co-authored-by: Fleny <Fleny113@outlook.com>
This commit is contained in:
@@ -202,7 +202,7 @@ await memoryBenchmark(
|
||||
type: 1,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentTypes.InputText,
|
||||
type: MessageComponentTypes.TextInput,
|
||||
custom_id: 'discordeno',
|
||||
label: 'discordeno',
|
||||
max_length: 100,
|
||||
@@ -218,7 +218,7 @@ await memoryBenchmark(
|
||||
type: 1,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentTypes.SelectMenu,
|
||||
type: MessageComponentTypes.StringSelect,
|
||||
custom_id: 'discordeno',
|
||||
max_values: 100,
|
||||
min_values: 100,
|
||||
@@ -585,7 +585,7 @@ await memoryBenchmark(
|
||||
type: 1,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentTypes.InputText,
|
||||
type: MessageComponentTypes.TextInput,
|
||||
custom_id: 'discordeno',
|
||||
label: 'discordeno',
|
||||
max_length: 100,
|
||||
@@ -601,7 +601,7 @@ await memoryBenchmark(
|
||||
type: 1,
|
||||
components: [
|
||||
{
|
||||
type: MessageComponentTypes.SelectMenu,
|
||||
type: MessageComponentTypes.StringSelect,
|
||||
custom_id: 'discordeno',
|
||||
max_values: 100,
|
||||
min_values: 100,
|
||||
|
||||
@@ -7,6 +7,7 @@ import type {
|
||||
Attachment,
|
||||
AvatarDecorationData,
|
||||
Channel,
|
||||
Component,
|
||||
DefaultReactionEmoji,
|
||||
Emoji,
|
||||
Entitlement,
|
||||
@@ -24,6 +25,7 @@ import type {
|
||||
InviteStageInstance,
|
||||
Lobby,
|
||||
LobbyMember,
|
||||
MediaGalleryItem,
|
||||
Member,
|
||||
Message,
|
||||
MessageCall,
|
||||
@@ -44,6 +46,7 @@ import type {
|
||||
StageInstance,
|
||||
Sticker,
|
||||
Subscription,
|
||||
UnfurledMediaItem,
|
||||
User,
|
||||
VoiceState,
|
||||
Webhook,
|
||||
@@ -60,6 +63,7 @@ export interface TransformersObjects {
|
||||
attachment: Attachment
|
||||
avatarDecorationData: AvatarDecorationData
|
||||
channel: Channel
|
||||
component: Component
|
||||
defaultReactionEmoji: DefaultReactionEmoji
|
||||
emoji: Emoji
|
||||
entitlement: Entitlement
|
||||
@@ -75,6 +79,7 @@ export interface TransformersObjects {
|
||||
interactionResource: InteractionResource
|
||||
invite: Invite
|
||||
inviteStageInstance: InviteStageInstance
|
||||
mediaGalleryItem: MediaGalleryItem
|
||||
member: Member
|
||||
message: Message
|
||||
messageCall: MessageCall
|
||||
@@ -93,6 +98,7 @@ export interface TransformersObjects {
|
||||
sku: Sku
|
||||
stageInstance: StageInstance
|
||||
sticker: Sticker
|
||||
unfurledMediaItem: UnfurledMediaItem
|
||||
user: User
|
||||
voiceState: VoiceState
|
||||
webhook: Webhook
|
||||
@@ -280,6 +286,39 @@ export function createDesiredPropertiesObject<T extends RecursivePartial<Transfo
|
||||
threadMetadata: defaultValue,
|
||||
...desiredProperties.channel,
|
||||
},
|
||||
component: {
|
||||
type: defaultValue,
|
||||
customId: defaultValue,
|
||||
required: defaultValue,
|
||||
disabled: defaultValue,
|
||||
style: defaultValue,
|
||||
label: defaultValue,
|
||||
value: defaultValue,
|
||||
emoji: defaultValue,
|
||||
url: defaultValue,
|
||||
channelTypes: defaultValue,
|
||||
options: defaultValue,
|
||||
placeholder: defaultValue,
|
||||
minValues: defaultValue,
|
||||
maxValues: defaultValue,
|
||||
minLength: defaultValue,
|
||||
maxLength: defaultValue,
|
||||
components: defaultValue,
|
||||
defaultValues: defaultValue,
|
||||
skuId: defaultValue,
|
||||
id: defaultValue,
|
||||
accessory: defaultValue,
|
||||
content: defaultValue,
|
||||
description: defaultValue,
|
||||
spoiler: defaultValue,
|
||||
items: defaultValue,
|
||||
divider: defaultValue,
|
||||
spacing: defaultValue,
|
||||
file: defaultValue,
|
||||
media: defaultValue,
|
||||
accentColor: defaultValue,
|
||||
...desiredProperties.component,
|
||||
},
|
||||
forumTag: {
|
||||
emojiId: defaultValue,
|
||||
emojiName: defaultValue,
|
||||
@@ -571,6 +610,12 @@ export function createDesiredPropertiesObject<T extends RecursivePartial<Transfo
|
||||
topic: defaultValue,
|
||||
...desiredProperties.inviteStageInstance,
|
||||
},
|
||||
mediaGalleryItem: {
|
||||
media: defaultValue,
|
||||
description: defaultValue,
|
||||
spoiler: defaultValue,
|
||||
...desiredProperties.mediaGalleryItem,
|
||||
},
|
||||
sticker: {
|
||||
id: defaultValue,
|
||||
packId: defaultValue,
|
||||
@@ -585,6 +630,14 @@ export function createDesiredPropertiesObject<T extends RecursivePartial<Transfo
|
||||
sortValue: defaultValue,
|
||||
...desiredProperties.sticker,
|
||||
},
|
||||
unfurledMediaItem: {
|
||||
url: defaultValue,
|
||||
proxyUrl: defaultValue,
|
||||
height: defaultValue,
|
||||
width: defaultValue,
|
||||
contentType: defaultValue,
|
||||
...desiredProperties.unfurledMediaItem,
|
||||
},
|
||||
user: {
|
||||
username: defaultValue,
|
||||
globalName: defaultValue,
|
||||
|
||||
@@ -36,14 +36,14 @@ export function transformComponent(bot: Bot, payload: DiscordMessageComponent):
|
||||
case MessageComponentTypes.Container:
|
||||
component = transformContainerComponent(bot, payload)
|
||||
break
|
||||
case MessageComponentTypes.InputText:
|
||||
case MessageComponentTypes.TextInput:
|
||||
component = transformInputTextComponent(bot, payload)
|
||||
break
|
||||
case MessageComponentTypes.SelectMenu:
|
||||
case MessageComponentTypes.SelectMenuChannels:
|
||||
case MessageComponentTypes.SelectMenuRoles:
|
||||
case MessageComponentTypes.SelectMenuUsers:
|
||||
case MessageComponentTypes.SelectMenuUsersAndRoles:
|
||||
case MessageComponentTypes.StringSelect:
|
||||
case MessageComponentTypes.UserSelect:
|
||||
case MessageComponentTypes.RoleSelect:
|
||||
case MessageComponentTypes.MentionableSelect:
|
||||
case MessageComponentTypes.ChannelSelect:
|
||||
component = transformSelectMenuComponent(bot, payload)
|
||||
break
|
||||
case MessageComponentTypes.Section:
|
||||
@@ -59,8 +59,10 @@ export function transformComponent(bot: Bot, payload: DiscordMessageComponent):
|
||||
component = transformFileComponent(bot, payload)
|
||||
break
|
||||
case MessageComponentTypes.Separator:
|
||||
component = transformSeparatorComponent(bot, payload)
|
||||
break
|
||||
case MessageComponentTypes.TextDisplay:
|
||||
component = keepAsIs(bot, payload)
|
||||
component = transformTextDisplayComponent(bot, payload)
|
||||
break
|
||||
}
|
||||
|
||||
@@ -68,94 +70,106 @@ export function transformComponent(bot: Bot, payload: DiscordMessageComponent):
|
||||
}
|
||||
|
||||
export function transformUnfurledMediaItem(bot: Bot, payload: DiscordUnfurledMediaItem): UnfurledMediaItem {
|
||||
const mediaItem: UnfurledMediaItem = {
|
||||
url: payload.url,
|
||||
proxyUrl: payload.proxy_url,
|
||||
height: payload.height,
|
||||
width: payload.width,
|
||||
contentType: payload.content_type,
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.unfurledMediaItem
|
||||
const mediaItem = {} as UnfurledMediaItem
|
||||
|
||||
if (props.url && payload.url) mediaItem.url = payload.url
|
||||
if (props.proxyUrl && payload.proxy_url) mediaItem.proxyUrl = payload.proxy_url
|
||||
if (props.height && payload.height) mediaItem.height = payload.height
|
||||
if (props.width && payload.width) mediaItem.width = payload.width
|
||||
if (props.contentType && payload.content_type) mediaItem.contentType = payload.content_type
|
||||
|
||||
return bot.transformers.customizers.unfurledMediaItem(bot, payload, mediaItem)
|
||||
}
|
||||
|
||||
export function transformMediaGalleryItem(bot: Bot, payload: DiscordMediaGalleryItem): MediaGalleryItem {
|
||||
const mediaItem: MediaGalleryItem = {
|
||||
media: bot.transformers.unfurledMediaItem(bot, payload.media),
|
||||
description: payload.description,
|
||||
spoiler: payload.spoiler,
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.mediaGalleryItem
|
||||
const galleryItem = {} as MediaGalleryItem
|
||||
|
||||
return bot.transformers.customizers.mediaGalleryItem(bot, payload, mediaItem)
|
||||
if (props.media && payload.media) galleryItem.media = bot.transformers.unfurledMediaItem(bot, payload.media)
|
||||
if (props.description && payload.description) galleryItem.description = payload.description
|
||||
if (props.spoiler && payload.spoiler) galleryItem.spoiler = payload.spoiler
|
||||
|
||||
return bot.transformers.customizers.mediaGalleryItem(bot, payload, galleryItem)
|
||||
}
|
||||
|
||||
function transformActionRow(bot: Bot, payload: DiscordActionRow): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.ActionRow,
|
||||
id: payload.id,
|
||||
components: payload.components.map((component) => bot.transformers.component(bot, component)),
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const actionRow = {} as Component
|
||||
|
||||
if (props.type && payload.type) actionRow.type = payload.type
|
||||
if (props.id && payload.id) actionRow.id = payload.id
|
||||
if (props.components && payload.components) actionRow.components = payload.components.map((component) => bot.transformers.component(bot, component))
|
||||
|
||||
return actionRow
|
||||
}
|
||||
|
||||
function transformContainerComponent(bot: Bot, payload: DiscordContainerComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.Container,
|
||||
id: payload.id,
|
||||
accentColor: payload.accent_color ?? undefined,
|
||||
spoiler: payload.spoiler,
|
||||
components: payload.components.map((component) => bot.transformers.component(bot, component)),
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const container = {} as Component
|
||||
|
||||
if (props.type && payload.type) container.type = payload.type
|
||||
if (props.id && payload.id) container.id = payload.id
|
||||
if (props.accentColor && payload.accent_color) container.accentColor = payload.accent_color
|
||||
if (props.spoiler && payload.spoiler) container.spoiler = payload.spoiler
|
||||
if (props.components && payload.components) container.components = payload.components.map((component) => bot.transformers.component(bot, component))
|
||||
|
||||
return container
|
||||
}
|
||||
|
||||
function transformButtonComponent(bot: Bot, payload: DiscordButtonComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.Button,
|
||||
id: payload.id,
|
||||
label: payload.label,
|
||||
customId: payload.custom_id,
|
||||
style: payload.style,
|
||||
emoji: payload.emoji
|
||||
? {
|
||||
id: payload.emoji.id ? bot.transformers.snowflake(payload.emoji.id) : undefined,
|
||||
name: payload.emoji.name,
|
||||
animated: payload.emoji.animated,
|
||||
}
|
||||
: undefined,
|
||||
url: payload.url,
|
||||
disabled: payload.disabled,
|
||||
skuId: payload.sku_id ? bot.transformers.snowflake(payload.sku_id) : undefined,
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const button = {} as Component
|
||||
|
||||
if (props.type && payload.type) button.type = payload.type
|
||||
if (props.id && payload.id) button.id = payload.id
|
||||
if (props.label && payload.label) button.label = payload.label
|
||||
if (props.customId && payload.custom_id) button.customId = payload.custom_id
|
||||
if (props.style && payload.style) button.style = payload.style
|
||||
if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji)
|
||||
if (props.url && payload.url) button.url = payload.url
|
||||
if (props.disabled && payload.disabled) button.disabled = payload.disabled
|
||||
if (props.skuId && payload.sku_id) button.skuId = bot.transformers.snowflake(payload.sku_id)
|
||||
|
||||
return button
|
||||
}
|
||||
|
||||
function transformInputTextComponent(_bot: Bot, payload: DiscordTextInputComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.InputText,
|
||||
id: payload.id,
|
||||
style: payload.style,
|
||||
required: payload.required,
|
||||
customId: payload.custom_id,
|
||||
label: payload.label,
|
||||
placeholder: payload.placeholder,
|
||||
minLength: payload.min_length,
|
||||
maxLength: payload.max_length,
|
||||
value: payload.value,
|
||||
}
|
||||
function transformInputTextComponent(bot: Bot, payload: DiscordTextInputComponent): Component {
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const input = {} as Component
|
||||
|
||||
if (props.type && payload.type) input.type = payload.type
|
||||
if (props.id && payload.id) input.id = payload.id
|
||||
if (props.style && payload.style) input.style = payload.style
|
||||
if (props.required && payload.required) input.required = payload.required
|
||||
if (props.customId && payload.custom_id) input.customId = payload.custom_id
|
||||
if (props.label && payload.label) input.label = payload.label
|
||||
if (props.placeholder && payload.placeholder) input.placeholder = payload.placeholder
|
||||
if (props.minLength && payload.min_length) input.minLength = payload.min_length
|
||||
if (props.maxLength && payload.max_length) input.maxLength = payload.max_length
|
||||
if (props.value && payload.value) input.value = payload.value
|
||||
|
||||
return input
|
||||
}
|
||||
|
||||
function transformSelectMenuComponent(bot: Bot, payload: DiscordSelectMenuComponent): Component {
|
||||
return {
|
||||
type: payload.type,
|
||||
id: payload.id,
|
||||
customId: payload.custom_id,
|
||||
placeholder: payload.placeholder,
|
||||
minValues: payload.min_values,
|
||||
maxValues: payload.max_values,
|
||||
defaultValues: payload.default_values?.map((defaultValue) => ({
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const select = {} as Component
|
||||
|
||||
if (props.type && payload.type) select.type = payload.type
|
||||
if (props.id && payload.id) select.id = payload.id
|
||||
if (props.customId && payload.custom_id) select.customId = payload.custom_id
|
||||
if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder
|
||||
if (props.minValues && payload.min_values) select.minValues = payload.min_values
|
||||
if (props.maxValues && payload.max_values) select.maxValues = payload.max_values
|
||||
if (props.defaultValues && payload.default_values)
|
||||
select.defaultValues = payload.default_values.map((defaultValue) => ({
|
||||
id: bot.transformers.snowflake(defaultValue.id),
|
||||
type: defaultValue.type,
|
||||
})),
|
||||
channelTypes: payload.channel_types,
|
||||
options: payload.options?.map((option) => ({
|
||||
}))
|
||||
if (props.channelTypes && payload.channel_types) select.channelTypes = payload.channel_types
|
||||
if (props.options && payload.options)
|
||||
select.options = payload.options.map((option) => ({
|
||||
label: option.label,
|
||||
value: option.value,
|
||||
description: option.description,
|
||||
@@ -167,47 +181,79 @@ function transformSelectMenuComponent(bot: Bot, payload: DiscordSelectMenuCompon
|
||||
}
|
||||
: undefined,
|
||||
default: option.default,
|
||||
})),
|
||||
disabled: payload.disabled,
|
||||
}
|
||||
}))
|
||||
if (props.disabled && payload.disabled) select.disabled = payload.disabled
|
||||
|
||||
return select
|
||||
}
|
||||
|
||||
function transformSectionComponent(bot: Bot, payload: DiscordSectionComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.Section,
|
||||
id: payload.id,
|
||||
components: payload.components.map((component) => bot.transformers.component(bot, component)),
|
||||
accessory: bot.transformers.component(bot, payload.accessory),
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const section = {} as Component
|
||||
|
||||
if (props.type && payload.type) section.type = payload.type
|
||||
if (props.id && payload.id) section.id = payload.id
|
||||
if (props.components && payload.components) section.components = payload.components.map((component) => bot.transformers.component(bot, component))
|
||||
if (props.accessory && payload.accessory) section.accessory = bot.transformers.component(bot, payload.accessory)
|
||||
|
||||
return section
|
||||
}
|
||||
|
||||
function transformThumbnailComponent(bot: Bot, payload: DiscordThumbnailComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.Thumbnail,
|
||||
id: payload.id,
|
||||
media: bot.transformers.unfurledMediaItem(bot, payload.media),
|
||||
description: payload.description,
|
||||
spoiler: payload.spoiler,
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const thumbnail = {} as Component
|
||||
|
||||
if (props.type && payload.type) thumbnail.type = payload.type
|
||||
if (props.id && payload.id) thumbnail.id = payload.id
|
||||
if (props.media && payload.media) thumbnail.media = bot.transformers.unfurledMediaItem(bot, payload.media)
|
||||
if (props.description && payload.description) thumbnail.description = payload.description
|
||||
if (props.spoiler && payload.spoiler) thumbnail.spoiler = payload.spoiler
|
||||
|
||||
return thumbnail
|
||||
}
|
||||
|
||||
function transformMediaGalleryComponent(bot: Bot, payload: DiscordMediaGalleryComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.MediaGallery,
|
||||
id: payload.id,
|
||||
items: payload.items.map((media) => bot.transformers.mediaGalleryItem(bot, media)),
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const mediaGallery = {} as Component
|
||||
|
||||
if (props.type && payload.type) mediaGallery.type = payload.type
|
||||
if (props.id && payload.id) mediaGallery.id = payload.id
|
||||
if (props.items && payload.items) mediaGallery.items = payload.items.map((item) => bot.transformers.mediaGalleryItem(bot, item))
|
||||
|
||||
return mediaGallery
|
||||
}
|
||||
|
||||
function transformFileComponent(bot: Bot, payload: DiscordFileComponent): Component {
|
||||
return {
|
||||
type: MessageComponentTypes.File,
|
||||
id: payload.id,
|
||||
file: bot.transformers.unfurledMediaItem(bot, payload.file),
|
||||
spoiler: payload.spoiler,
|
||||
}
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const file = {} as Component
|
||||
|
||||
if (props.type && payload.type) file.type = payload.type
|
||||
if (props.id && payload.id) file.id = payload.id
|
||||
if (props.file && payload.file) file.file = bot.transformers.unfurledMediaItem(bot, payload.file)
|
||||
if (props.spoiler && payload.spoiler) file.spoiler = payload.spoiler
|
||||
|
||||
return file
|
||||
}
|
||||
|
||||
function keepAsIs(_bot: Bot, payload: DiscordTextDisplayComponent | DiscordSeparatorComponent): Component {
|
||||
return payload
|
||||
function transformTextDisplayComponent(bot: Bot, payload: DiscordTextDisplayComponent): Component {
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const textDisplay = {} as Component
|
||||
|
||||
if (props.type && payload.type) textDisplay.type = payload.type
|
||||
if (props.id && payload.id) textDisplay.id = payload.id
|
||||
if (props.content && payload.content) textDisplay.content = payload.content
|
||||
|
||||
return textDisplay
|
||||
}
|
||||
|
||||
function transformSeparatorComponent(bot: Bot, payload: DiscordSeparatorComponent): Component {
|
||||
const props = bot.transformers.desiredProperties.component
|
||||
const separator = {} as Component
|
||||
|
||||
if (props.type && payload.type) separator.type = payload.type
|
||||
if (props.id && payload.id) separator.id = payload.id
|
||||
if (props.divider && payload.divider) separator.divider = payload.divider
|
||||
if (props.spacing && payload.spacing) separator.spacing = payload.spacing
|
||||
|
||||
return separator
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ export function transformComponentToDiscordComponent(bot: Bot, payload: Componen
|
||||
return transformButtonComponent(bot, payload)
|
||||
case MessageComponentTypes.Container:
|
||||
return transformContainerComponent(bot, payload)
|
||||
case MessageComponentTypes.InputText:
|
||||
case MessageComponentTypes.TextInput:
|
||||
return transformInputTextComponent(bot, payload)
|
||||
case MessageComponentTypes.SelectMenu:
|
||||
case MessageComponentTypes.SelectMenuChannels:
|
||||
case MessageComponentTypes.SelectMenuRoles:
|
||||
case MessageComponentTypes.SelectMenuUsers:
|
||||
case MessageComponentTypes.SelectMenuUsersAndRoles:
|
||||
case MessageComponentTypes.StringSelect:
|
||||
case MessageComponentTypes.ChannelSelect:
|
||||
case MessageComponentTypes.RoleSelect:
|
||||
case MessageComponentTypes.UserSelect:
|
||||
case MessageComponentTypes.MentionableSelect:
|
||||
return transformSelectMenuComponent(bot, payload)
|
||||
case MessageComponentTypes.Section:
|
||||
return transformSectionComponent(bot, payload)
|
||||
@@ -112,7 +112,7 @@ function transformButtonComponent(bot: Bot, payload: Component): DiscordButtonCo
|
||||
function transformInputTextComponent(_bot: Bot, payload: Component): DiscordTextInputComponent {
|
||||
// Since Component is a merge of all components, some casts are necessary
|
||||
return {
|
||||
type: MessageComponentTypes.InputText,
|
||||
type: MessageComponentTypes.TextInput,
|
||||
id: payload.id,
|
||||
style: payload.style as TextStyles,
|
||||
custom_id: payload.customId!,
|
||||
|
||||
@@ -9,17 +9,17 @@ export enum MessageComponentTypes {
|
||||
/** A button object */
|
||||
Button,
|
||||
/** A select menu for picking from choices */
|
||||
SelectMenu,
|
||||
StringSelect,
|
||||
/** A text input object */
|
||||
InputText,
|
||||
TextInput,
|
||||
/** Select menu for users */
|
||||
SelectMenuUsers,
|
||||
UserSelect,
|
||||
/** Select menu for roles */
|
||||
SelectMenuRoles,
|
||||
RoleSelect,
|
||||
/** Select menu for users and roles */
|
||||
SelectMenuUsersAndRoles,
|
||||
MentionableSelect,
|
||||
/** Select menu for channels */
|
||||
SelectMenuChannels,
|
||||
ChannelSelect,
|
||||
/** Container to display text alongside an accessory component */
|
||||
Section,
|
||||
/** Markdown text */
|
||||
@@ -149,11 +149,11 @@ export enum ButtonStyles {
|
||||
*/
|
||||
export interface DiscordSelectMenuComponent extends DiscordBaseComponent {
|
||||
type:
|
||||
| MessageComponentTypes.SelectMenu
|
||||
| MessageComponentTypes.SelectMenuUsers
|
||||
| MessageComponentTypes.SelectMenuRoles
|
||||
| MessageComponentTypes.SelectMenuUsersAndRoles
|
||||
| MessageComponentTypes.SelectMenuChannels
|
||||
| MessageComponentTypes.StringSelect
|
||||
| MessageComponentTypes.UserSelect
|
||||
| MessageComponentTypes.RoleSelect
|
||||
| MessageComponentTypes.MentionableSelect
|
||||
| MessageComponentTypes.ChannelSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
custom_id: string
|
||||
@@ -205,7 +205,7 @@ export interface DiscordSelectOption {
|
||||
|
||||
/** https://discord.com/developers/docs/components/reference#text-input-text-input-structure */
|
||||
export interface DiscordTextInputComponent extends DiscordBaseComponent {
|
||||
type: MessageComponentTypes.InputText
|
||||
type: MessageComponentTypes.TextInput
|
||||
|
||||
/** The customId of the InputText */
|
||||
custom_id: string
|
||||
|
||||
@@ -114,12 +114,12 @@ export type MessageComponents = MessageComponent[]
|
||||
export type MessageComponent =
|
||||
| ActionRow
|
||||
| ButtonComponent
|
||||
| InputTextComponent
|
||||
| SelectMenuComponent
|
||||
| SelectMenuChannelsComponent
|
||||
| SelectMenuRolesComponent
|
||||
| SelectMenuUsersComponent
|
||||
| SelectMenuUsersAndRolesComponent
|
||||
| TextInputComponent
|
||||
| StringSelectComponent
|
||||
| ChannelSelectComponent
|
||||
| RoleSelectComponent
|
||||
| UserSelectComponent
|
||||
| MentionableSelectComponent
|
||||
| SectionComponent
|
||||
| TextDisplayComponent
|
||||
| ThumbnailComponent
|
||||
@@ -136,20 +136,28 @@ export interface BaseComponent {
|
||||
id?: number
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/interactions/message-components#actionrow */
|
||||
/** https://discord.com/developers/docs/components/reference#action-row-action-row-structure */
|
||||
export interface ActionRow extends BaseComponent {
|
||||
type: MessageComponentTypes.ActionRow
|
||||
|
||||
/** The components in this row */
|
||||
components:
|
||||
| [Exclude<MessageComponent, ActionRow>]
|
||||
| [ButtonComponent, ButtonComponent]
|
||||
| [ButtonComponent, ButtonComponent, ButtonComponent]
|
||||
| [ButtonComponent, ButtonComponent, ButtonComponent, ButtonComponent]
|
||||
| [ButtonComponent, ButtonComponent, ButtonComponent, ButtonComponent, ButtonComponent]
|
||||
/**
|
||||
* The components in this row
|
||||
*
|
||||
* @remarks
|
||||
* Up to 5 button components, a single select component or a single text input component
|
||||
*/
|
||||
components: (
|
||||
| ButtonComponent
|
||||
| StringSelectComponent
|
||||
| UserSelectComponent
|
||||
| RoleSelectComponent
|
||||
| MentionableSelectComponent
|
||||
| ChannelSelectComponent
|
||||
| TextInputComponent
|
||||
)[]
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/interactions/message-components#button-object-button-structure */
|
||||
/** https://discord.com/developers/docs/components/reference#button-button-structure */
|
||||
export interface ButtonComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.Button
|
||||
|
||||
@@ -176,9 +184,9 @@ export interface ButtonComponent extends BaseComponent {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-menu-structure */
|
||||
export interface SelectMenuComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.SelectMenu
|
||||
/** https://discord.com/developers/docs/components/reference#string-select-string-select-structure */
|
||||
export interface StringSelectComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.StringSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
customId: string
|
||||
@@ -194,8 +202,9 @@ export interface SelectMenuComponent extends BaseComponent {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
export interface SelectMenuUsersComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.SelectMenuUsers
|
||||
/** https://discord.com/developers/docs/components/reference#user-select-user-select-structure */
|
||||
export interface UserSelectComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.UserSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
customId: string
|
||||
@@ -214,8 +223,9 @@ export interface SelectMenuUsersComponent extends BaseComponent {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
export interface SelectMenuRolesComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.SelectMenuRoles
|
||||
/** https://discord.com/developers/docs/components/reference#role-select-role-select-structure */
|
||||
export interface RoleSelectComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.RoleSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
customId: string
|
||||
@@ -234,8 +244,9 @@ export interface SelectMenuRolesComponent extends BaseComponent {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
export interface SelectMenuUsersAndRolesComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.SelectMenuUsersAndRoles
|
||||
/** https://discord.com/developers/docs/components/reference#mentionable-select-mentionable-select-structure */
|
||||
export interface MentionableSelectComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.MentionableSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
customId: string
|
||||
@@ -254,8 +265,9 @@ export interface SelectMenuUsersAndRolesComponent extends BaseComponent {
|
||||
disabled?: boolean
|
||||
}
|
||||
|
||||
export interface SelectMenuChannelsComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.SelectMenuChannels
|
||||
/** https://discord.com/developers/docs/components/reference#channel-select-channel-select-structure */
|
||||
export interface ChannelSelectComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.ChannelSelect
|
||||
|
||||
/** A custom identifier for this component. Maximum 100 characters. */
|
||||
customId: string
|
||||
@@ -303,9 +315,9 @@ export interface SelectMenuDefaultValue {
|
||||
type: 'user' | 'role' | 'channel'
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-structure */
|
||||
export interface InputTextComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.InputText
|
||||
/** https://discord.com/developers/docs/components/reference#text-input-text-input-structure */
|
||||
export interface TextInputComponent extends BaseComponent {
|
||||
type: MessageComponentTypes.TextInput
|
||||
|
||||
/** The style of the InputText */
|
||||
style: TextStyles
|
||||
|
||||
Reference in New Issue
Block a user