import type { APIEmbed } from 'discord-api-types/v10';
import { AttachmentBuilder, Embed, EmbedBuilder } from 'discord.js';
import { AnyObject, CheckSizeContent, CheckSizeKey, Template, TemplatesValues } from './types';
export declare const templates: TemplatesValues;
export declare const limits: {
    author: {
        name: number;
    };
    title: number;
    description: number;
    footer: {
        text: number;
    };
    fields: {
        size: number;
        name: number;
        value: number;
    };
};
export type Templates = typeof templates;
type ValuesFromTemplateKey<T extends string, P = Templates[T]> = P extends Template<infer V> ? V : {};
type Values<T extends string | Template> = T extends Template<infer V> ? V : T extends string ? ValuesFromTemplateKey<T> : AnyObject | undefined;
export declare class BetterEmbed extends EmbedBuilder {
    static LENGTH_LIMITS: {
        author: {
            name: number;
        };
        title: number;
        description: number;
        footer: {
            text: number;
        };
        fields: {
            size: number;
            name: number;
            value: number;
        };
    };
    static TEMPLATES: TemplatesValues;
    constructor(data?: APIEmbed | Template);
    get author(): Embed["author"];
    get color(): number | undefined;
    get description(): string | undefined;
    get fields(): Embed["fields"];
    get footer(): Embed["footer"];
    get image(): Embed["image"];
    get thumbnail(): Embed["thumbnail"];
    get title(): string | undefined;
    get timestamp(): string | undefined;
    get url(): string | undefined;
    static isTemplate(key: string): key is keyof Templates & string;
    static fromTemplate<T extends (keyof Templates & string) | Template, V extends AnyObject | undefined = Values<T>>(template: T, values?: V): BetterEmbed;
    checkSize(field: 'fields'): ({
        index: number;
        limit: number;
    } & ({
        name: boolean;
    } | {
        value: boolean;
    })) | boolean;
    checkSize(field: keyof Template): boolean;
    checkSize(): {
        [k in CheckSizeKey]: {
            content: CheckSizeContent;
            limit: number;
        };
    };
    setImageFromFile(attachment: AttachmentBuilder): void;
    setThumbnailFromFile(attachment: AttachmentBuilder): void;
    throwIfTooLong(field: keyof Template): void;
    cutIfTooLong(): void;
}
export {};
