diff --git a/packages/discord.js/src/structures/SelectMenuBuilder.js b/packages/discord.js/src/structures/SelectMenuBuilder.js index 0e6656ccb..be4468c2d 100644 --- a/packages/discord.js/src/structures/SelectMenuBuilder.js +++ b/packages/discord.js/src/structures/SelectMenuBuilder.js @@ -21,18 +21,31 @@ class SelectMenuBuilder extends BuildersSelectMenu { ); } + /** + * Normalizes a select menu option emoji + * @param {SelectMenuOptionData|JSONEncodable} selectMenuOption The option to normalize + * @returns {Array} + * @private + */ + static normalizeEmoji(selectMenuOption) { + if (isJSONEncodable(selectMenuOption)) { + return selectMenuOption; + } + + const { emoji, ...option } = selectMenuOption; + return { + ...option, + emoji: typeof emoji === 'string' ? parseEmoji(emoji) : emoji, + }; + } + /** * Adds options to this select menu * @param {RestOrArray} options The options to add to this select menu * @returns {SelectMenuBuilder} */ addOptions(...options) { - return super.addOptions( - normalizeArray(options).map(({ emoji, ...option }) => ({ - ...option, - emoji: emoji && typeof emoji === 'string' ? parseEmoji(emoji) : emoji, - })), - ); + return super.addOptions(normalizeArray(options).map(option => SelectMenuBuilder.normalizeEmoji(option))); } /** @@ -41,12 +54,7 @@ class SelectMenuBuilder extends BuildersSelectMenu { * @returns {SelectMenuBuilder} */ setOptions(...options) { - return super.setOptions( - normalizeArray(options).map(({ emoji, ...option }) => ({ - ...option, - emoji: emoji && typeof emoji === 'string' ? parseEmoji(emoji) : emoji, - })), - ); + return super.setOptions(normalizeArray(options).map(option => SelectMenuBuilder.normalizeEmoji(option))); } /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 210d00c77..d344e9eee 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -616,6 +616,9 @@ export class ButtonBuilder extends BuilderButtonComponent { export class SelectMenuBuilder extends BuilderSelectMenuComponent { public constructor(data?: Partial); + private static normalizeEmoji( + selectMenuOption: JSONEncodable | SelectMenuComponentOptionData, + ): (APISelectMenuOption | SelectMenuOptionBuilder)[]; public override addOptions( ...options: RestOrArray ): this;