@discordjs/builders provides several assertion modules that expose validation functions for different types of builders. These modules allow you to validate data before passing it to builders or to perform custom validation in your applications.
Validation functions for embed components and data.
namespace EmbedAssertions {
function validateFieldLength(fields: APIEmbedField[], amountAdding?: number): void;
function validateColor(color: RGBTuple | number | null): void;
function validateDescription(description: string | null): void;
function validateTitle(title: string | null): void;
function validateURL(url: string | null): void;
function validateTimestamp(timestamp: Date | number | null): void;
function validateEmbedAuthor(author: EmbedAuthorOptions | null): void;
function validateEmbedFooter(footer: EmbedFooterOptions | null): void;
function validateImageURL(url: string | null): void;
function validateEmbedFieldsArray(fields: APIEmbedField[]): void;
}Usage Example:
import { EmbedAssertions } from "@discordjs/builders";
// Validate embed color before using
try {
EmbedAssertions.validateColor(0xFF0000);
console.log("Color is valid");
} catch (error) {
console.error("Invalid color:", error.message);
}
// Validate embed title length
try {
EmbedAssertions.validateTitle("My Embed Title");
} catch (error) {
console.error("Title validation failed:", error.message);
}Validation functions for message components.
namespace ComponentAssertions {
function validateButtonLabel(label?: string): void;
function validateButtonStyle(style: ButtonStyle): void;
function validateCustomId(customId: string): void;
function validateDisabled(disabled?: boolean): void;
function validateEmoji(emoji: APIMessageComponentEmoji): void;
function validateURL(url: string): void;
function validateRequiredButtonParameters(
style?: ButtonStyle,
label?: string,
emoji?: APIMessageComponentEmoji,
customId?: string,
skuId?: Snowflake,
url?: string
): void;
}Validation functions for text input components.
namespace TextInputAssertions {
function validateCustomId(customId: string): void;
function validateLabel(label: string): void;
function validateStyle(style: TextInputStyle): void;
function validateMinLength(minLength?: number): void;
function validateMaxLength(maxLength?: number): void;
function validatePlaceholder(placeholder?: string): void;
function validateValue(value?: string): void;
function validateRequired(required?: boolean): void;
function validateRequiredParameters(
customId?: string,
label?: string,
style?: TextInputStyle
): void;
}Validation functions for modal components.
namespace ModalAssertions {
function validateTitle(title: string): void;
function validateCustomId(customId: string): void;
function validateComponents(
components: ActionRowBuilder<ModalActionRowComponentBuilder>[]
): void;
function validateRequiredParameters(
customId?: string,
title?: string,
components?: ActionRowBuilder<ModalActionRowComponentBuilder>[]
): void;
}Validation functions for slash commands and their options.
namespace SlashCommandAssertions {
function validateName(name: string): void;
function validateDescription(description: string): void;
function validateLocale(locale: LocaleString): LocaleString;
function validateMaxOptionsLength(options: unknown[]): void;
function validateRequiredParameters(
name?: string,
description?: string,
options?: unknown[]
): void;
function validateDefaultPermission(value?: boolean): void;
function validateRequired(required?: boolean): void;
function validateChoicesLength(choices?: unknown[]): void;
function validateAmountOfSelectMenuOptions(options?: unknown[]): void;
function assertReturnOfBuilder<T>(
input: unknown,
ExpectedInstanceOf: new () => T
): asserts input is T;
}Validation functions for context menu commands.
namespace ContextMenuCommandAssertions {
function validateName(name: string): void;
function validateType(type: ContextMenuCommandType): void;
function validateDefaultPermission(value?: boolean): void;
function validateRequiredParameters(
name?: string,
type?: ContextMenuCommandType
): void;
}Validation functions for Discord Components v2.
namespace ComponentsV2Assertions {
function validateContainerData(data: unknown): boolean;
function validateFileData(data: unknown): boolean;
function validateMediaGalleryData(data: unknown): boolean;
function validateSectionData(data: unknown): boolean;
function validateSeparatorData(data: unknown): boolean;
function validateTextDisplayData(data: unknown): boolean;
function validateThumbnailData(data: unknown): boolean;
}import {
EmbedAssertions,
ComponentAssertions,
SlashCommandAssertions
} from "@discordjs/builders";
function validateUserInput(data: {
commandName: string;
embedTitle: string;
buttonLabel: string;
}) {
try {
// Validate each piece of user input
SlashCommandAssertions.validateName(data.commandName);
EmbedAssertions.validateTitle(data.embedTitle);
ComponentAssertions.validateButtonLabel(data.buttonLabel);
return { valid: true };
} catch (error) {
return {
valid: false,
error: error.message
};
}
}import { EmbedBuilder, EmbedAssertions } from "@discordjs/builders";
function createSafeEmbed(title: string, description: string) {
try {
// Validate before building
EmbedAssertions.validateTitle(title);
EmbedAssertions.validateDescription(description);
return new EmbedBuilder()
.setTitle(title)
.setDescription(description);
} catch (error) {
console.error("Validation failed:", error.message);
// Return a fallback embed
return new EmbedBuilder()
.setTitle("Error")
.setDescription("Invalid embed data provided");
}
}The assertion modules provide early validation to catch issues before API calls, improving error handling and user experience in Discord bot applications.