mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 11:33:30 +01:00
revert: support for nested arrays of components, fix error handling (#6081)
This commit is contained in:
@@ -53,11 +53,10 @@ class BaseMessageComponent {
|
|||||||
* Constructs a MessageComponent based on the type of the incoming data
|
* Constructs a MessageComponent based on the type of the incoming data
|
||||||
* @param {MessageComponentOptions} data Data for a MessageComponent
|
* @param {MessageComponentOptions} data Data for a MessageComponent
|
||||||
* @param {Client|WebhookClient} [client] Client constructing this component
|
* @param {Client|WebhookClient} [client] Client constructing this component
|
||||||
* @param {boolean} [skipValidation=false] Whether or not to validate the component type
|
|
||||||
* @returns {?MessageComponent}
|
* @returns {?MessageComponent}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
static create(data, client, skipValidation = false) {
|
static create(data, client) {
|
||||||
let component;
|
let component;
|
||||||
let type = data.type;
|
let type = data.type;
|
||||||
|
|
||||||
@@ -66,7 +65,7 @@ class BaseMessageComponent {
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case MessageComponentTypes.ACTION_ROW: {
|
case MessageComponentTypes.ACTION_ROW: {
|
||||||
const MessageActionRow = require('./MessageActionRow');
|
const MessageActionRow = require('./MessageActionRow');
|
||||||
component = new MessageActionRow(data);
|
component = new MessageActionRow(data, client);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MessageComponentTypes.BUTTON: {
|
case MessageComponentTypes.BUTTON: {
|
||||||
@@ -82,7 +81,7 @@ class BaseMessageComponent {
|
|||||||
default:
|
default:
|
||||||
if (client) {
|
if (client) {
|
||||||
client.emit(Events.DEBUG, `[BaseMessageComponent] Received component with unknown type: ${data.type}`);
|
client.emit(Events.DEBUG, `[BaseMessageComponent] Received component with unknown type: ${data.type}`);
|
||||||
} else if (!skipValidation) {
|
} else {
|
||||||
throw new TypeError('INVALID_TYPE', 'data.type', 'valid MessageComponentType');
|
throw new TypeError('INVALID_TYPE', 'data.type', 'valid MessageComponentType');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -572,7 +572,7 @@ class Message extends Base {
|
|||||||
* @property {MessageAttachment[]} [attachments] An array of attachments to keep,
|
* @property {MessageAttachment[]} [attachments] An array of attachments to keep,
|
||||||
* all attachments will be kept if omitted
|
* all attachments will be kept if omitted
|
||||||
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] Files to add to the message
|
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] Files to add to the message
|
||||||
* @property {MessageActionRow[]|MessageActionRowOptions[]|MessageActionRowComponentResolvable[][]} [components]
|
* @property {MessageActionRow[]|MessageActionRowOptions[]} [components]
|
||||||
* Action rows containing interactive components for the message (buttons, select menus)
|
* Action rows containing interactive components for the message (buttons, select menus)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -37,15 +37,16 @@ class MessageActionRow extends BaseMessageComponent {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {MessageActionRow|MessageActionRowOptions} [data={}] MessageActionRow to clone or raw data
|
* @param {MessageActionRow|MessageActionRowOptions} [data={}] MessageActionRow to clone or raw data
|
||||||
|
* @param {Client} [client] The client constructing this MessageActionRow, if provided
|
||||||
*/
|
*/
|
||||||
constructor(data = {}) {
|
constructor(data = {}, client = null) {
|
||||||
super({ type: 'ACTION_ROW' });
|
super({ type: 'ACTION_ROW' });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The components in this action row
|
* The components in this action row
|
||||||
* @type {MessageActionRowComponent[]}
|
* @type {MessageActionRowComponent[]}
|
||||||
*/
|
*/
|
||||||
this.components = data.components?.map(c => BaseMessageComponent.create(c, null, true)) ?? [];
|
this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,7 +55,7 @@ class MessageActionRow extends BaseMessageComponent {
|
|||||||
* @returns {MessageActionRow}
|
* @returns {MessageActionRow}
|
||||||
*/
|
*/
|
||||||
addComponents(...components) {
|
addComponents(...components) {
|
||||||
this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c, null, true)));
|
this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,11 +67,7 @@ class MessageActionRow extends BaseMessageComponent {
|
|||||||
* @returns {MessageActionRow}
|
* @returns {MessageActionRow}
|
||||||
*/
|
*/
|
||||||
spliceComponents(index, deleteCount, ...components) {
|
spliceComponents(index, deleteCount, ...components) {
|
||||||
this.components.splice(
|
this.components.splice(index, deleteCount, ...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
|
||||||
index,
|
|
||||||
deleteCount,
|
|
||||||
...components.flat(Infinity).map(c => BaseMessageComponent.create(c, null, true)),
|
|
||||||
);
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
const BaseMessageComponent = require('./BaseMessageComponent');
|
const BaseMessageComponent = require('./BaseMessageComponent');
|
||||||
const MessageEmbed = require('./MessageEmbed');
|
const MessageEmbed = require('./MessageEmbed');
|
||||||
const { RangeError } = require('../errors');
|
const { RangeError } = require('../errors');
|
||||||
const { MessageComponentTypes } = require('../util/Constants');
|
|
||||||
const DataResolver = require('../util/DataResolver');
|
const DataResolver = require('../util/DataResolver');
|
||||||
const MessageFlags = require('../util/MessageFlags');
|
const MessageFlags = require('../util/MessageFlags');
|
||||||
const Util = require('../util/Util');
|
const Util = require('../util/Util');
|
||||||
@@ -138,11 +137,7 @@ class MessagePayload {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const components = this.options.components?.map(c =>
|
const components = this.options.components?.map(c => BaseMessageComponent.create(c).toJSON());
|
||||||
BaseMessageComponent.create(
|
|
||||||
Array.isArray(c) ? { type: MessageComponentTypes.ACTION_ROW, components: c } : c,
|
|
||||||
).toJSON(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let username;
|
let username;
|
||||||
let avatarURL;
|
let avatarURL;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class Webhook {
|
|||||||
* @property {string} [content] See {@link BaseMessageOptions#content}
|
* @property {string} [content] See {@link BaseMessageOptions#content}
|
||||||
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] See {@link BaseMessageOptions#files}
|
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] See {@link BaseMessageOptions#files}
|
||||||
* @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions}
|
* @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions}
|
||||||
* @property {MessageActionRow[]|MessageActionRowOptions[]|MessageActionRowComponentResolvable[][]} [components]
|
* @property {MessageActionRow[]|MessageActionRowOptions[]} [components]
|
||||||
* Action rows containing interactive components for the message (buttons, select menus)
|
* Action rows containing interactive components for the message (buttons, select menus)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class TextBasedChannel {
|
|||||||
* @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content
|
* @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content
|
||||||
* (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)
|
* (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details)
|
||||||
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] Files to send with the message
|
* @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] Files to send with the message
|
||||||
* @property {MessageActionRow[]|MessageActionRowOptions[]|MessageActionRowComponentResolvable[][]} [components]
|
* @property {MessageActionRow[]|MessageActionRowOptions[]} [components]
|
||||||
* Action rows containing interactive components for the message (buttons, select menus)
|
* Action rows containing interactive components for the message (buttons, select menus)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
4
typings/index.d.ts
vendored
4
typings/index.d.ts
vendored
@@ -3519,7 +3519,7 @@ export interface MessageEditOptions {
|
|||||||
files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[];
|
files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[];
|
||||||
flags?: BitFieldResolvable<MessageFlagsString, number>;
|
flags?: BitFieldResolvable<MessageFlagsString, number>;
|
||||||
allowedMentions?: MessageMentionOptions;
|
allowedMentions?: MessageMentionOptions;
|
||||||
components?: (MessageActionRow | MessageActionRowOptions | MessageActionRowComponentResolvable[])[];
|
components?: (MessageActionRow | MessageActionRowOptions)[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MessageEmbedAuthor {
|
export interface MessageEmbedAuthor {
|
||||||
@@ -3618,7 +3618,7 @@ export interface MessageOptions {
|
|||||||
nonce?: string | number;
|
nonce?: string | number;
|
||||||
content?: string | null;
|
content?: string | null;
|
||||||
embeds?: (MessageEmbed | MessageEmbedOptions)[];
|
embeds?: (MessageEmbed | MessageEmbedOptions)[];
|
||||||
components?: (MessageActionRow | MessageActionRowOptions | MessageActionRowComponentResolvable[])[];
|
components?: (MessageActionRow | MessageActionRowOptions)[];
|
||||||
allowedMentions?: MessageMentionOptions;
|
allowedMentions?: MessageMentionOptions;
|
||||||
files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[];
|
files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[];
|
||||||
reply?: ReplyOptions;
|
reply?: ReplyOptions;
|
||||||
|
|||||||
@@ -434,6 +434,7 @@ client.on('interaction', async interaction => {
|
|||||||
|
|
||||||
await interaction.reply({ content: 'Hi!', components: [actionRow] });
|
await interaction.reply({ content: 'Hi!', components: [actionRow] });
|
||||||
|
|
||||||
|
// @ts-expect-error
|
||||||
await interaction.reply({ content: 'Hi!', components: [[button]] });
|
await interaction.reply({ content: 'Hi!', components: [[button]] });
|
||||||
|
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
|
|||||||
Reference in New Issue
Block a user