import { Constants, type ApplicationCommandOptions, type ApplicationCommandOptionsBoolean, type ApplicationCommandOptionsInteger, type ApplicationCommandOptionsMentionable, type ApplicationCommandOptionsNumber, type ApplicationCommandOptionsRole, type ApplicationCommandOptionsString, type ApplicationCommandOptionsSubCommand, type ApplicationCommandOptionsSubCommandGroup, type ApplicationCommandOptionsUser, } from '@projectdysnomia/dysnomia'; export type StringOptionDefinition = Omit & { autocomplete?: boolean }; export function stringOption(options: StringOptionDefinition): ApplicationCommandOptionsString { const def = options as ApplicationCommandOptionsString; def.type = Constants.ApplicationCommandOptionTypes.STRING; return def; } export type IntegerOptionDefinition = Omit & { autocomplete?: boolean }; export function integerOption(options: IntegerOptionDefinition): ApplicationCommandOptionsInteger { const def = options as ApplicationCommandOptionsInteger; def.type = Constants.ApplicationCommandOptionTypes.INTEGER; return def; } export type BooleanOptionDefinition = Omit; export function booleanOption(options: BooleanOptionDefinition): ApplicationCommandOptionsBoolean { const def = options as ApplicationCommandOptionsBoolean; def.type = Constants.ApplicationCommandOptionTypes.BOOLEAN; return def; } export type UserOptionDefinition = Omit & { autocomplete?: boolean }; export function userOption(options: UserOptionDefinition): ApplicationCommandOptionsUser { const def = options as ApplicationCommandOptionsUser; def.type = Constants.ApplicationCommandOptionTypes.USER; return def; } export type ChannelOptionDefinition = Omit & { autocomplete?: boolean }; export function channelOption(options: ChannelOptionDefinition): ApplicationCommandOptions { const def = options as ApplicationCommandOptions; def.type = Constants.ApplicationCommandOptionTypes.CHANNEL; return def; } export type RoleOptionDefinition = Omit & { autocomplete?: boolean }; export function roleOption(options: RoleOptionDefinition): ApplicationCommandOptionsRole { const def = options as ApplicationCommandOptionsRole; def.type = Constants.ApplicationCommandOptionTypes.ROLE; return def; } export type MentionableOptionDefinition = Omit; export function mentionableOption(options: MentionableOptionDefinition): ApplicationCommandOptionsMentionable { const def = options as ApplicationCommandOptionsMentionable; def.type = Constants.ApplicationCommandOptionTypes.MENTIONABLE; return def; } export type NumberOptionDefinition = Omit & { autocomplete?: boolean }; export function numberOption(options: NumberOptionDefinition): ApplicationCommandOptionsNumber { const def = options as ApplicationCommandOptionsNumber; def.type = Constants.ApplicationCommandOptionTypes.NUMBER; return def; } export type AttachmentOptionDefinition = Omit; export function attachmentOption(options: AttachmentOptionDefinition): ApplicationCommandOptions { const def = options as ApplicationCommandOptions; def.type = Constants.ApplicationCommandOptionTypes.ATTACHMENT; return def; } export type SubCommandOptionDefinition = Omit; export function subCommandOption(options: SubCommandOptionDefinition): ApplicationCommandOptionsSubCommand { const def = options as ApplicationCommandOptionsSubCommand; def.type = Constants.ApplicationCommandOptionTypes.SUB_COMMAND; return def; } export type SubCommandGroupOptionDefinition = Omit; export function subCommandGroupOption(options: SubCommandGroupOptionDefinition): ApplicationCommandOptionsSubCommandGroup { const def = options as ApplicationCommandOptionsSubCommandGroup; def.type = Constants.ApplicationCommandOptionTypes.SUB_COMMAND_GROUP; return def; }