or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

assertions.mdcomponents-v2.mdcontext-menu-commands.mdembeds.mdindex.mdmessage-components.mdmodals.mdselect-menus.mdslash-commands.mdutilities.md
tile.json

assertions.mddocs/

Assertion Modules

@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.

EmbedAssertions

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);
}

ComponentAssertions

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;
}

TextInputAssertions

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;
}

ModalAssertions

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;
}

SlashCommandAssertions

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;
}

ContextMenuCommandAssertions

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;
}

ComponentsV2Assertions

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;
}

Usage Patterns

Custom Validation

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 
    };
  }
}

Builder Error Handling

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");
  }
}

Validation Behavior

  • Throws Errors: All validation functions throw errors when validation fails
  • Type Guards: Some assertions act as TypeScript type guards
  • Parameter Validation: Required parameter validators check for undefined/null values
  • Length Limits: String validators enforce Discord API length limits
  • Format Validation: URL and ID validators check proper formatting
  • Choice Limits: Option validators enforce Discord's choice count limits

The assertion modules provide early validation to catch issues before API calls, improving error handling and user experience in Discord bot applications.