diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 926cc2773..3361fb57a 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -564,9 +564,7 @@ export abstract class CommandInteraction e | ModalComponentData, options?: ShowModalOptions, ): Promise> | undefined>; - public awaitModalSubmit( - options: AwaitModalSubmitOptions, - ): Promise>; + public awaitModalSubmit(options: AwaitModalSubmitOptions): Promise>; private transformOption( option: APIApplicationCommandOption, resolved: Extract['resolved'], @@ -603,7 +601,14 @@ export class BaseGuildEmoji extends Emoji { public requiresColons: boolean | null; } -export interface BaseGuildTextChannel extends TextBasedChannelFields {} +export interface BaseGuildTextChannel + extends TextBasedChannelFields, + PinnableChannelFields, + WebhookChannelFields, + BulkDeleteMethod, + SetRateLimitPerUserMethod, + MessageChannelFields, + SendMethod {} export class BaseGuildTextChannel extends GuildChannel { protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration; @@ -623,7 +628,13 @@ export class BaseGuildTextChannel extends GuildChannel { public setType(type: ChannelType.GuildAnnouncement, reason?: string): Promise; } -export interface BaseGuildVoiceChannel extends Omit, 'lastPinAt' | 'lastPinTimestamp'> {} +export interface BaseGuildVoiceChannel + extends TextBasedChannelFields, + WebhookChannelFields, + BulkDeleteMethod, + SetRateLimitPerUserMethod, + MessageChannelFields, + SendMethod {} export class BaseGuildVoiceChannel extends GuildChannel { public constructor(guild: Guild, data?: RawGuildChannelData); public bitrate: number; @@ -774,12 +785,20 @@ export interface IconData { proxyIconURL?: string; } -export interface EmbedAuthorData extends Omit, IconData {} +export interface EmbedAuthorData extends IconData { + name: string; + url?: string; +} -export interface EmbedFooterData extends Omit, IconData {} +export interface EmbedFooterData extends IconData { + text: string; +} -export interface EmbedAssetData extends Omit { +export interface EmbedAssetData { + height?: number; proxyURL?: string; + url: string; + width?: number; } export class Embed { @@ -897,7 +916,7 @@ export class Client extends BaseClient; - public options: Omit & { intents: IntentsBitField }; + public options: ClientOptions & { intents: IntentsBitField }; public get ping(): number | null; public get readyAt(): If; public readyTimestamp: If; @@ -1245,10 +1264,10 @@ export class PrimaryEntryPointCommandInteraction< } export interface DMChannel - extends Omit< - TextBasedChannelFields, - 'bulkDelete' | 'createWebhook' | 'fetchWebhooks' | 'setNSFW' | 'setRateLimitPerUser' - > {} + extends TextBasedChannelFields, + PinnableChannelFields, + MessageChannelFields, + SendMethod {} export class DMChannel extends BaseChannel { private constructor(client: Client, data?: RawDMChannelData); public flags: Readonly; @@ -1592,7 +1611,7 @@ export class GuildMemberFlagsBitField extends BitField { public static resolve(bit?: BitFieldResolvable): number; } -export interface GuildMember extends PartialTextBasedChannelFields {} +export interface GuildMember extends SendMethod {} export class GuildMember extends Base { private constructor(client: Client, data: unknown, guild: Guild); private readonly _roles: Snowflake[]; @@ -2095,10 +2114,7 @@ export interface MessageChannelCollectorOptionsParams< export interface AwaitMessageCollectorOptionsParams< ComponentType extends MessageComponentType, Cached extends boolean = boolean, -> extends Pick< - InteractionCollectorOptions[ComponentType]>, - keyof AwaitMessageComponentOptions - > { +> extends AwaitMessageComponentOptions[ComponentType]> { componentType?: ComponentType; } @@ -2347,9 +2363,7 @@ export class MessageComponentInteraction e | ModalComponentData, options?: ShowModalOptions, ): Promise> | undefined>; - public awaitModalSubmit( - options: AwaitModalSubmitOptions, - ): Promise>; + public awaitModalSubmit(options: AwaitModalSubmitOptions): Promise>; } export class MessageContextMenuCommandInteraction< @@ -2601,19 +2615,7 @@ export class OAuth2Guild extends BaseGuild { public permissions: Readonly; } -export interface PartialGroupDMChannel - extends Omit< - TextBasedChannelFields, - | 'awaitMessages' - | 'bulkDelete' - | 'createMessageCollector' - | 'createWebhook' - | 'fetchWebhooks' - | 'send' - | 'sendTyping' - | 'setNSFW' - | 'setRateLimitPerUser' - > {} +export interface PartialGroupDMChannel extends TextBasedChannelFields, PinnableChannelFields {} export class PartialGroupDMChannel extends BaseChannel { private constructor(client: Client, data: RawPartialGroupDMChannelData); public type: ChannelType.GroupDM; @@ -2648,20 +2650,7 @@ export interface DefaultReactionEmoji { name: string | null; } -export interface ThreadOnlyChannel - extends Omit< - TextBasedChannelFields, - | 'awaitMessageComponent' - | 'awaitMessages' - | 'bulkDelete' - | 'createMessageCollector' - | 'createMessageComponentCollector' - | 'lastMessage' - | 'lastPinAt' - | 'messages' - | 'send' - | 'sendTyping' - > {} +export interface ThreadOnlyChannel extends WebhookChannelFields, SetRateLimitPerUserMethod {} export abstract class ThreadOnlyChannel extends GuildChannel { public type: ChannelType.GuildForum | ChannelType.GuildMedia; public threads: GuildForumThreadManager; @@ -3392,7 +3381,12 @@ export interface PrivateThreadChannel extends ThreadChannel { } export interface ThreadChannel - extends Omit, 'createWebhook' | 'fetchWebhooks' | 'setNSFW'> {} + extends TextBasedChannelFields, + PinnableChannelFields, + BulkDeleteMethod, + SetRateLimitPerUserMethod, + MessageChannelFields, + SendMethod {} export class ThreadChannel extends BaseChannel { private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client); public archived: boolean | null; @@ -3513,7 +3507,7 @@ export class UnfurledMediaItem { public get url(): string; } -export interface User extends PartialTextBasedChannelFields {} +export interface User extends SendMethod {} export class User extends Base { protected constructor(client: Client, data: unknown); private _equals(user: APIUser): boolean; @@ -4036,7 +4030,7 @@ export class ApplicationCommandManager< guildId: Snowflake, ): Promise; public fetch( - options: Snowflake | (Omit & { id: Snowflake }), + options: Snowflake | (FetchGuildApplicationCommandFetchOptions & { id: Snowflake }), ): Promise; public fetch( options: FetchApplicationCommandOptions & { guildId: Snowflake; id: Snowflake }, @@ -4199,7 +4193,11 @@ export class SubscriptionManager extends CachedManager>; } -export interface FetchGuildApplicationCommandFetchOptions extends Omit {} +export interface FetchGuildApplicationCommandFetchOptions extends BaseFetchOptions { + id?: Snowflake; + locale?: Locale; + withLocalizations?: boolean; +} export class GuildApplicationCommandManager extends ApplicationCommandManager { private constructor(guild: Guild, iterable?: Iterable); @@ -4416,7 +4414,9 @@ export interface FetchGuildSoundboardSoundOptions extends BaseFetchOptions { soundboardSound: SoundboardSoundResolvable; } -export interface FetchGuildSoundboardSoundsOptions extends Pick {} +export interface FetchGuildSoundboardSoundsOptions { + cache?: boolean; +} export class GuildSoundboardSoundManager extends CachedManager { private constructor(guild: Guild, iterable?: Iterable); @@ -4658,34 +4658,48 @@ export class VoiceStateManager extends CachedManager = abstract new (...args: any[]) => Entity; -export interface PartialTextBasedChannelFields { +export interface SendMethod { send(options: MessageCreateOptions | MessagePayload | string): Promise>; } -export interface TextBasedChannelFields - extends PartialTextBasedChannelFields { - awaitMessageComponent( - options?: AwaitMessageCollectorOptionsParams, - ): Promise; - awaitMessages(options?: AwaitMessagesOptions): Promise>; +export interface PinnableChannelFields { + get lastPinAt(): Date | null; + lastPinTimestamp: number | null; +} + +export interface BulkDeleteMethod { bulkDelete( messages: Collection | number | readonly MessageResolvable[], filterOld?: boolean, ): Promise; +} + +export interface SetRateLimitPerUserMethod { + setRateLimitPerUser(rateLimitPerUser: number, reason?: string): Promise; +} + +export interface WebhookChannelFields { + createWebhook(options: ChannelWebhookCreateOptions): Promise>; + fetchWebhooks(): Promise>>; + setNSFW(nsfw?: boolean, reason?: string): Promise; +} + +export interface MessageChannelFields { + awaitMessages(options?: AwaitMessagesOptions): Promise>; createMessageCollector(options?: MessageCollectorOptions): MessageCollector; + sendTyping(): Promise; +} + +export interface TextBasedChannelFields { + awaitMessageComponent( + options?: AwaitMessageCollectorOptionsParams, + ): Promise; createMessageComponentCollector( options?: MessageChannelCollectorOptionsParams, ): InteractionCollector; - createWebhook(options: ChannelWebhookCreateOptions): Promise>; - fetchWebhooks(): Promise>>; get lastMessage(): Message | null; lastMessageId: Snowflake | null; - get lastPinAt(): Date | null; - lastPinTimestamp: number | null; messages: If>; - sendTyping(): Promise; - setNSFW(nsfw?: boolean, reason?: string): Promise; - setRateLimitPerUser(rateLimitPerUser: number, reason?: string): Promise; } export interface PartialWebhookFields { @@ -4714,16 +4728,17 @@ export interface WebhookFields extends PartialWebhookFields { // #region Typedefs -export interface ActivitiesOptions extends Omit {} - -export interface ActivityOptions { +export interface ActivitiesOptions { name: string; - shardId?: number | readonly number[]; state?: string; type?: ActivityType; url?: string; } +export interface ActivityOptions extends ActivitiesOptions { + shardId?: number | readonly number[]; +} + export interface AddGuildMemberOptions { accessToken: string; deaf?: boolean; @@ -4785,12 +4800,13 @@ export type CommandOptionNonChoiceResolvableType = Exclude< CommandOptionChannelResolvableType | CommandOptionChoiceResolvableType | CommandOptionSubOptionResolvableType >; -export interface BaseApplicationCommandOptionsData { - autocomplete?: never; +export interface CommonBaseApplicationCommandOptionsData { description: string; descriptionLocalizations?: LocalizationMap; name: string; nameLocalizations?: LocalizationMap; +} +export interface BaseApplicationCommandOptionsData extends CommonBaseApplicationCommandOptionsData { required?: boolean; } @@ -4861,24 +4877,21 @@ export interface ApplicationCommandAttachmentOption extends BaseApplicationComma type: ApplicationCommandOptionType.Attachment; } -export interface ApplicationCommandAutocompleteNumericOption - extends Omit { +export interface ApplicationCommandAutocompleteNumericOption extends BaseApplicationCommandOptionsData { autocomplete: true; maxValue?: number; minValue?: number; type: CommandOptionNumericResolvableType; } -export interface ApplicationCommandAutocompleteStringOption - extends Omit { +export interface ApplicationCommandAutocompleteStringOption extends BaseApplicationCommandOptionsData { autocomplete: true; maxLength?: number; minLength?: number; type: ApplicationCommandOptionType.String; } -export interface ApplicationCommandAutocompleteNumericOptionData - extends Omit { +export interface ApplicationCommandAutocompleteNumericOptionData extends BaseApplicationCommandOptionsData { autocomplete: true; maxValue?: number; max_value?: number; @@ -4887,8 +4900,7 @@ export interface ApplicationCommandAutocompleteNumericOptionData type: CommandOptionNumericResolvableType; } -export interface ApplicationCommandAutocompleteStringOptionData - extends Omit { +export interface ApplicationCommandAutocompleteStringOptionData extends BaseApplicationCommandOptionsData { autocomplete: true; maxLength?: number; max_length?: number; @@ -4898,14 +4910,14 @@ export interface ApplicationCommandAutocompleteStringOptionData } export interface ApplicationCommandChoicesData - extends Omit { + extends BaseApplicationCommandOptionsData { autocomplete?: false; choices?: readonly ApplicationCommandOptionChoiceData[]; type: CommandOptionChoiceResolvableType; } export interface ApplicationCommandChoicesOption - extends Omit { + extends BaseApplicationCommandOptionsData { autocomplete?: false; choices?: readonly ApplicationCommandOptionChoiceData[]; type: CommandOptionChoiceResolvableType; @@ -4947,17 +4959,17 @@ export interface ApplicationCommandBooleanOption extends BaseApplicationCommandO type: ApplicationCommandOptionType.Boolean; } -export interface ApplicationCommandSubGroupData extends Omit { +export interface ApplicationCommandSubGroupData extends CommonBaseApplicationCommandOptionsData { options: readonly ApplicationCommandSubCommandData[]; type: ApplicationCommandOptionType.SubcommandGroup; } -export interface ApplicationCommandSubGroup extends Omit { +export interface ApplicationCommandSubGroup extends CommonBaseApplicationCommandOptionsData { options?: readonly ApplicationCommandSubCommand[]; type: ApplicationCommandOptionType.SubcommandGroup; } -export interface ApplicationCommandSubCommandData extends Omit { +export interface ApplicationCommandSubCommandData extends CommonBaseApplicationCommandOptionsData { options?: readonly Exclude< ApplicationCommandOptionData, ApplicationCommandSubCommandData | ApplicationCommandSubGroupData @@ -4965,7 +4977,7 @@ export interface ApplicationCommandSubCommandData extends Omit { +export interface ApplicationCommandSubCommand extends CommonBaseApplicationCommandOptionsData { options?: readonly Exclude[]; type: ApplicationCommandOptionType.Subcommand; } @@ -5068,7 +5080,12 @@ export interface AutoModerationAction { type: AutoModerationActionType; } -export interface AutoModerationActionMetadata { +export interface BaseAutoModerationActionMetadata { + customMessage?: string | null; + durationSeconds?: number | null; +} + +export interface AutoModerationActionMetadata extends BaseAutoModerationActionMetadata { channelId: Snowflake | null; customMessage: string | null; durationSeconds: number | null; @@ -5084,13 +5101,12 @@ export interface AutoModerationTriggerMetadata { } export interface AwaitMessageComponentOptions - extends Omit, 'max' | 'maxComponents' | 'maxUsers'> {} + extends CollectorOptions<[Interaction, Collection]> { + componentType?: ComponentType; +} -export interface ModalSubmitInteractionCollectorOptions - extends Omit, 'channel' | 'guild' | 'interactionType' | 'message'> {} - -export interface AwaitModalSubmitOptions - extends Omit, 'max' | 'maxComponents' | 'maxUsers'> { +export interface AwaitModalSubmitOptions + extends CollectorOptions<[ModalSubmitInteraction, Collection]> { time: number; } @@ -5380,8 +5396,7 @@ export interface ClientFetchInviteOptions { guildScheduledEventId?: Snowflake; } -export interface ClientOptions { - allowedMentions?: MessageMentionOptions; +export interface ClientOptions extends WebhookClientOptions { closeTimeout?: number; enforceNonce?: boolean; failIfNotExists?: boolean; @@ -5390,7 +5405,6 @@ export interface ClientOptions { makeCache?: CacheFactory; partials?: readonly Partials[]; presence?: PresenceData; - rest?: Partial; sweepers?: SweeperOptions; waitGuildTimeout?: number; ws?: Partial; @@ -5455,8 +5469,9 @@ export interface CommandInteractionResolvedData; } -export interface AutocompleteFocusedOption extends Pick { +export interface AutocompleteFocusedOption { focused: true; + name: string; type: | ApplicationCommandOptionType.Integer | ApplicationCommandOptionType.Number @@ -5652,11 +5667,8 @@ export type EmojiIdentifierResolvable = export type EmojiResolvable = ApplicationEmoji | GuildEmoji | ReactionEmoji | Snowflake; -export interface FetchApplicationCommandOptions extends BaseFetchOptions { +export interface FetchApplicationCommandOptions extends FetchGuildApplicationCommandFetchOptions { guildId?: Snowflake; - id?: Snowflake; - locale?: Locale; - withLocalizations?: boolean; } export interface FetchArchivedThreadOptions { @@ -5955,28 +5967,32 @@ export type GuildBanResolvable = GuildBan | UserResolvable; export type GuildChannelResolvable = GuildBasedChannel | Snowflake; -export interface AutoModerationRuleCreateOptions { +export interface AutoModerationRuleCreateOptions extends AutoModerationRuleEditOptions { actions: readonly AutoModerationActionOptions[]; - enabled?: boolean; eventType: AutoModerationRuleEventType; - exemptChannels?: ReadonlyCollection | readonly GuildChannelResolvable[]; - exemptRoles?: ReadonlyCollection | readonly RoleResolvable[]; name: string; - reason?: string; - triggerMetadata?: AutoModerationTriggerMetadataOptions; triggerType: AutoModerationRuleTriggerType; } -export interface AutoModerationRuleEditOptions extends Partial> {} +export interface AutoModerationRuleEditOptions { + actions?: readonly AutoModerationActionOptions[]; + enabled?: boolean; + eventType?: AutoModerationRuleEventType; + exemptChannels?: ReadonlyCollection | readonly GuildChannelResolvable[]; + exemptRoles?: ReadonlyCollection | readonly RoleResolvable[]; + name?: string; + reason?: string; + triggerMetadata?: AutoModerationTriggerMetadataOptions; +} -export interface AutoModerationTriggerMetadataOptions extends Partial {} +export interface AutoModerationTriggerMetadataOptions extends AutoModerationTriggerMetadata {} export interface AutoModerationActionOptions { metadata?: AutoModerationActionMetadataOptions; type: AutoModerationActionType; } -export interface AutoModerationActionMetadataOptions extends Partial> { +export interface AutoModerationActionMetadataOptions extends BaseAutoModerationActionMetadata { channel?: GuildTextChannelResolvable | ThreadChannel; } @@ -6317,7 +6333,7 @@ export interface InteractionDeferUpdateOptions { withResponse?: boolean; } -export interface InteractionReplyOptions extends BaseMessageOptionsWithPoll { +export interface InteractionReplyOptions extends BaseMessageOptions, MessageOptionsPoll { flags?: | BitFieldResolvable< Extract, @@ -6416,10 +6432,18 @@ export type CollectedMessageInteraction = >; export interface MessageComponentCollectorOptions - extends Omit, 'channel' | 'guild' | 'interactionType' | 'message'> {} + extends AwaitMessageComponentOptions { + max?: number; + maxComponents?: number; + maxUsers?: number; +} -export interface MessageChannelComponentCollectorOptions - extends Omit, 'channel' | 'guild' | 'interactionType'> {} +export interface MessageChannelComponentCollectorOptions< + Interaction extends CollectedMessageInteraction, + Cached extends CacheType = CacheType, +> extends MessageComponentCollectorOptions { + message?: CacheTypeReducer; +} export interface MessageInteractionMetadata { authorizingIntegrationOwners: APIAuthorizingIntegrationOwnersMap; @@ -6488,30 +6512,45 @@ export interface BaseMessageOptions { )[]; } -export interface BaseMessageOptionsWithPoll extends BaseMessageOptions { +export interface MessageOptionsPoll { poll?: JSONEncodable | PollData; } -export interface BaseMessageCreateOptions extends BaseMessageOptionsWithPoll { - enforceNonce?: boolean; +export interface MessageOptionsFlags { flags?: | BitFieldResolvable< Extract, MessageFlags.IsComponentsV2 | MessageFlags.SuppressEmbeds | MessageFlags.SuppressNotifications > | undefined; - nonce?: number | string; - stickers?: readonly StickerResolvable[]; +} + +export interface MessageOptionsTTS { tts?: boolean; } +export interface MessageOptionsStickers { + stickers?: readonly StickerResolvable[]; +} + +export interface BaseMessageCreateOptions + extends BaseMessageOptions, + MessageOptionsPoll, + MessageOptionsFlags, + MessageOptionsTTS, + MessageOptionsStickers { + enforceNonce?: boolean; + nonce?: number | string; +} + export interface MessageCreateOptions extends BaseMessageCreateOptions { messageReference?: MessageReferenceOptions; } export interface GuildForumThreadMessageCreateOptions extends BaseMessageOptions, - Pick {} + MessageOptionsFlags, + MessageOptionsStickers {} export interface MessageEditAttachmentData { id: Snowflake; @@ -7031,7 +7070,10 @@ export interface WebhookClientDataURL { url: string; } -export interface WebhookClientOptions extends Pick {} +export interface WebhookClientOptions { + allowedMentions?: MessageMentionOptions; + rest?: Partial; +} export interface WebhookDeleteOptions { reason?: string; @@ -7050,9 +7092,7 @@ export interface WebhookMessageEditOptions extends MessageEditOptions { withComponents?: boolean; } -export interface InteractionEditReplyOptions - extends WebhookMessageEditOptions, - Pick { +export interface InteractionEditReplyOptions extends WebhookMessageEditOptions, MessageOptionsPoll { message?: MessageResolvable | '@original'; } @@ -7060,7 +7100,11 @@ export interface WebhookFetchMessageOptions { threadId?: Snowflake; } -export interface WebhookMessageCreateOptions extends Omit { +export interface WebhookMessageCreateOptions + extends BaseMessageOptions, + MessageOptionsPoll, + MessageOptionsFlags, + MessageOptionsTTS { appliedTags?: readonly Snowflake[]; avatarURL?: string; threadId?: Snowflake; diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 0dea9ece1..0ec7fe3bb 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -152,7 +152,6 @@ import type { PartialMessageReaction, PartialPoll, PartialPollAnswer, - PartialTextBasedChannelFields, PartialThreadMember, PartialUser, Poll, @@ -171,6 +170,7 @@ import type { SectionComponentData, SelectMenuInteraction, SendableChannels, + SendMethod, SeparatorComponentData, Serialized, Shard, @@ -184,7 +184,6 @@ import type { StringSelectMenuComponent, StringSelectMenuComponentData, StringSelectMenuInteraction, - TextBasedChannelFields, TextBasedChannel, TextBasedChannelTypes, ThreadManager, @@ -1519,13 +1518,13 @@ expectType(threadChannelFromForum.parent); expectType(threadChannelNotFromForum.parent); // Test whether the structures implement send -expectType['send']>(dmChannel.send); -expectType['send']>(threadChannel.send); -expectType['send']>(announcementChannel.send); -expectType['send']>(textChannel.send); -expectType['send']>(voiceChannel.send); -expectAssignable(user); -expectAssignable(guildMember); +expectType['send']>(dmChannel.send); +expectType['send']>(threadChannel.send); +expectType['send']>(announcementChannel.send); +expectType['send']>(textChannel.send); +expectType['send']>(voiceChannel.send); +expectAssignable(user); +expectAssignable(guildMember); expectType>(textChannel.setType(ChannelType.GuildAnnouncement)); expectType>(announcementChannel.setType(ChannelType.GuildText));