import { Colors, type ColorResolvable, EmbedBuilder } from "discord.js"; import { BRANDING } from "@shared/lib/constants"; import pkg from "../../package.json"; /** * Applies standard branding to an embed. */ function applyBranding(embed: EmbedBuilder): EmbedBuilder { return embed.setFooter({ text: `${BRANDING.FOOTER_TEXT} v${pkg.version}` }); } /** * Creates a standardized error embed. * @param message The error message to display. * @param title Optional title for the embed. Defaults to "Error". * @returns An EmbedBuilder instance configured as an error. */ export function createErrorEmbed(message: string, title: string = "Error"): EmbedBuilder { const embed = new EmbedBuilder() .setTitle(`❌ ${title}`) .setDescription(message) .setColor(Colors.Red) .setTimestamp(); return applyBranding(embed); } /** * Creates a standardized warning embed. * @param message The warning message to display. * @param title Optional title for the embed. Defaults to "Warning". * @returns An EmbedBuilder instance configured as a warning. */ export function createWarningEmbed(message: string, title: string = "Warning"): EmbedBuilder { const embed = new EmbedBuilder() .setTitle(`⚠️ ${title}`) .setDescription(message) .setColor(Colors.Yellow) .setTimestamp(); return applyBranding(embed); } /** * Creates a standardized success embed. * @param message The success message to display. * @param title Optional title for the embed. Defaults to "Success". * @returns An EmbedBuilder instance configured as a success. */ export function createSuccessEmbed(message: string, title: string = "Success"): EmbedBuilder { const embed = new EmbedBuilder() .setTitle(`✅ ${title}`) .setDescription(message) .setColor(Colors.Green) .setTimestamp(); return applyBranding(embed); } /** * Creates a standardized info embed. * @param message The info message to display. * @param title Optional title for the embed. Defaults to "Info". * @returns An EmbedBuilder instance configured as info. */ export function createInfoEmbed(message: string, title: string = "Info"): EmbedBuilder { const embed = new EmbedBuilder() .setTitle(`ℹ️ ${title}`) .setDescription(message) .setColor(Colors.Blue) .setTimestamp(); return applyBranding(embed); } /** * Creates a standardized base embed with common configuration. * @param title Optional title for the embed. * @param description Optional description for the embed. * @param color Optional color for the embed. * @returns An EmbedBuilder instance with base configuration. */ export function createBaseEmbed(title?: string, description?: string, color?: ColorResolvable): EmbedBuilder { const embed = new EmbedBuilder() .setTimestamp() .setColor(color ?? BRANDING.COLOR); if (title) embed.setTitle(title); if (description) embed.setDescription(description); return applyBranding(embed); }