Pular para o conteúdo

Tipos de comandos e interações ​

Assinaturas públicas completas do SDK de bots do Monky, geradas da entrada TypeScript de @monky/bot-sdk. Campos opcionais usam ?; campos readonly não devem ser alterados. Os links de origem incluem regras de validação e detalhes da implementação.

Visão geral do SDK de bots e eventos · Interações · Configurações · Áudio

AudioPreviewSource ​

Origem e validação

ts
export type AudioPreviewSource = {
    url: string;
    fileName?: string | undefined;
    durationMs?: number | undefined;
} | {
    resourceId: string;
    fileName?: string | undefined;
    durationMs?: number | undefined;
};

BotCarouselComponent ​

Origem e validação

ts
export type BotCarouselComponent = {
    type: "carousel";
    imageUrls: string[];
    label?: string | undefined;
    presentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
};

BotCarouselFit ​

Origem e validação

ts
export type BotCarouselFit = "cover" | "contain";

BotCarouselFormat ​

Origem e validação

ts
export type BotCarouselFormat = "banner" | "landscape" | "square" | "portrait";

BotCarouselInput ​

Origem e validação

ts
export type BotCarouselInput = {
    type: "carousel";
    imageAssetRefs: string[];
    label?: string | undefined;
    presentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
};

BotCarouselPresentation ​

Origem e validação

ts
export type BotCarouselPresentation = {
    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
    fit?: "cover" | "contain" | undefined;
    size?: "compact" | "regular" | "wide" | undefined;
};

BotCarouselSize ​

Origem e validação

ts
export type BotCarouselSize = "compact" | "regular" | "wide";

BotFieldLocalization ​

Origem e validação

ts
export type BotFieldLocalization = {
    description?: string | undefined;
    placeholder?: string | undefined;
    label?: string | undefined;
    choices?: Record<string, {
        description?: string | undefined;
        label?: string | undefined;
    }> | undefined;
};

BotForm ​

Origem e validação

ts
export type BotForm = {
    title: string;
    fields: ({
        type: "text";
        name: string;
        label: string;
        description?: string | undefined;
        placeholder?: string | undefined;
        multiline?: boolean | undefined;
        minLength?: number | undefined;
        maxLength?: number | undefined;
        defaultValue?: string | undefined;
        required?: boolean | undefined;
    } | {
        type: "integer";
        name: string;
        label: string;
        description?: string | undefined;
        placeholder?: string | undefined;
        defaultValue?: number | undefined;
        required?: boolean | undefined;
        min?: number | undefined;
        max?: number | undefined;
    } | {
        type: "select";
        name: string;
        label: string;
        choices: {
            value: string;
            label: string;
            description?: string | undefined;
            audio?: {
                url: string;
                fileName?: string | undefined;
                durationMs?: number | undefined;
            } | {
                resourceId: string;
                fileName?: string | undefined;
                durationMs?: number | undefined;
            } | undefined;
        }[];
        description?: string | undefined;
        placeholder?: string | undefined;
        defaultValue?: string | undefined;
        required?: boolean | undefined;
        presentation?: "dropdown" | "buttons" | undefined;
    } | {
        type: "boolean";
        name: string;
        label: string;
        description?: string | undefined;
        defaultValue?: boolean | undefined;
        required?: boolean | undefined;
    } | {
        type: "string-list";
        name: string;
        label: string;
        description?: string | undefined;
        placeholder?: string | undefined;
        maxLength?: number | undefined;
        defaultValue?: string[] | undefined;
        required?: boolean | undefined;
        minItems?: number | undefined;
        maxItems?: number | undefined;
    } | {
        type: "image-list";
        name: string;
        label: string;
        description?: string | undefined;
        required?: boolean | undefined;
        presentation?: {
            format?: "banner" | "landscape" | "square" | "portrait" | undefined;
            fit?: "cover" | "contain" | undefined;
            size?: "compact" | "regular" | "wide" | undefined;
        } | undefined;
        minItems?: number | undefined;
        maxItems?: number | undefined;
    })[];
    description?: string | undefined;
    submitLabel?: string | undefined;
};

BotFormField ​

Origem e validação

ts
export type BotFormField = {
    type: "text";
    name: string;
    label: string;
    description?: string | undefined;
    placeholder?: string | undefined;
    multiline?: boolean | undefined;
    minLength?: number | undefined;
    maxLength?: number | undefined;
    defaultValue?: string | undefined;
    required?: boolean | undefined;
} | {
    type: "integer";
    name: string;
    label: string;
    description?: string | undefined;
    placeholder?: string | undefined;
    defaultValue?: number | undefined;
    required?: boolean | undefined;
    min?: number | undefined;
    max?: number | undefined;
} | {
    type: "select";
    name: string;
    label: string;
    choices: {
        value: string;
        label: string;
        description?: string | undefined;
        audio?: {
            url: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | {
            resourceId: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | undefined;
    }[];
    description?: string | undefined;
    placeholder?: string | undefined;
    defaultValue?: string | undefined;
    required?: boolean | undefined;
    presentation?: "dropdown" | "buttons" | undefined;
} | {
    type: "boolean";
    name: string;
    label: string;
    description?: string | undefined;
    defaultValue?: boolean | undefined;
    required?: boolean | undefined;
} | {
    type: "string-list";
    name: string;
    label: string;
    description?: string | undefined;
    placeholder?: string | undefined;
    maxLength?: number | undefined;
    defaultValue?: string[] | undefined;
    required?: boolean | undefined;
    minItems?: number | undefined;
    maxItems?: number | undefined;
} | {
    type: "image-list";
    name: string;
    label: string;
    description?: string | undefined;
    required?: boolean | undefined;
    presentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
    minItems?: number | undefined;
    maxItems?: number | undefined;
};

BotFormValues ​

Origem e validação

ts
export type BotFormValues = {
    [x: string]: string | number | boolean | string[];
};

BotInputResult ​

Origem e validação

ts
export type BotInputResult<T> = {
    success: true;
    values: T;
} | {
    success: false;
    field: string;
    reason: BotInputError;
};

BotLocale ​

Origem e validação

ts
export type BotLocale = "pt-BR" | "en";

botLocaleSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = "pt-BR" | "en" | "en-US";
type Output = "pt-BR" | "en";

BotLocalizedMessage ​

Origem e validação

ts
export type BotLocalizedMessage = {
    content: string;
    localizations?: {
        'pt-BR'?: string | undefined;
        en?: string | undefined;
    } | undefined;
    components?: {
        type: "carousel";
        imageAssetRefs: string[];
        label?: string | undefined;
        presentation?: {
            format?: "banner" | "landscape" | "square" | "portrait" | undefined;
            fit?: "cover" | "contain" | undefined;
            size?: "compact" | "regular" | "wide" | undefined;
        } | undefined;
    }[] | undefined;
};

BotMessageComponent ​

Origem e validação

ts
export type BotMessageComponent = {
    type: "carousel";
    imageUrls: string[];
    label?: string | undefined;
    presentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
};

BotMessageComponentInput ​

Origem e validação

ts
export type BotMessageComponentInput = {
    type: "carousel";
    imageAssetRefs: string[];
    label?: string | undefined;
    presentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
};

BotMessageContent ​

Origem e validação

ts
export type BotMessageContent = string | {
    content: string;
    localizations?: {
        'pt-BR'?: string | undefined;
        en?: string | undefined;
    } | undefined;
    components?: {
        type: "carousel";
        imageAssetRefs: string[];
        label?: string | undefined;
        presentation?: {
            format?: "banner" | "landscape" | "square" | "portrait" | undefined;
            fit?: "cover" | "contain" | undefined;
            size?: "compact" | "regular" | "wide" | undefined;
        } | undefined;
    }[] | undefined;
};

BotMessageLocalizations ​

Origem e validação

ts
export type BotMessageLocalizations = {
    'pt-BR'?: string | undefined;
    en?: string | undefined;
};

BotPublishedMessageContent ​

Origem e validação

ts
export type BotPublishedMessageContent = string | (Omit<{
    content: string;
    localizations?: {
        'pt-BR'?: string | undefined;
        en?: string | undefined;
    } | undefined;
    components?: {
        type: "carousel";
        imageAssetRefs: string[];
        label?: string | undefined;
        presentation?: {
            format?: "banner" | "landscape" | "square" | "portrait" | undefined;
            fit?: "cover" | "contain" | undefined;
            size?: "compact" | "regular" | "wide" | undefined;
        } | undefined;
    }[] | undefined;
}, "components"> & {
    components?: never;
});

BotSelector ​

Origem e validação

ts
export interface BotSelector {
    id: string;
    botId: string;
    messageId: string;
    createdAt: number;
    closedAt: number | null;
    responses: Record<string, string>;
    resultMessageId: string | null;
    messagePublished?: boolean | undefined;
    creatorUserId?: string | undefined;
    sourceInvocationId?: string | undefined;
    title: string;
    choices: {
        value: string;
        label: string;
        description?: string | undefined;
        audio?: {
            url: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | {
            resourceId: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | undefined;
    }[];
    presentation: "dropdown" | "buttons";
    expiresAt?: number | undefined;
    channelId: string;
    invokerId?: string | undefined;
    responder: "any" | "invoker";
    allowChange: boolean;
    maxResponders?: number | undefined;
    metadata?: Record<string, string> | undefined;
}

BotSelectorCreate ​

Origem e validação

ts
export type BotSelectorCreate = {
    title: string;
    choices: {
        value: string;
        label: string;
        description?: string | undefined;
        audio?: {
            url: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | {
            resourceId: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | undefined;
    }[];
    presentation: "dropdown" | "buttons";
    channelId: string;
    responder: "any" | "invoker";
    allowChange: boolean;
    expiresAt?: number | undefined;
    id?: string | undefined;
    invocationId?: string | undefined;
    invokerId?: string | undefined;
    maxResponders?: number | undefined;
    metadata?: Record<string, string> | undefined;
};

BotSelectorPatch ​

Origem e validação

ts
export type BotSelectorPatch = {
    title?: string | undefined;
    expiresAt?: number | undefined;
    maxResponders?: number | undefined;
};

BotSelectorPublic ​

Origem e validação

ts
export interface BotSelectorPublic {
    counts: Record<string, number>;
    responseCount: number;
    ownResponse?: string | undefined;
    canRespond: boolean;
    title: string;
    choices: {
        value: string;
        label: string;
        description?: string | undefined;
        audio?: {
            url: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | {
            resourceId: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | undefined;
    }[];
    presentation: "dropdown" | "buttons";
    expiresAt?: number | undefined;
    id: string;
    channelId: string;
    botId: string;
    createdAt: number;
    responder: "any" | "invoker";
    allowChange: boolean;
    maxResponders?: number | undefined;
    messageId: string;
    closedAt: number | null;
    resultMessageId: string | null;
    messagePublished?: boolean | undefined;
}

BotSelectorRespondedPayload ​

Origem e validação

ts
export type BotSelectorRespondedPayload = {
    value: string;
    id: string;
    channelId: string;
    userId: string;
    settings?: {
        server: Record<string, string | number | boolean | string[]>;
        schemaRevision: number;
        serverRevision: number;
        user: Record<string, string | number | boolean | string[]>;
    } | undefined;
};

botSelectorRespondedSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    value: string;
    id: string;
    channelId: string;
    userId: string;
    settings?: {
        server: Record<string, string | number | boolean | string[]>;
        schemaRevision: number;
        serverRevision: number;
        user: Record<string, string | number | boolean | string[]>;
    } | undefined;
};
type Output = {
    value: string;
    id: string;
    channelId: string;
    userId: string;
    settings?: {
        server: Record<string, string | number | boolean | string[]>;
        schemaRevision: number;
        serverRevision: number;
        user: Record<string, string | number | boolean | string[]>;
    } | undefined;
};

BotServerSettingsSnapshot ​

Origem e validação

ts
export type BotServerSettingsSnapshot = {
    values: Record<string, string | number | boolean | string[]>;
    revision: number;
    schemaRevision: number;
};

botServerSettingsSnapshotSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    values: Record<string, string | number | boolean | string[]>;
    revision: number;
    schemaRevision: number;
};
type Output = {
    values: Record<string, string | number | boolean | string[]>;
    revision: number;
    schemaRevision: number;
};

BotSettingsContext ​

Origem e validação

ts
export type BotSettingsContext = {
    server: Record<string, string | number | boolean | string[]>;
    schemaRevision: number;
    serverRevision: number;
    user: Record<string, string | number | boolean | string[]>;
};

botSettingsContextSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    server: Record<string, string | number | boolean | string[]>;
    schemaRevision: number;
    serverRevision: number;
    user: Record<string, string | number | boolean | string[]>;
};
type Output = {
    server: Record<string, string | number | boolean | string[]>;
    schemaRevision: number;
    serverRevision: number;
    user: Record<string, string | number | boolean | string[]>;
};

BotSettingsDefinition ​

Origem e validação

ts
export type BotSettingsDefinition = {
    server?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    user?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    localizations?: {
        'pt-BR'?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
        en?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
    } | undefined;
};

botSettingsDefinitionSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    server?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    user?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    localizations?: {
        'pt-BR'?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
        en?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
    } | undefined;
};
type Output = {
    server?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    user?: {
        title: string;
        fields: ({
            type: "text";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            multiline?: boolean | undefined;
            minLength?: number | undefined;
            maxLength?: number | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
        } | {
            type: "integer";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: number | undefined;
            required?: boolean | undefined;
            min?: number | undefined;
            max?: number | undefined;
        } | {
            type: "select";
            name: string;
            label: string;
            choices: {
                value: string;
                label: string;
                description?: string | undefined;
                audio?: {
                    url: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | {
                    resourceId: string;
                    fileName?: string | undefined;
                    durationMs?: number | undefined;
                } | undefined;
            }[];
            description?: string | undefined;
            placeholder?: string | undefined;
            defaultValue?: string | undefined;
            required?: boolean | undefined;
            presentation?: "dropdown" | "buttons" | undefined;
        } | {
            type: "boolean";
            name: string;
            label: string;
            description?: string | undefined;
            defaultValue?: boolean | undefined;
            required?: boolean | undefined;
        } | {
            type: "string-list";
            name: string;
            label: string;
            description?: string | undefined;
            placeholder?: string | undefined;
            maxLength?: number | undefined;
            defaultValue?: string[] | undefined;
            required?: boolean | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        } | {
            type: "image-list";
            name: string;
            label: string;
            description?: string | undefined;
            required?: boolean | undefined;
            presentation?: {
                format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                fit?: "cover" | "contain" | undefined;
                size?: "compact" | "regular" | "wide" | undefined;
            } | undefined;
            minItems?: number | undefined;
            maxItems?: number | undefined;
        })[];
        description?: string | undefined;
        submitLabel?: string | undefined;
    } | undefined;
    localizations?: {
        'pt-BR'?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
        en?: {
            server?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
            user?: {
                title?: string | undefined;
                description?: string | undefined;
                fields?: Record<string, {
                    description?: string | undefined;
                    placeholder?: string | undefined;
                    label?: string | undefined;
                    choices?: Record<string, {
                        description?: string | undefined;
                        label?: string | undefined;
                    }> | undefined;
                }> | undefined;
                submitLabel?: string | undefined;
            } | undefined;
        } | undefined;
    } | undefined;
};

BotSettingsSnapshot ​

Origem e validação

ts
export type BotSettingsSnapshot = {
    bot: {
        name: string;
        botId: string;
        revision: number;
        schemaRevision: number;
        online: boolean;
        capabilities: {
            downloadsSound: boolean;
        };
        hasServerSettings: boolean;
        hasUserSettings: boolean;
        canConfigure: boolean;
        avatarUrl?: string | null | undefined;
        permissions?: {
            revision: number;
            requested: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[] | null;
            granted: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[];
            reviewRequired: boolean;
            reviewedBy: string | null;
            reviewedAt: number | null;
        } | undefined;
        canManage?: boolean | undefined;
        manifestUrl?: string | null | undefined;
    };
    definition: {
        server?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        user?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        localizations?: {
            'pt-BR'?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
            en?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
        } | undefined;
    };
    server?: {
        values: Record<string, string | number | boolean | string[]>;
        revision: number;
        schemaRevision: number;
    } | undefined;
};

botSettingsSnapshotSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    bot: {
        name: string;
        botId: string;
        revision: number;
        schemaRevision: number;
        online: boolean;
        capabilities: {
            downloadsSound: boolean;
        };
        hasServerSettings: boolean;
        hasUserSettings: boolean;
        canConfigure: boolean;
        avatarUrl?: string | null | undefined;
        permissions?: {
            revision: number;
            requested: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[] | null;
            granted: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[];
            reviewRequired: boolean;
            reviewedBy: string | null;
            reviewedAt: number | null;
        } | undefined;
        canManage?: boolean | undefined;
        manifestUrl?: string | null | undefined;
    };
    definition: {
        server?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        user?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        localizations?: {
            'pt-BR'?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
            en?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
        } | undefined;
    };
    server?: {
        values: Record<string, string | number | boolean | string[]>;
        revision: number;
        schemaRevision: number;
    } | undefined;
};
type Output = {
    bot: {
        name: string;
        botId: string;
        revision: number;
        schemaRevision: number;
        online: boolean;
        capabilities: {
            downloadsSound: boolean;
        };
        hasServerSettings: boolean;
        hasUserSettings: boolean;
        canConfigure: boolean;
        avatarUrl?: string | null | undefined;
        permissions?: {
            revision: number;
            requested: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[] | null;
            granted: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[];
            reviewRequired: boolean;
            reviewedBy: string | null;
            reviewedAt: number | null;
        } | undefined;
        canManage?: boolean | undefined;
        manifestUrl?: string | null | undefined;
    };
    definition: {
        server?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        user?: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        } | undefined;
        localizations?: {
            'pt-BR'?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
            en?: {
                server?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
                user?: {
                    title?: string | undefined;
                    description?: string | undefined;
                    fields?: Record<string, {
                        description?: string | undefined;
                        placeholder?: string | undefined;
                        label?: string | undefined;
                        choices?: Record<string, {
                            description?: string | undefined;
                            label?: string | undefined;
                        }> | undefined;
                    }> | undefined;
                    submitLabel?: string | undefined;
                } | undefined;
            } | undefined;
        } | undefined;
    };
    server?: {
        values: Record<string, string | number | boolean | string[]>;
        revision: number;
        schemaRevision: number;
    } | undefined;
};

BotSettingsSummary ​

Origem e validação

ts
export type BotSettingsSummary = {
    name: string;
    botId: string;
    revision: number;
    schemaRevision: number;
    online: boolean;
    capabilities: {
        downloadsSound: boolean;
    };
    hasServerSettings: boolean;
    hasUserSettings: boolean;
    canConfigure: boolean;
    avatarUrl?: string | null | undefined;
    permissions?: {
        revision: number;
        requested: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[] | null;
        granted: ("commands" | "read_messages" | "send_messages" | "publish_voice" | "receive_voice" | "local_execution" | "sound_download" | "selectors" | "miniapps" | "live_actions" | "server_storage" | "device_storage")[];
        reviewRequired: boolean;
        reviewedBy: string | null;
        reviewedAt: number | null;
    } | undefined;
    canManage?: boolean | undefined;
    manifestUrl?: string | null | undefined;
};

botSettingsValuesSchema ​

Origem e validação

Este é um validador Zod. parse(valor) retorna Output ou lança erro; safeParse(valor) retorna um resultado discriminado de sucesso/erro. Input descreve a estrutura aceita; a origem também aplica refinamentos e limites de tamanho.

ts
type Input = {
    [x: string]: string | number | boolean | string[];
};
type Output = {
    [x: string]: string | number | boolean | string[];
};

ChatMessage ​

Origem e validação

ts
export interface ChatMessage {
    /**
     * Marks a message forwarded from elsewhere (message-forward). In a channel the
     * server fills it from the original; the original author is never shown.
     */
    forwarded?: MessageForward;
    botComponents?: import('./botCarousels.js').BotMessageComponent[];
    blocks?: import('./messageBlocks.js').ResolvedMessageBlock[];
    localizations?: import('./botMessages.js').BotMessageLocalizations;
    reply?: MessageReply;
    reactions?: import('./reactions.js').MessageReaction[];
    id: string;
    channelId: string;
    userId: string;
    userNickname: string;
    userAvatarUrl?: string | null;
    content: string;
    createdAt: number;
    isSystem?: boolean;
    // Files attached to this message (#11). Omitted/empty for plain text messages.
    attachments?: AttachmentMeta[];
    /** When the author last edited the message, so the UI can mark it (#504). */
    editedAt?: number | null;
    /**
     * When the message was deleted (#504). A deleted message keeps its row and
     * arrives with an empty `content` and no attachments: the client draws a
     * "message deleted" placeholder instead of making the message vanish, which
     * would silently rewrite the conversation for everyone reading it.
     */
    deletedAt?: number | null;
    /** Monotonic server revision prevents delayed edit/delete events undoing a restoration. */
    revision?: number;
    deletedByUserId?: string | null;
    deleteUndoUntil?: number | null;
    /**
     * True when this message is only visible to the invoking user (#569).
     * Ephemeral messages are not persisted and disappear on reconnect.
     */
    isEphemeral?: boolean;
    isBot?: boolean;
    /** Server-authenticated attribution; private argument values are never included. */
    botCommand?: BotCommandContext;
    /** Native poll attached to this message, personalized with the current member's vote. */
    poll?: import('./nativePolls.js').NativePoll;
}

ChatReactionEventPayload ​

Origem e validação

ts
export type ChatReactionEventPayload = {
    channelId: string;
    userId: string;
    userNickname: string;
    emoji: string;
    messageId: string;
};

CommandAudioPreviewMimeType ​

Origem e validação

ts
export type CommandAudioPreviewMimeType = "audio/ogg" | "audio/mpeg" | "audio/wav";

CommandAutocompleteChoice ​

Origem e validação

ts
export type CommandAutocompleteChoice = {
    value: string;
    label: string;
    description?: string | undefined;
    audio?: {
        url: string;
        fileName?: string | undefined;
        durationMs?: number | undefined;
    } | {
        resourceId: string;
        fileName?: string | undefined;
        durationMs?: number | undefined;
    } | undefined;
};

CommandAutocompletePage ​

Origem e validação

ts
export type CommandAutocompletePage = {
    choices: {
        value: string;
        label: string;
        description?: string | undefined;
        audio?: {
            url: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | {
            resourceId: string;
            fileName?: string | undefined;
            durationMs?: number | undefined;
        } | undefined;
    }[];
    hasMore?: boolean | undefined;
    nextCursor?: string | undefined;
};

CommandLocalization ​

Origem e validação

ts
export type CommandLocalization = {
    description?: string | undefined;
    options?: Record<string, {
        description?: string | undefined;
        placeholder?: string | undefined;
        label?: string | undefined;
        choices?: Record<string, {
            description?: string | undefined;
            label?: string | undefined;
        }> | undefined;
    }> | undefined;
    name?: string | undefined;
    aliases?: string[] | undefined;
};

CommandLocalizations ​

Origem e validação

ts
export type CommandLocalizations = {
    'pt-BR'?: {
        description?: string | undefined;
        options?: Record<string, {
            description?: string | undefined;
            placeholder?: string | undefined;
            label?: string | undefined;
            choices?: Record<string, {
                description?: string | undefined;
                label?: string | undefined;
            }> | undefined;
        }> | undefined;
        name?: string | undefined;
        aliases?: string[] | undefined;
    } | undefined;
    en?: {
        description?: string | undefined;
        options?: Record<string, {
            description?: string | undefined;
            placeholder?: string | undefined;
            label?: string | undefined;
            choices?: Record<string, {
                description?: string | undefined;
                label?: string | undefined;
            }> | undefined;
        }> | undefined;
        name?: string | undefined;
        aliases?: string[] | undefined;
    } | undefined;
};

CommandOption ​

Origem e validação

ts
export interface CommandOption {
    name: string;
    /** Display label only; name remains the stable argument identifier. */
    label?: string;
    description: string;
    type: CommandOptionType;
    required?: boolean;
    placeholder?: string;
    choices?: SelectionChoice[];
    /** Dynamic suggestions for a string option; mutually exclusive with choices. */
    autocomplete?: boolean;
    min?: number;
    max?: number;
}

CommandPresentation ​

Origem e validação

ts
export interface CommandPresentation {
    readonly canonicalName: string;
    readonly displayName: string;
    readonly inputNames: readonly string[];
}

CommandResponsePayload ​

Origem e validação

ts
export interface CommandResponsePayload {
    localizations?: import('./botMessages.js').BotMessageLocalizations;
    components?: import('./botCarousels.js').BotMessageComponentInput[];
    invocationId: string;
    content: string;
    /** Private by default. Public output must be explicitly requested. */
    ephemeral?: boolean;
}

CommandValue ​

Origem e validação

ts
export type CommandValue = string | number | boolean;

CommandValues ​

Origem e validação

ts
export type CommandValues = {
    [x: string]: string | number | boolean;
};

CommandVoiceRequirement ​

Origem e validação

ts
export type CommandVoiceRequirement = "joined" | "same-bot-channel";

getCommandPresentation ​

Origem e validação

ts
export function getCommandPresentation(command: {
    name: string;
    localizations?: CommandLocalizations;
}, requested: unknown): CommandPresentation;

LiveAction ​

Origem e validação

ts
export type LiveAction = {
    title: string;
    description: string;
    content: {
        kind: "selector";
        selectorId: string;
    } | {
        kind: "form";
        form: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        };
    };
    expiresAt: number;
    audience: {
        visibility: "public";
    } | {
        visibility: "private";
        userIds?: string[] | undefined;
        roleIds?: string[] | undefined;
    };
    id: string;
    channelId: string;
    botId: string;
    creatorUserId: string;
    imageUrls: string[];
    createdAt: number;
    revision: number;
    imagePresentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
};

LiveActionCreate ​

Origem e validação

ts
export type LiveActionCreate = {
    title: string;
    description: string;
    content: {
        kind: "selector";
        selectorId: string;
    } | {
        kind: "form";
        form: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        };
    };
    expiresAt: number;
    channelId: string;
    invocationId: string;
    imagePresentation?: {
        format?: "banner" | "landscape" | "square" | "portrait" | undefined;
        fit?: "cover" | "contain" | undefined;
        size?: "compact" | "regular" | "wide" | undefined;
    } | undefined;
    audience?: {
        visibility: "public";
    } | {
        visibility: "private";
        userIds: string[];
        roleIds: string[];
    } | undefined;
    id?: string | undefined;
    imageAssetRefs?: string[] | undefined;
};

LiveActionSubmission ​

Origem e validação

ts
export type LiveActionSubmission = {
    values: Record<string, string | number | boolean | string[]>;
    id: string;
    channelId: string;
    expectedRevision: number;
    locale: "pt-BR" | "en";
    submissionId: string;
    userId: string;
    userNickname: string;
};

LiveActionUpdate ​

Origem e validação

ts
export type LiveActionUpdate = {
    id: string;
    expectedRevision: number;
    title?: string | undefined;
    description?: string | undefined;
    content?: {
        kind: "selector";
        selectorId: string;
    } | {
        kind: "form";
        form: {
            title: string;
            fields: ({
                type: "text";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                multiline?: boolean | undefined;
                minLength?: number | undefined;
                maxLength?: number | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
            } | {
                type: "integer";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: number | undefined;
                required?: boolean | undefined;
                min?: number | undefined;
                max?: number | undefined;
            } | {
                type: "select";
                name: string;
                label: string;
                choices: {
                    value: string;
                    label: string;
                    description?: string | undefined;
                    audio?: {
                        url: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | {
                        resourceId: string;
                        fileName?: string | undefined;
                        durationMs?: number | undefined;
                    } | undefined;
                }[];
                description?: string | undefined;
                placeholder?: string | undefined;
                defaultValue?: string | undefined;
                required?: boolean | undefined;
                presentation?: "dropdown" | "buttons" | undefined;
            } | {
                type: "boolean";
                name: string;
                label: string;
                description?: string | undefined;
                defaultValue?: boolean | undefined;
                required?: boolean | undefined;
            } | {
                type: "string-list";
                name: string;
                label: string;
                description?: string | undefined;
                placeholder?: string | undefined;
                maxLength?: number | undefined;
                defaultValue?: string[] | undefined;
                required?: boolean | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            } | {
                type: "image-list";
                name: string;
                label: string;
                description?: string | undefined;
                required?: boolean | undefined;
                presentation?: {
                    format?: "banner" | "landscape" | "square" | "portrait" | undefined;
                    fit?: "cover" | "contain" | undefined;
                    size?: "compact" | "regular" | "wide" | undefined;
                } | undefined;
                minItems?: number | undefined;
                maxItems?: number | undefined;
            })[];
            description?: string | undefined;
            submitLabel?: string | undefined;
        };
    } | undefined;
    expiresAt?: number | undefined;
    audience?: {
        visibility: "public";
    } | {
        visibility: "private";
        userIds: string[];
        roleIds: string[];
    } | undefined;
    imageAssetRefs?: string[] | undefined;
};

localizeCommand ​

Origem e validação

ts
export function localizeCommand<T extends {
    description: string;
    options?: CommandOption[];
    localizations?: CommandLocalizations;
}>(command: T, requested: unknown): T;

MessageReaction ​

Origem e validação

ts
export interface MessageReaction {
    emoji: string;
    users: ReactionUser[];
}

normalizeBotLocale ​

Origem e validação

ts
export function normalizeBotLocale(value: unknown): BotLocale | undefined;

resolveBotLocale ​

Origem e validação

ts
export function resolveBotLocale(requested: unknown, supported?: readonly BotLocale[], fallback?: BotLocale): BotLocale;

resolveBotSettingsValues ​

Origem e validação

ts
export function resolveBotSettingsValues(form: BotForm | undefined, input: unknown): BotInputResult<BotFormValues>;

SelectionChoice ​

Origem e validação

ts
export type SelectionChoice = {
    value: string;
    label: string;
    description?: string | undefined;
    audio?: {
        url: string;
        fileName?: string | undefined;
        durationMs?: number | undefined;
    } | {
        resourceId: string;
        fileName?: string | undefined;
        durationMs?: number | undefined;
    } | undefined;
};

SlashCommand ​

Origem e validação

ts
export interface SlashCommand {
    /** Unique per bot; the command name without the leading `/`. */
    name: string;
    description: string;
    localizations?: CommandLocalizations;
    /** The bot that owns this command (`UserSummary.id`). */
    botId: string;
    /** Display-friendly bot name for the command dropup. */
    botName: string;
    botAvatarUrl?: string | null;
    /** Server-authenticated key; required when localCapabilities is nonempty. */
    botPublicKey?: string;
    options?: CommandOption[];
    /** Prepare these capabilities before starting an invocation or suggestion deadline. */
    localCapabilities?: LocalCapabilityId[];
    /** Requires explicit caller consent for one local soundboard download. */
    downloadsSound?: boolean;
    /** Enforced for invocation, autocomplete and private previews on the caller's device. */
    voiceRequirement?: CommandVoiceRequirement;
}

SoundDownloadFailureReason ​

Origem e validação

ts
export type SoundDownloadFailureReason = "timeout" | "invalid_request" | "no_folder" | "invalid_url" | "blocked_url" | "invalid_file_name" | "unsupported_audio" | "too_large" | "http_error" | "network_error" | "write_failed";

SoundDownloadRequest ​

Origem e validação

ts
export type SoundDownloadRequest = {
    title: string;
    url: string;
    fileName: string;
};

SoundDownloadResult ​

Origem e validação

ts
export type SoundDownloadResult = {
    status: "downloaded";
} | {
    status: "exists";
} | {
    status: "failed";
    reason: "timeout" | "invalid_request" | "no_folder" | "invalid_url" | "blocked_url" | "invalid_file_name" | "unsupported_audio" | "too_large" | "http_error" | "network_error" | "write_failed";
} | {
    status: "cancelled";
};