import { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice, type ChannelType } from '../../types'; import type { AutocompleteCallback, MenuCommandContext, OnAutocompleteErrorCallback, ReturnOptionsTypes, __TypesWrapper, } from '..'; import type { MessageCommandInteraction, UserCommandInteraction } from '../../structures'; import type { CommandContext } from './chatcontext'; import type { MiddlewareContext } from './shared'; import type { ModalContext } from '../../components'; import type { ComponentContext } from '../../components/componentcontext'; export type SeyfertBasicOption = __TypesWrapper[T] & D; export type SeyfertStringOption = SeyfertBasicOption<'String'> & { autocomplete?: AutocompleteCallback; onAutocompleteError?: OnAutocompleteErrorCallback; choices?: | readonly { readonly name: string; readonly value: string }[] | APIApplicationCommandOptionChoice[]; min_length?: number; max_length?: number; }; export type SeyfertIntegerOption = SeyfertBasicOption<'Integer'> & { autocomplete?: AutocompleteCallback; onAutocompleteError?: OnAutocompleteErrorCallback; choices?: APIApplicationCommandOptionChoice[]; min_value?: number; max_value?: number; }; export type SeyfertBooleanOption = SeyfertBasicOption<'Boolean'>; export type SeyfertUserOption = SeyfertBasicOption<'User'>; export type SeyfertChannelOption = SeyfertBasicOption<'Channel'> & { channel_types?: ChannelType[]; }; export type SeyfertRoleOption = SeyfertBasicOption<'Role'>; export type SeyfertMentionableOption = SeyfertBasicOption<'Mentionable'>; export type SeyfertNumberOption = SeyfertBasicOption<'Number'> & { autocomplete?: AutocompleteCallback; onAutocompleteError?: OnAutocompleteErrorCallback; choices?: APIApplicationCommandOptionChoice[]; min_value?: number; max_value?: number; }; export type SeyfertAttachmentOption = SeyfertBasicOption<'Attachment'>; export function createStringOption(data: T) { return { ...data, type: ApplicationCommandOptionType.String } as const; } export function createIntegerOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Integer } as const; } export function createBooleanOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Boolean } as const; } export function createUserOption(data: T) { return { ...data, type: ApplicationCommandOptionType.User } as const; } export function createChannelOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Channel } as const; } export function createRoleOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Role } as const; } export function createMentionableOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Mentionable } as const; } export function createNumberOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Number } as const; } export function createAttachmentOption(data: T) { return { ...data, type: ApplicationCommandOptionType.Attachment } as const; } export function createMiddleware< T = any, C extends | CommandContext | MenuCommandContext | UserCommandInteraction> | ComponentContext | ModalContext = | CommandContext | MenuCommandContext | UserCommandInteraction> | ComponentContext | ModalContext, >(data: MiddlewareContext) { return data; }