mirror of
https://github.com/discordjs/discord.js.git
synced 2026-06-02 09:00:07 +00:00
* feat(builders): components v2 in builders v1 * feat: implemented the first components * fix: tests * fix: tests * fix: export the new stuff * feat: add rest of components * feat: add callback syntax * feat: callback syntax for section * fix: missing implements * fix: accessory property * fix: apply suggestions from v2 PR * chore: bring in line with builders v2 * fix: add missing type * chore: split accessory methods * chore: backport changes from v2 PR * fix: accent_color is nullish * fix: allow passing raw json to MediaGallery methods * fix: add test * chore: add Container#addXComponents * fix: docs * chore: bump discord-api-types * Update packages/builders/src/components/Assertions.ts Co-authored-by: Denis-Adrian Cristea <didinele.dev@gmail.com> --------- Co-authored-by: Denis-Adrian Cristea <didinele.dev@gmail.com>
64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';
|
|
import { ComponentBuilder } from '../Component';
|
|
import { filePredicate, spoilerPredicate } from './Assertions';
|
|
|
|
export class FileBuilder extends ComponentBuilder<APIFileComponent> {
|
|
/**
|
|
* Creates a new file from API data.
|
|
*
|
|
* @param data - The API data to create this file with
|
|
* @example
|
|
* Creating a file from an API data object:
|
|
* ```ts
|
|
* const file = new FileBuilder({
|
|
* spoiler: true,
|
|
* file: {
|
|
* url: 'attachment://file.png',
|
|
* },
|
|
* });
|
|
* ```
|
|
* @example
|
|
* Creating a file using setters and API data:
|
|
* ```ts
|
|
* const file = new FileBuilder({
|
|
* file: {
|
|
* url: 'attachment://image.jpg',
|
|
* },
|
|
* })
|
|
* .setSpoiler(false);
|
|
* ```
|
|
*/
|
|
public constructor(data: Partial<APIFileComponent> = {}) {
|
|
super({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });
|
|
}
|
|
|
|
/**
|
|
* Sets the spoiler status of this file.
|
|
*
|
|
* @param spoiler - The spoiler status to use
|
|
*/
|
|
public setSpoiler(spoiler = true) {
|
|
this.data.spoiler = spoilerPredicate.parse(spoiler);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the media URL of this file.
|
|
*
|
|
* @param url - The URL to use
|
|
*/
|
|
public setURL(url: string) {
|
|
this.data.file = filePredicate.parse({ url });
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc ComponentBuilder.toJSON}
|
|
*/
|
|
public override toJSON(): APIFileComponent {
|
|
filePredicate.parse(this.data.file);
|
|
|
|
return { ...this.data, file: { ...this.data.file } } as APIFileComponent;
|
|
}
|
|
}
|