mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-18 20:43:30 +01:00
fix: make sure action row builders create djs builders (#7945)
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { ActionRowBuilder: BuildersActionRow, ComponentBuilder } = require('@discordjs/builders');
|
const { ActionRowBuilder: BuildersActionRow, ComponentBuilder } = require('@discordjs/builders');
|
||||||
|
const Components = require('../util/Components');
|
||||||
const Transformers = require('../util/Transformers');
|
const Transformers = require('../util/Transformers');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,7 +12,7 @@ class ActionRowBuilder extends BuildersActionRow {
|
|||||||
constructor({ components, ...data } = {}) {
|
constructor({ components, ...data } = {}) {
|
||||||
super({
|
super({
|
||||||
...Transformers.toSnakeCase(data),
|
...Transformers.toSnakeCase(data),
|
||||||
components: components?.map(c => (c instanceof ComponentBuilder ? c : Transformers.toSnakeCase(c))),
|
components: components?.map(c => (c instanceof ComponentBuilder ? c : Components.createComponentBuilder(c))),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// This file contains the typedefs for camel-cased JSON data
|
// This file contains the typedefs for camel-cased JSON data
|
||||||
|
const { ComponentBuilder } = require('@discordjs/builders');
|
||||||
const { ComponentType } = require('discord-api-types/v10');
|
const { ComponentType } = require('discord-api-types/v10');
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} BaseComponentData
|
* @typedef {Object} BaseComponentData
|
||||||
@@ -90,13 +91,40 @@ class Components extends null {
|
|||||||
throw new Error(`Found unknown component type: ${data.type}`);
|
throw new Error(`Found unknown component type: ${data.type}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms API data into a component builder
|
||||||
|
* @param {APIMessageComponent|ComponentBuilder} data The data to create the component from
|
||||||
|
* @returns {ComponentBuilder}
|
||||||
|
*/
|
||||||
|
static createComponentBuilder(data) {
|
||||||
|
if (data instanceof ComponentBuilder) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (data.type) {
|
||||||
|
case ComponentType.ActionRow:
|
||||||
|
return new ActionRowBuilder(data);
|
||||||
|
case ComponentType.Button:
|
||||||
|
return new ButtonBuilder(data);
|
||||||
|
case ComponentType.SelectMenu:
|
||||||
|
return new SelectMenuBuilder(data);
|
||||||
|
case ComponentType.TextInput:
|
||||||
|
return new TextInputComponent(data);
|
||||||
|
default:
|
||||||
|
throw new Error(`Found unknown component type: ${data.type}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Components;
|
module.exports = Components;
|
||||||
|
|
||||||
const ActionRow = require('../structures/ActionRow');
|
const ActionRow = require('../structures/ActionRow');
|
||||||
|
const ActionRowBuilder = require('../structures/ActionRowBuilder');
|
||||||
|
const ButtonBuilder = require('../structures/ButtonBuilder');
|
||||||
const ButtonComponent = require('../structures/ButtonComponent');
|
const ButtonComponent = require('../structures/ButtonComponent');
|
||||||
const Component = require('../structures/Component');
|
const Component = require('../structures/Component');
|
||||||
|
const SelectMenuBuilder = require('../structures/SelectMenuBuilder');
|
||||||
const SelectMenuComponent = require('../structures/SelectMenuComponent');
|
const SelectMenuComponent = require('../structures/SelectMenuComponent');
|
||||||
const TextInputComponent = require('../structures/TextInputComponent');
|
const TextInputComponent = require('../structures/TextInputComponent');
|
||||||
|
|
||||||
|
|||||||
27
packages/discord.js/typings/index.d.ts
vendored
27
packages/discord.js/typings/index.d.ts
vendored
@@ -13,7 +13,6 @@ import {
|
|||||||
inlineCode,
|
inlineCode,
|
||||||
italic,
|
italic,
|
||||||
JSONEncodable,
|
JSONEncodable,
|
||||||
MappedComponentTypes,
|
|
||||||
quote,
|
quote,
|
||||||
roleMention,
|
roleMention,
|
||||||
SelectMenuBuilder as BuilderSelectMenuComponent,
|
SelectMenuBuilder as BuilderSelectMenuComponent,
|
||||||
@@ -29,6 +28,7 @@ import {
|
|||||||
ModalActionRowComponentBuilder,
|
ModalActionRowComponentBuilder,
|
||||||
ModalBuilder as BuildersModal,
|
ModalBuilder as BuildersModal,
|
||||||
AnyComponentBuilder,
|
AnyComponentBuilder,
|
||||||
|
ComponentBuilder,
|
||||||
} from '@discordjs/builders';
|
} from '@discordjs/builders';
|
||||||
import { Collection } from '@discordjs/collection';
|
import { Collection } from '@discordjs/collection';
|
||||||
import { BaseImageURLOptions, ImageURLOptions, RawFile, REST, RESTOptions } from '@discordjs/rest';
|
import { BaseImageURLOptions, ImageURLOptions, RawFile, REST, RESTOptions } from '@discordjs/rest';
|
||||||
@@ -2546,12 +2546,31 @@ export class Util extends null {
|
|||||||
): Promise<{ id: Snowflake; position: number }[]>;
|
): Promise<{ id: Snowflake; position: number }[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MappedComponentBuilderTypes {
|
||||||
|
[ComponentType.Button]: ButtonBuilder;
|
||||||
|
[ComponentType.SelectMenu]: SelectMenuBuilder;
|
||||||
|
[ComponentType.ActionRow]: ActionRowBuilder;
|
||||||
|
[ComponentType.TextInput]: TextInputBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MappedComponentTypes {
|
||||||
|
[ComponentType.Button]: ButtonComponent;
|
||||||
|
[ComponentType.SelectMenu]: SelectMenuComponent;
|
||||||
|
[ComponentType.ActionRow]: ActionRowComponent;
|
||||||
|
[ComponentType.TextInput]: TextInputComponent;
|
||||||
|
}
|
||||||
|
|
||||||
export class Components extends null {
|
export class Components extends null {
|
||||||
public static createComponentBuilder<T extends keyof MappedComponentTypes>(
|
public static createComponent<T extends keyof MappedComponentTypes>(
|
||||||
data: APIMessageComponent & { type: T },
|
data: APIMessageComponent & { type: T },
|
||||||
): MappedComponentTypes[T];
|
): MappedComponentTypes[T];
|
||||||
public static createComponentBuilder<C extends Component>(data: C): C;
|
public static createComponent<C extends Component>(data: C): C;
|
||||||
public static createComponentBuilder(data: APIMessageComponent | Component): Component;
|
public static createComponent(data: APIMessageComponent | Component): Component;
|
||||||
|
public static createComponentBuilder<T extends keyof MappedComponentBuilderTypes>(
|
||||||
|
data: APIMessageComponent & { type: T },
|
||||||
|
): MappedComponentBuilderTypes[T];
|
||||||
|
public static createComponentBuilder<C extends ComponentBuilder>(data: C): C;
|
||||||
|
public static createComponentBuilder(data: APIMessageComponent | ComponentBuilder): ComponentBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Formatters extends null {
|
export class Formatters extends null {
|
||||||
|
|||||||
Reference in New Issue
Block a user