mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-19 21:13:30 +01:00
refactor: allow builders to accept emoji strings (#7616)
* refactor: allow emoji strings in button builder * refactor: add emoji string support for select menu options * fix: export select menu option * chore: make requested changes * Update packages/discord.js/typings/index.test-d.ts Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com> Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
This commit is contained in:
@@ -43,8 +43,8 @@ export class UnsafeSelectMenuOptionBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the emoji to display on this button
|
* Sets the emoji to display on this option
|
||||||
* @param emoji The emoji to display on this button
|
* @param emoji The emoji to display on this option
|
||||||
*/
|
*/
|
||||||
public setEmoji(emoji: APIMessageComponentEmoji) {
|
public setEmoji(emoji: APIMessageComponentEmoji) {
|
||||||
this.data.emoji = emoji;
|
this.data.emoji = emoji;
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ exports.Role = require('./structures/Role').Role;
|
|||||||
exports.SelectMenuBuilder = require('./structures/SelectMenuBuilder');
|
exports.SelectMenuBuilder = require('./structures/SelectMenuBuilder');
|
||||||
exports.SelectMenuComponent = require('./structures/SelectMenuComponent');
|
exports.SelectMenuComponent = require('./structures/SelectMenuComponent');
|
||||||
exports.SelectMenuInteraction = require('./structures/SelectMenuInteraction');
|
exports.SelectMenuInteraction = require('./structures/SelectMenuInteraction');
|
||||||
|
exports.SelectMenuOptionBuilder = require('./structures/SelectMenuOptionBuilder');
|
||||||
exports.StageChannel = require('./structures/StageChannel');
|
exports.StageChannel = require('./structures/StageChannel');
|
||||||
exports.StageInstance = require('./structures/StageInstance').StageInstance;
|
exports.StageInstance = require('./structures/StageInstance').StageInstance;
|
||||||
exports.Sticker = require('./structures/Sticker').Sticker;
|
exports.Sticker = require('./structures/Sticker').Sticker;
|
||||||
@@ -208,7 +209,6 @@ exports.UserFlags = require('discord-api-types/v10').UserFlags;
|
|||||||
exports.WebhookType = require('discord-api-types/v10').WebhookType;
|
exports.WebhookType = require('discord-api-types/v10').WebhookType;
|
||||||
exports.UnsafeButtonBuilder = require('@discordjs/builders').UnsafeButtonBuilder;
|
exports.UnsafeButtonBuilder = require('@discordjs/builders').UnsafeButtonBuilder;
|
||||||
exports.UnsafeSelectMenuBuilder = require('@discordjs/builders').UnsafeSelectMenuBuilder;
|
exports.UnsafeSelectMenuBuilder = require('@discordjs/builders').UnsafeSelectMenuBuilder;
|
||||||
exports.SelectMenuOptionBuilder = require('@discordjs/builders').SelectMenuOptionBuilder;
|
|
||||||
exports.UnsafeSelectMenuOptionBuilder = require('@discordjs/builders').UnsafeSelectMenuOptionBuilder;
|
exports.UnsafeSelectMenuOptionBuilder = require('@discordjs/builders').UnsafeSelectMenuOptionBuilder;
|
||||||
exports.DiscordAPIError = require('@discordjs/rest').DiscordAPIError;
|
exports.DiscordAPIError = require('@discordjs/rest').DiscordAPIError;
|
||||||
exports.HTTPError = require('@discordjs/rest').HTTPError;
|
exports.HTTPError = require('@discordjs/rest').HTTPError;
|
||||||
|
|||||||
@@ -2,12 +2,25 @@
|
|||||||
|
|
||||||
const { ButtonBuilder: BuildersButtonComponent, isJSONEncodable } = require('@discordjs/builders');
|
const { ButtonBuilder: BuildersButtonComponent, isJSONEncodable } = require('@discordjs/builders');
|
||||||
const Transformers = require('../util/Transformers');
|
const Transformers = require('../util/Transformers');
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
class ButtonBuilder extends BuildersButtonComponent {
|
class ButtonBuilder extends BuildersButtonComponent {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
super(Transformers.toSnakeCase(data));
|
super(Transformers.toSnakeCase(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the emoji to display on this button
|
||||||
|
* @param {string|APIMessageComponentEmoji} emoji The emoji to display on this button
|
||||||
|
* @returns {ButtonComponent}
|
||||||
|
*/
|
||||||
|
setEmoji(emoji) {
|
||||||
|
if (typeof emoji === 'string') {
|
||||||
|
return super.setEmoji(Util.parseEmoji(emoji));
|
||||||
|
}
|
||||||
|
return super.setEmoji(emoji);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new button builder from json data
|
* Creates a new button builder from json data
|
||||||
* @param {JSONEncodable<APIButtonComponent> | APIButtonComponent} other The other data
|
* @param {JSONEncodable<APIButtonComponent> | APIButtonComponent} other The other data
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { SelectMenuOptionBuilder: BuildersSelectMenuOption } = require('@discordjs/builders');
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a select menu option
|
||||||
|
*/
|
||||||
|
class SelectMenuOptionBuilder extends BuildersSelectMenuOption {
|
||||||
|
/**
|
||||||
|
* Sets the emoji to display on this option
|
||||||
|
* @param {ComponentEmojiResolvable} emoji The emoji to display on this option
|
||||||
|
* @returns {SelectMenuOptionBuilder}
|
||||||
|
*/
|
||||||
|
setEmoji(emoji) {
|
||||||
|
if (typeof emoji === 'string') {
|
||||||
|
return super.setEmoji(Util.parseEmoji(emoji));
|
||||||
|
}
|
||||||
|
return super.setEmoji(emoji);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = SelectMenuOptionBuilder;
|
||||||
@@ -57,6 +57,11 @@ const { ComponentType } = require('discord-api-types/v10');
|
|||||||
* @typedef {ActionRowData|ButtonComponentData|SelectMenuComponentData|TextInputComponentData} ComponentData
|
* @typedef {ActionRowData|ButtonComponentData|SelectMenuComponentData|TextInputComponentData} ComponentData
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any emoji data that can be used within a button
|
||||||
|
* @typedef {APIMessageComponentEmoji|string} ComponentEmojiResolvable
|
||||||
|
*/
|
||||||
|
|
||||||
class Components extends null {
|
class Components extends null {
|
||||||
/**
|
/**
|
||||||
* Transforms API data into a component
|
* Transforms API data into a component
|
||||||
|
|||||||
10
packages/discord.js/typings/index.d.ts
vendored
10
packages/discord.js/typings/index.d.ts
vendored
@@ -19,6 +19,7 @@ import {
|
|||||||
roleMention,
|
roleMention,
|
||||||
SelectMenuBuilder as BuilderSelectMenuComponent,
|
SelectMenuBuilder as BuilderSelectMenuComponent,
|
||||||
TextInputBuilder as BuilderTextInputComponent,
|
TextInputBuilder as BuilderTextInputComponent,
|
||||||
|
UnsafeSelectMenuOptionBuilder as BuildersSelectMenuOption,
|
||||||
spoiler,
|
spoiler,
|
||||||
strikethrough,
|
strikethrough,
|
||||||
time,
|
time,
|
||||||
@@ -539,9 +540,12 @@ export class ButtonComponent extends Component<APIButtonComponent> {
|
|||||||
public get url(): string | null;
|
public get url(): string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ComponentEmojiResolvable = APIMessageComponentEmoji | string;
|
||||||
|
|
||||||
export class ButtonBuilder extends BuilderButtonComponent {
|
export class ButtonBuilder extends BuilderButtonComponent {
|
||||||
public constructor(data?: ButtonComponentData | (Omit<APIButtonComponent, 'type'> & { type?: ComponentType.Button }));
|
public constructor(data?: ButtonComponentData | (Omit<APIButtonComponent, 'type'> & { type?: ComponentType.Button }));
|
||||||
public static from(other: JSONEncodable<APIButtonComponent> | APIButtonComponent): ButtonBuilder;
|
public static from(other: JSONEncodable<APIButtonComponent> | APIButtonComponent): ButtonBuilder;
|
||||||
|
public override setEmoji(emoji: ComponentEmojiResolvable): this;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SelectMenuBuilder extends BuilderSelectMenuComponent {
|
export class SelectMenuBuilder extends BuilderSelectMenuComponent {
|
||||||
@@ -551,6 +555,10 @@ export class SelectMenuBuilder extends BuilderSelectMenuComponent {
|
|||||||
public static from(other: JSONEncodable<APISelectMenuComponent> | APISelectMenuComponent): SelectMenuBuilder;
|
public static from(other: JSONEncodable<APISelectMenuComponent> | APISelectMenuComponent): SelectMenuBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SelectMenuOptionBuilder extends BuildersSelectMenuOption {
|
||||||
|
public setEmoji(emoji: ComponentEmojiResolvable): this;
|
||||||
|
}
|
||||||
|
|
||||||
export class TextInputBuilder extends BuilderTextInputComponent {
|
export class TextInputBuilder extends BuilderTextInputComponent {
|
||||||
public constructor(data?: TextInputComponentData | APITextInputComponent);
|
public constructor(data?: TextInputComponentData | APITextInputComponent);
|
||||||
public static from(other: JSONEncodable<APITextInputComponent> | APITextInputComponent): TextInputBuilder;
|
public static from(other: JSONEncodable<APITextInputComponent> | APITextInputComponent): TextInputBuilder;
|
||||||
@@ -5304,6 +5312,7 @@ export {
|
|||||||
ApplicationCommandPermissionType,
|
ApplicationCommandPermissionType,
|
||||||
APIEmbedField,
|
APIEmbedField,
|
||||||
APISelectMenuOption,
|
APISelectMenuOption,
|
||||||
|
APIMessageComponentEmoji,
|
||||||
AuditLogEvent,
|
AuditLogEvent,
|
||||||
ButtonStyle,
|
ButtonStyle,
|
||||||
ChannelType,
|
ChannelType,
|
||||||
@@ -5341,7 +5350,6 @@ export {
|
|||||||
export {
|
export {
|
||||||
UnsafeButtonBuilder,
|
UnsafeButtonBuilder,
|
||||||
UnsafeSelectMenuBuilder,
|
UnsafeSelectMenuBuilder,
|
||||||
SelectMenuOptionBuilder,
|
|
||||||
UnsafeSelectMenuOptionBuilder,
|
UnsafeSelectMenuOptionBuilder,
|
||||||
MessageActionRowComponentBuilder,
|
MessageActionRowComponentBuilder,
|
||||||
ModalActionRowComponentBuilder,
|
ModalActionRowComponentBuilder,
|
||||||
|
|||||||
@@ -1367,7 +1367,16 @@ new SelectMenuBuilder({
|
|||||||
|
|
||||||
new ButtonBuilder({
|
new ButtonBuilder({
|
||||||
style: ButtonStyle.Danger,
|
style: ButtonStyle.Danger,
|
||||||
});
|
})
|
||||||
|
.setEmoji('<a:foo:123>')
|
||||||
|
.setEmoji('<:foo:123>')
|
||||||
|
.setEmoji('foobar:123')
|
||||||
|
.setEmoji('😏')
|
||||||
|
.setEmoji({
|
||||||
|
name: 'test',
|
||||||
|
id: '123',
|
||||||
|
animated: false,
|
||||||
|
});
|
||||||
|
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
new EmbedBuilder().setColor('abc');
|
new EmbedBuilder().setColor('abc');
|
||||||
|
|||||||
Reference in New Issue
Block a user