mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 03:23:29 +01:00
typings(ApplicationCommandOptionData): Align command data options types more with discord API (#6247)
* types(ApplicationCommandData): align command data more with discord API * types(ApplicationCommandData): clean up type definitions a bit * types(ApplicationCommandData): fix issue where could be used with and * types(ApplicationCommandOptionData): make subcommand option stronger * test(ApplicationCommandOptionData): add typing tests
This commit is contained in:
59
typings/index.d.ts
vendored
59
typings/index.d.ts
vendored
@@ -2898,6 +2898,33 @@ export interface BaseApplicationCommandData {
|
|||||||
defaultPermission?: boolean;
|
defaultPermission?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CommandOptionDataTypeResolvable = ApplicationCommandOptionType | ApplicationCommandOptionTypes;
|
||||||
|
|
||||||
|
export type CommandOptionChoiceResolvableType =
|
||||||
|
| ApplicationCommandOptionTypes.NUMBER
|
||||||
|
| 'NUMBER'
|
||||||
|
| ApplicationCommandOptionTypes.STRING
|
||||||
|
| 'STRING'
|
||||||
|
| ApplicationCommandOptionTypes.INTEGER
|
||||||
|
| 'INTEGER';
|
||||||
|
|
||||||
|
export type CommandOptionSubOptionResolvableType =
|
||||||
|
| ApplicationCommandOptionTypes.SUB_COMMAND
|
||||||
|
| 'SUB_COMMAND'
|
||||||
|
| ApplicationCommandOptionTypes.SUB_COMMAND_GROUP
|
||||||
|
| 'SUB_COMMAND_GROUP';
|
||||||
|
|
||||||
|
export type CommandOptionNonChoiceResolvableType = Exclude<
|
||||||
|
CommandOptionDataTypeResolvable,
|
||||||
|
CommandOptionChoiceResolvableType | CommandOptionSubOptionResolvableType
|
||||||
|
>;
|
||||||
|
|
||||||
|
export interface BaseApplicationCommandOptionsData {
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
required?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface UserApplicationCommandData extends BaseApplicationCommandData {
|
export interface UserApplicationCommandData extends BaseApplicationCommandData {
|
||||||
type: 'USER' | ApplicationCommandTypes.USER;
|
type: 'USER' | ApplicationCommandTypes.USER;
|
||||||
}
|
}
|
||||||
@@ -2917,19 +2944,35 @@ export type ApplicationCommandData =
|
|||||||
| MessageApplicationCommandData
|
| MessageApplicationCommandData
|
||||||
| ChatInputApplicationCommandData;
|
| ChatInputApplicationCommandData;
|
||||||
|
|
||||||
export interface ApplicationCommandOptionData {
|
export interface ApplicationCommandChoicesData extends BaseApplicationCommandOptionsData {
|
||||||
type: ApplicationCommandOptionType | ApplicationCommandOptionTypes;
|
type: CommandOptionChoiceResolvableType;
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
required?: boolean;
|
|
||||||
choices?: ApplicationCommandOptionChoice[];
|
choices?: ApplicationCommandOptionChoice[];
|
||||||
options?: ApplicationCommandOptionData[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ApplicationCommandOption extends ApplicationCommandOptionData {
|
export interface ApplicationCommandSubGroupData extends BaseApplicationCommandOptionsData {
|
||||||
|
type: 'SUB_COMMAND_GROUP' | ApplicationCommandOptionTypes.SUB_COMMAND_GROUP;
|
||||||
|
options?: ApplicationCommandSubCommandData[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApplicationCommandSubCommandData extends BaseApplicationCommandOptionsData {
|
||||||
|
type: 'SUB_COMMAND' | ApplicationCommandOptionTypes.SUB_COMMAND;
|
||||||
|
options?: (ApplicationCommandChoicesData | ApplicationCommandNonOptionsData)[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApplicationCommandNonOptionsData extends BaseApplicationCommandOptionsData {
|
||||||
|
type: CommandOptionNonChoiceResolvableType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ApplicationCommandOptionData =
|
||||||
|
| ApplicationCommandSubGroupData
|
||||||
|
| ApplicationCommandNonOptionsData
|
||||||
|
| ApplicationCommandChoicesData
|
||||||
|
| ApplicationCommandSubCommandData;
|
||||||
|
|
||||||
|
export type ApplicationCommandOption = ApplicationCommandOptionData & {
|
||||||
type: ApplicationCommandOptionType;
|
type: ApplicationCommandOptionType;
|
||||||
options?: ApplicationCommandOption[];
|
options?: ApplicationCommandOption[];
|
||||||
}
|
};
|
||||||
|
|
||||||
export interface ApplicationCommandOptionChoice {
|
export interface ApplicationCommandOptionChoice {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
import {
|
import {
|
||||||
ApplicationCommand,
|
ApplicationCommand,
|
||||||
|
ApplicationCommandChoicesData,
|
||||||
ApplicationCommandData,
|
ApplicationCommandData,
|
||||||
ApplicationCommandManager,
|
ApplicationCommandManager,
|
||||||
|
ApplicationCommandNonOptionsData,
|
||||||
|
ApplicationCommandOptionData,
|
||||||
ApplicationCommandResolvable,
|
ApplicationCommandResolvable,
|
||||||
|
ApplicationCommandSubCommandData,
|
||||||
|
ApplicationCommandSubGroupData,
|
||||||
CacheFactory,
|
CacheFactory,
|
||||||
Caches,
|
Caches,
|
||||||
CategoryChannel,
|
CategoryChannel,
|
||||||
@@ -13,6 +18,8 @@ import {
|
|||||||
CommandInteraction,
|
CommandInteraction,
|
||||||
CommandInteractionOption,
|
CommandInteractionOption,
|
||||||
CommandInteractionOptionResolver,
|
CommandInteractionOptionResolver,
|
||||||
|
CommandOptionChoiceResolvableType,
|
||||||
|
CommandOptionNonChoiceResolvableType,
|
||||||
Constants,
|
Constants,
|
||||||
DMChannel,
|
DMChannel,
|
||||||
Guild,
|
Guild,
|
||||||
@@ -56,6 +63,7 @@ import {
|
|||||||
User,
|
User,
|
||||||
VoiceChannel,
|
VoiceChannel,
|
||||||
} from '.';
|
} from '.';
|
||||||
|
import { ApplicationCommandOptionTypes, ApplicationCommandTypes } from './enums';
|
||||||
|
|
||||||
const client: Client = new Client({
|
const client: Client = new Client({
|
||||||
intents: Intents.FLAGS.GUILDS,
|
intents: Intents.FLAGS.GUILDS,
|
||||||
@@ -628,6 +636,40 @@ declare const applicationCommandManager: ApplicationCommandManager;
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare const applicationNonChoiceOptionData: ApplicationCommandOptionData & {
|
||||||
|
type: CommandOptionNonChoiceResolvableType;
|
||||||
|
};
|
||||||
|
{
|
||||||
|
// Options aren't allowed on this command type.
|
||||||
|
|
||||||
|
// @ts-expect-error
|
||||||
|
applicationNonChoiceOptionData.choices;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const applicationChoiceOptionData: ApplicationCommandOptionData & { type: CommandOptionChoiceResolvableType };
|
||||||
|
{
|
||||||
|
// Choices should be available.
|
||||||
|
applicationChoiceOptionData.choices;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const applicationSubGroupCommandData: ApplicationCommandSubGroupData;
|
||||||
|
{
|
||||||
|
assertType<'SUB_COMMAND_GROUP' | ApplicationCommandOptionTypes.SUB_COMMAND_GROUP>(
|
||||||
|
applicationSubGroupCommandData.type,
|
||||||
|
);
|
||||||
|
assertType<ApplicationCommandSubCommandData[] | undefined>(applicationSubGroupCommandData.options);
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const applicationSubCommandData: ApplicationCommandSubCommandData;
|
||||||
|
{
|
||||||
|
assertType<'SUB_COMMAND' | ApplicationCommandOptionTypes.SUB_COMMAND>(applicationSubCommandData.type);
|
||||||
|
|
||||||
|
// Check that only subcommands can have no subcommand or subcommand group sub-options.
|
||||||
|
assertType<(ApplicationCommandChoicesData | ApplicationCommandNonOptionsData)[] | undefined>(
|
||||||
|
applicationSubCommandData.options,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
declare const guildApplicationCommandManager: GuildApplicationCommandManager;
|
declare const guildApplicationCommandManager: GuildApplicationCommandManager;
|
||||||
assertType<Promise<Collection<Snowflake, ApplicationCommand>>>(guildApplicationCommandManager.fetch());
|
assertType<Promise<Collection<Snowflake, ApplicationCommand>>>(guildApplicationCommandManager.fetch());
|
||||||
assertType<Promise<Collection<Snowflake, ApplicationCommand>>>(guildApplicationCommandManager.fetch(undefined, {}));
|
assertType<Promise<Collection<Snowflake, ApplicationCommand>>>(guildApplicationCommandManager.fetch(undefined, {}));
|
||||||
|
|||||||
Reference in New Issue
Block a user