diff --git a/packages/discord.js/src/index.js b/packages/discord.js/src/index.js
index c04225c34882..d2f0ff799947 100644
--- a/packages/discord.js/src/index.js
+++ b/packages/discord.js/src/index.js
@@ -143,6 +143,9 @@ exports.GuildScheduledEvent = require('./structures/GuildScheduledEvent').GuildS
exports.GuildTemplate = require('./structures/GuildTemplate');
exports.Integration = require('./structures/Integration');
exports.IntegrationApplication = require('./structures/IntegrationApplication');
+exports.InteractionCallback = require('./structures/InteractionCallback');
+exports.InteractionCallbackResource = require('./structures/InteractionCallbackResource');
+exports.InteractionCallbackResponse = require('./structures/InteractionCallbackResponse');
exports.BaseInteraction = require('./structures/BaseInteraction');
exports.InteractionCollector = require('./structures/InteractionCollector');
exports.InteractionResponse = require('./structures/InteractionResponse');
diff --git a/packages/discord.js/src/structures/InteractionCallback.js b/packages/discord.js/src/structures/InteractionCallback.js
new file mode 100644
index 000000000000..4abc831470e9
--- /dev/null
+++ b/packages/discord.js/src/structures/InteractionCallback.js
@@ -0,0 +1,74 @@
+'use strict';
+
+const { DiscordSnowflake } = require('@sapphire/snowflake');
+
+/**
+ * Represents an interaction callback response from Discord
+ */
+class InteractionCallback {
+ constructor(client, data) {
+ /**
+ * The client that instantiated this.
+ * @name InteractionCallback#client
+ * @type {Client}
+ * @readonly
+ */
+ Object.defineProperty(this, 'client', { value: client });
+
+ /**
+ * The id of the original interaction response
+ * @type {Snowflake}
+ */
+ this.id = data.id;
+
+ /**
+ * The type of the original interaction
+ * @type {InteractionType}
+ */
+ this.type = data.type;
+
+ /**
+ * The instance id of the Activity if one was launched or joined
+ * @type {?string}
+ */
+ this.activityInstanceId = data.activity_instance_id ?? null;
+
+ /**
+ * The id of the message that was created by the interaction
+ * @type {?Snowflake}
+ */
+ this.responseMessageId = data.response_message_id ?? null;
+
+ /**
+ * Whether the message is in a loading state
+ * @type {?boolean}
+ */
+ this.responseMessageLoading = data.response_message_loading ?? null;
+
+ /**
+ * Whether the response message was ephemeral
+ * @type {?boolean}
+ */
+ this.responseMessageEphemeral = data.response_message_ephemeral ?? null;
+ }
+
+ /**
+ * The timestamp the original interaction was created at
+ * @type {number}
+ * @readonly
+ */
+ get createdTimestamp() {
+ return DiscordSnowflake.timestampFrom(this.id);
+ }
+
+ /**
+ * The time the original interaction was created at
+ * @type {Date}
+ * @readonly
+ */
+ get createdAt() {
+ return new Date(this.createdTimestamp);
+ }
+}
+
+module.exports = InteractionCallback;
diff --git a/packages/discord.js/src/structures/InteractionCallbackResource.js b/packages/discord.js/src/structures/InteractionCallbackResource.js
new file mode 100644
index 000000000000..ffb088d8100e
--- /dev/null
+++ b/packages/discord.js/src/structures/InteractionCallbackResource.js
@@ -0,0 +1,52 @@
+'use strict';
+
+const { lazy } = require('@discordjs/util');
+
+const getMessage = lazy(() => require('./Message').Message);
+
+/**
+ * Represents the resource that was created by the interaction response.
+ */
+class InteractionCallbackResource {
+ constructor(client, data) {
+ /**
+ * The client that instantiated this
+ * @name InteractionCallbackResource#client
+ * @type {Client}
+ * @readonly
+ */
+ Object.defineProperty(this, 'client', { value: client });
+
+ /**
+ * The interaction callback type
+ * @type {InteractionResponseType}
+ */
+ this.type = data.type;
+
+ /**
+ * The Activity launched by an interaction
+ * @typedef {Object} ActivityInstance
+ * @property {string} id The instance id of the Activity
+ */
+
+ /**
+ * Represents the Activity launched by this interaction
+ * @type {?ActivityInstance}
+ */
+ this.activityInstance = data.activity_instance ?? null;
+
+ if ('message' in data) {
+ /**
+ * The message created by the interaction
+ * @type {?Message}
+ */
+ this.message =
+ this.client.channels.cache.get(data.message.channel_id)?.messages._add(data.message) ??
+ new (getMessage())(client, data.message);
+ } else {
+ this.message = null;
+ }
+ }
+}
+
+module.exports = InteractionCallbackResource;
diff --git a/packages/discord.js/src/structures/InteractionCallbackResponse.js b/packages/discord.js/src/structures/InteractionCallbackResponse.js
new file mode 100644
index 000000000000..c114648398ae
--- /dev/null
+++ b/packages/discord.js/src/structures/InteractionCallbackResponse.js
@@ -0,0 +1,33 @@
+'use strict';
+
+const InteractionCallback = require('./InteractionCallback');
+const InteractionCallbackResource = require('./InteractionCallbackResource');
+
+/**
+ * Represents an interaction's response
+ */
+class InteractionCallbackResponse {
+ constructor(client, data) {
+ /**
+ * The client that instantiated this
+ * @name InteractionCallbackResponse#client
+ * @type {Client}
+ * @readonly
+ */
+ Object.defineProperty(this, 'client', { value: client });
+
+ /**
+ * The interaction object associated with the interaction callback response
+ * @type {InteractionCallback}
+ */
+ this.interaction = new InteractionCallback(client, data.interaction);
+
+ /**
+ * The resource that was created by the interaction response
+ * @type {?InteractionCallbackResource}
+ */
+ this.resource = data.resource ? new InteractionCallbackResource(client, data.resource) : null;
+ }
+}
+
+module.exports = InteractionCallbackResponse;
diff --git a/packages/discord.js/src/structures/interfaces/InteractionResponses.js b/packages/discord.js/src/structures/interfaces/InteractionResponses.js
index e448e19fd17e..3610b2e47bdd 100644
--- a/packages/discord.js/src/structures/interfaces/InteractionResponses.js
+++ b/packages/discord.js/src/structures/interfaces/InteractionResponses.js
@@ -1,8 +1,10 @@
'use strict';
+const { makeURLSearchParams } = require('@discordjs/rest');
const { isJSONEncodable } = require('@discordjs/util');
const { InteractionResponseType, MessageFlags, Routes, InteractionType } = require('discord-api-types/v10');
const { DiscordjsError, ErrorCodes } = require('../../errors');
+const InteractionCallbackResponse = require('../InteractionCallbackResponse');
const InteractionCollector = require('../InteractionCollector');
const InteractionResponse = require('../InteractionResponse');
const MessagePayload = require('../MessagePayload');
@@ -23,21 +25,21 @@ class InteractionResponses {
* Options for deferring the reply to an {@link BaseInteraction}.
* @typedef {Object} InteractionDeferReplyOptions
* @property {MessageFlagsResolvable} [flags] Flags for the reply.
+ * @property {boolean} [withResponse] Whether to return an {@link InteractionCallbackResponse} as the response
* Only `MessageFlags.Ephemeral` can be set.
- * @property {boolean} [fetchReply] Whether to fetch the reply
*/
/**
* Options for deferring and updating the reply to a {@link MessageComponentInteraction}.
* @typedef {Object} InteractionDeferUpdateOptions
- * @property {boolean} [fetchReply] Whether to fetch the reply
+ * @property {boolean} [withResponse] Whether to return an {@link InteractionCallbackResponse} as the response
*/
/**
* Options for a reply to a {@link BaseInteraction}.
* @typedef {BaseMessageOptionsWithPoll} InteractionReplyOptions
* @property {boolean} [tts=false] Whether the message should be spoken aloud
- * @property {boolean} [fetchReply] Whether to fetch the reply
+ * @property {boolean} [withResponse] Whether to return an {@link InteractionCallbackResponse} as the response
* @property {MessageFlagsResolvable} [flags] Which flags to set for the message.
* Only `MessageFlags.Ephemeral`, `MessageFlags.SuppressEmbeds`, and `MessageFlags.SuppressNotifications`
* can be set.
@@ -46,13 +48,19 @@ class InteractionResponses {
/**
* Options for updating the message received from a {@link MessageComponentInteraction}.
* @typedef {MessageEditOptions} InteractionUpdateOptions
- * @property {boolean} [fetchReply] Whether to fetch the reply
+ * @property {boolean} [withResponse] Whether to return an {@link InteractionCallbackResponse} as the response
+ */
+
+ /**
+ * Options for showing a modal in response to a {@link BaseInteraction}
+ * @typedef {Object} ShowModalOptions
+ * @property {boolean} [withResponse] Whether to return an {@link InteractionCallbackResponse} as the response
*/
/**
* Defers the reply to this interaction.
* @param {InteractionDeferReplyOptions} [options] Options for deferring the reply to this interaction
- * @returns {Promise}
+ * @returns {Promise}
* @example
* // Defer the reply to this interaction
* interaction.deferReply()
@@ -67,7 +75,7 @@ class InteractionResponses {
async deferReply(options = {}) {
if (this.deferred || this.replied) throw new DiscordjsError(ErrorCodes.InteractionAlreadyReplied);
- await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
+ const response = await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
body: {
type: InteractionResponseType.DeferredChannelMessageWithSource,
data: {
@@ -75,22 +83,26 @@ class InteractionResponses {
},
},
auth: false,
+ query: makeURLSearchParams({ with_response: options.withResponse ?? false }),
});
this.deferred = true;
this.ephemeral = Boolean(options.flags & MessageFlags.Ephemeral);
- return options.fetchReply ? this.fetchReply() : new InteractionResponse(this);
+
+ return options.withResponse
+ ? new InteractionCallbackResponse(this.client, response)
+ : new InteractionResponse(this);
}
/**
* Creates a reply to this interaction.
- * Use the `fetchReply` option to get the bot's reply message.
+ * Use the `withResponse` option to get the interaction callback response.
* @param {string|MessagePayload|InteractionReplyOptions} options The options for the reply
- * @returns {Promise}
+ * @returns {Promise}
* @example
* // Reply to the interaction and fetch the response
- * interaction.reply({ content: 'Pong!', fetchReply: true })
- * .then((message) => console.log(`Reply sent with content ${message.content}`))
+ * interaction.reply({ content: 'Pong!', withResponse: true })
+ * .then((response) => console.log(`Reply sent with content ${response.resource.message.content}`))
* .catch(console.error);
* @example
* // Create an ephemeral reply with an embed
@@ -109,18 +121,22 @@ class InteractionResponses {
const { body: data, files } = await messagePayload.resolveBody().resolveFiles();
- await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
+ const response = await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
body: {
type: InteractionResponseType.ChannelMessageWithSource,
data,
},
files,
auth: false,
+ query: makeURLSearchParams({ with_response: options.withResponse ?? false }),
});
this.ephemeral = Boolean(options.flags & MessageFlags.Ephemeral);
this.replied = true;
- return options.fetchReply ? this.fetchReply() : new InteractionResponse(this);
+
+ return options.withResponse
+ ? new InteractionCallbackResponse(this.client, response)
+ : new InteractionResponse(this);
}
/**
@@ -192,7 +208,7 @@ class InteractionResponses {
/**
* Defers an update to the message to which the component was attached.
* @param {InteractionDeferUpdateOptions} [options] Options for deferring the update to this interaction
- * @returns {Promise}
+ * @returns {Promise}
* @example
* // Defer updating and reset the component's loading state
* interaction.deferUpdate()
@@ -201,21 +217,24 @@ class InteractionResponses {
*/
async deferUpdate(options = {}) {
if (this.deferred || this.replied) throw new DiscordjsError(ErrorCodes.InteractionAlreadyReplied);
- await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
+ const response = await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
body: {
type: InteractionResponseType.DeferredMessageUpdate,
},
auth: false,
+ query: makeURLSearchParams({ with_response: options.withResponse ?? false }),
});
this.deferred = true;
- return options.fetchReply ? this.fetchReply() : new InteractionResponse(this, this.message?.interaction?.id);
+ return options.withResponse
+ ? new InteractionCallbackResponse(this.client, response)
+ : new InteractionResponse(this, this.message?.interaction?.id);
}
/**
* Updates the original message of the component on which the interaction was received on.
* @param {string|MessagePayload|InteractionUpdateOptions} options The options for the updated message
- * @returns {Promise}
+ * @returns {Promise}
* @example
* // Remove the components from the message
* interaction.update({
@@ -234,34 +253,41 @@ class InteractionResponses {
const { body: data, files } = await messagePayload.resolveBody().resolveFiles();
- await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
+ const response = await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
body: {
type: InteractionResponseType.UpdateMessage,
data,
},
files,
auth: false,
+ query: makeURLSearchParams({ with_response: options.withResponse ?? false }),
});
this.replied = true;
- return options.fetchReply ? this.fetchReply() : new InteractionResponse(this, this.message.interaction?.id);
+ return options.withResponse
+ ? new InteractionCallbackResponse(this.client, response)
+ : new InteractionResponse(this, this.message.interaction?.id);
}
/**
* Shows a modal component
* @param {ModalBuilder|ModalComponentData|APIModalInteractionResponseCallbackData} modal The modal to show
- * @returns {Promise}
+ * @param {ShowModalOptions} [options={}] The options for sending this interaction response
+ * @returns {Promise}
*/
- async showModal(modal) {
+ async showModal(modal, options = {}) {
if (this.deferred || this.replied) throw new DiscordjsError(ErrorCodes.InteractionAlreadyReplied);
- await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
+ const response = await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
body: {
type: InteractionResponseType.Modal,
data: isJSONEncodable(modal) ? modal.toJSON() : this.client.options.jsonTransformer(modal),
},
auth: false,
+ query: makeURLSearchParams({ with_response: options.withResponse ?? false }),
});
this.replied = true;
+
+ return options.withResponse ? new InteractionCallbackResponse(this.client, response) : undefined;
}
/**
diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts
index dce9f783d199..812431f7c290 100644
--- a/packages/discord.js/typings/index.d.ts
+++ b/packages/discord.js/typings/index.d.ts
@@ -168,6 +168,11 @@ import {
SubscriptionStatus,
GatewaySendPayload,
GatewayDispatchPayload,
+ RESTPostAPIInteractionCallbackWithResponseResult,
+ RESTAPIInteractionCallbackObject,
+ RESTAPIInteractionCallbackResourceObject,
+ InteractionResponseType,
+ RESTAPIInteractionCallbackActivityInstanceResource,
VoiceChannelEffectSendAnimationType,
GatewayVoiceChannelEffectSendDispatchData,
} from 'discord-api-types/v10';
@@ -563,8 +568,8 @@ export abstract class CommandInteraction e
public inCachedGuild(): this is CommandInteraction<'cached'>;
public inRawGuild(): this is CommandInteraction<'raw'>;
public deferReply(
- options: InteractionDeferReplyOptions & { fetchReply: true },
- ): Promise>>;
+ options: InteractionDeferReplyOptions & { withResponse: true },
+ ): Promise;
public deferReply(options?: InteractionDeferReplyOptions): Promise>>;
public deleteReply(message?: MessageResolvable | '@original'): Promise;
public editReply(
@@ -572,7 +577,7 @@ export abstract class CommandInteraction e
): Promise>>;
public fetchReply(message?: Snowflake | '@original'): Promise>>;
public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>;
- public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>;
+ public reply(options: InteractionReplyOptions & { withResponse: true }): Promise;
public reply(
options: string | MessagePayload | InteractionReplyOptions,
): Promise>>;
@@ -581,7 +586,15 @@ export abstract class CommandInteraction e
| JSONEncodable
| ModalComponentData
| APIModalInteractionResponseCallbackData,
- ): Promise;
+ options: ShowModalOptions & { withResponse: true },
+ ): Promise;
+ public showModal(
+ modal:
+ | JSONEncodable
+ | ModalComponentData
+ | APIModalInteractionResponseCallbackData,
+ options?: ShowModalOptions,
+ ): Promise;
public awaitModalSubmit(
options: AwaitModalSubmitOptions,
): Promise>;
@@ -1982,6 +1995,33 @@ export class BaseInteraction extends Base
public isRepliable(): this is RepliableInteraction;
}
+export class InteractionCallback {
+ private constructor(client: Client, data: RESTAPIInteractionCallbackObject);
+ public activityInstanceId: string | null;
+ public readonly client: Client;
+ public get createdAt(): Date;
+ public get createdTimestamp(): number;
+ public id: Snowflake;
+ public responseMessageEphemeral: boolean | null;
+ public responseMessageId: Snowflake | null;
+ public responseMessageLoading: boolean | null;
+ public type: InteractionType;
+}
+
+export class InteractionCallbackResponse {
+ private constructor(client: Client, data: RESTPostAPIInteractionCallbackWithResponseResult);
+ public readonly client: Client;
+ public interaction: InteractionCallback;
+ public resource: InteractionCallbackResource | null;
+}
+
+export class InteractionCallbackResource {
+ private constructor(client: Client, data: RESTAPIInteractionCallbackResourceObject);
+ public activityInstance: RESTAPIInteractionCallbackActivityInstanceResource | null;
+ public message: Message | null;
+ public type: InteractionResponseType;
+}
+
export class InteractionCollector extends Collector<
Snowflake,
Interaction,
@@ -2297,12 +2337,12 @@ export class MessageComponentInteraction e
public inCachedGuild(): this is MessageComponentInteraction<'cached'>;
public inRawGuild(): this is MessageComponentInteraction<'raw'>;
public deferReply(
- options: InteractionDeferReplyOptions & { fetchReply: true },
- ): Promise>>;
+ options: InteractionDeferReplyOptions & { withResponse: true },
+ ): Promise;
public deferReply(options?: InteractionDeferReplyOptions): Promise>>;
public deferUpdate(
- options: InteractionDeferUpdateOptions & { fetchReply: true },
- ): Promise>>;
+ options: InteractionDeferUpdateOptions & { withResponse: true },
+ ): Promise;
public deferUpdate(options?: InteractionDeferUpdateOptions): Promise>>;
public deleteReply(message?: MessageResolvable | '@original'): Promise;
public editReply(
@@ -2310,11 +2350,11 @@ export class MessageComponentInteraction e
): Promise>>;
public fetchReply(message?: Snowflake | '@original'): Promise>>;
public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>;
- public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>;
+ public reply(options: InteractionReplyOptions & { withResponse: true }): Promise;
public reply(
options: string | MessagePayload | InteractionReplyOptions,
): Promise>>;
- public update(options: InteractionUpdateOptions & { fetchReply: true }): Promise>>;
+ public update(options: InteractionUpdateOptions & { withResponse: true }): Promise;
public update(
options: string | MessagePayload | InteractionUpdateOptions,
): Promise>>;
@@ -2323,7 +2363,15 @@ export class MessageComponentInteraction e
| JSONEncodable
| ModalComponentData
| APIModalInteractionResponseCallbackData,
- ): Promise;
+ options: ShowModalOptions & { withResponse: true },
+ ): Promise;
+ public showModal(
+ modal:
+ | JSONEncodable
+ | ModalComponentData
+ | APIModalInteractionResponseCallbackData,
+ options?: ShowModalOptions,
+ ): Promise;
public awaitModalSubmit(
options: AwaitModalSubmitOptions,
): Promise>;
@@ -2491,7 +2539,7 @@ export interface ModalMessageModalSubmitInteraction {
message: Message>;
channelId: Snowflake;
- update(options: InteractionUpdateOptions & { fetchReply: true }): Promise;
+ update(options: InteractionUpdateOptions & { withResponse: true }): Promise;
update(
options: string | MessagePayload | InteractionUpdateOptions,
): Promise>>;
@@ -2511,7 +2559,7 @@ export class ModalSubmitInteraction extend
public message: Message> | null;
public replied: boolean;
public readonly webhook: InteractionWebhook;
- public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>;
+ public reply(options: InteractionReplyOptions & { withResponse: true }): Promise;
public reply(
options: string | MessagePayload | InteractionReplyOptions,
): Promise>>;
@@ -2520,14 +2568,14 @@ export class ModalSubmitInteraction extend
options: string | MessagePayload | InteractionEditReplyOptions,
): Promise>>;
public deferReply(
- options: InteractionDeferReplyOptions & { fetchReply: true },
- ): Promise>>;
+ options: InteractionDeferReplyOptions & { withResponse: true },
+ ): Promise;
public deferReply(options?: InteractionDeferReplyOptions): Promise>>;
public fetchReply(message?: Snowflake | '@original'): Promise>>;
public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>;
public deferUpdate(
- options: InteractionDeferUpdateOptions & { fetchReply: true },
- ): Promise>>;
+ options: InteractionDeferUpdateOptions & { withResponse: true },
+ ): Promise;
public deferUpdate(options?: InteractionDeferUpdateOptions): Promise>>;
public inGuild(): this is ModalSubmitInteraction<'raw' | 'cached'>;
public inCachedGuild(): this is ModalSubmitInteraction<'cached'>;
@@ -6147,16 +6195,15 @@ export interface InteractionDeferReplyOptions {
Extract,
MessageFlags.Ephemeral | MessageFlags.SuppressEmbeds | MessageFlags.SuppressNotifications
>;
- fetchReply?: boolean;
+ withResponse?: boolean;
}
export interface InteractionDeferUpdateOptions {
- fetchReply?: boolean;
+ withResponse?: boolean;
}
export interface InteractionReplyOptions extends BaseMessageOptionsWithPoll {
tts?: boolean;
- fetchReply?: boolean;
flags?: BitFieldResolvable<
Extract,
MessageFlags.Ephemeral | MessageFlags.SuppressEmbeds | MessageFlags.SuppressNotifications
@@ -6164,7 +6211,7 @@ export interface InteractionReplyOptions extends BaseMessageOptionsWithPoll {
}
export interface InteractionUpdateOptions extends MessageEditOptions {
- fetchReply?: boolean;
+ withResponse?: boolean;
}
export interface InviteGenerationOptions {
@@ -6675,6 +6722,10 @@ export interface ShardingManagerOptions {
execArgv?: readonly string[];
}
+export interface ShowModalOptions {
+ withResponse?: boolean;
+}
+
export { Snowflake };
export type StageInstanceResolvable = StageInstance | Snowflake;
diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts
index 0029168dae44..4c3da4abb002 100644
--- a/packages/discord.js/typings/index.test-d.ts
+++ b/packages/discord.js/typings/index.test-d.ts
@@ -208,6 +208,7 @@ import {
GuildScheduledEventManager,
SendableChannels,
PollData,
+ InteractionCallbackResponse,
} from '.';
import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd';
import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders';
@@ -432,7 +433,7 @@ client.on('messageCreate', async message => {
expectAssignable>(message);
const component = await message.awaitMessageComponent({ componentType: ComponentType.Button });
expectType>(component);
- expectType>(await component.reply({ fetchReply: true }));
+ expectType(await component.reply({ withResponse: true }));
const buttonCollector = message.createMessageComponentCollector({ componentType: ComponentType.Button });
expectType>>(buttonCollector);
@@ -1785,36 +1786,36 @@ client.on('interactionCreate', async interaction => {
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
- expectType>>(interaction.update({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.update({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inRawGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
- expectType>>(interaction.update({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.update({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType(interaction.message);
expectType(interaction.guild);
- expectType>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>(interaction.editReply({ content: 'a' }));
expectType>(interaction.fetchReply());
- expectType>(interaction.update({ content: 'a', fetchReply: true }));
- expectType>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.update({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>(interaction.followUp({ content: 'a' }));
}
}
@@ -1848,24 +1849,24 @@ client.on('interactionCreate', async interaction => {
expectAssignable(interaction);
expectAssignable(interaction.guild);
expectAssignable>(interaction);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inRawGuild()) {
expectAssignable(interaction);
expectType(interaction.guild);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inGuild()) {
expectAssignable(interaction);
expectType(interaction.guild);
- expectType>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>(interaction.editReply({ content: 'a' }));
expectType>(interaction.fetchReply());
expectType>(interaction.followUp({ content: 'a' }));
@@ -1919,19 +1920,19 @@ client.on('interactionCreate', async interaction => {
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
} else if (interaction.inRawGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
} else if (interaction.inGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType(interaction.message);
expectAssignable(interaction.guild);
- expectType>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
}
}
@@ -1947,19 +1948,19 @@ client.on('interactionCreate', async interaction => {
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
} else if (interaction.inRawGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType>(interaction.message);
expectType(interaction.guild);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
} else if (interaction.inGuild()) {
expectAssignable(interaction);
expectType(interaction.component);
expectType(interaction.message);
expectType(interaction.guild);
- expectType>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
}
}
@@ -1970,21 +1971,15 @@ client.on('interactionCreate', async interaction => {
if (interaction.inRawGuild()) {
expectNotAssignable>(interaction);
expectAssignable(interaction);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
expectType(interaction.options.getMember('test'));
expectType(interaction.options.getChannel('test', true));
expectType(interaction.options.getRole('test', true));
} else if (interaction.inCachedGuild()) {
- const msg = await interaction.reply({ fetchReply: true });
- const btn = await msg.awaitMessageComponent({ componentType: ComponentType.Button });
-
- expectType>(msg);
- expectType>(btn);
-
expectType(interaction.options.getMember('test'));
expectAssignable(interaction);
- expectType>>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
expectType(interaction.options.getChannel('test', true));
expectType(interaction.options.getRole('test', true));
@@ -2010,7 +2005,7 @@ client.on('interactionCreate', async interaction => {
// @ts-expect-error
consumeCachedCommand(interaction);
expectType(interaction);
- expectType>(interaction.reply({ fetchReply: true }));
+ expectType>(interaction.reply({ withResponse: true }));
expectType(interaction.options.getMember('test'));
expectType(interaction.options.getChannel('test', true));
@@ -2064,29 +2059,29 @@ client.on('interactionCreate', async interaction => {
if (interaction.inCachedGuild()) {
expectAssignable(interaction);
expectType(interaction.guild);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
- expectType>>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inRawGuild()) {
expectAssignable(interaction);
expectType(interaction.guild);
- expectType>>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>>(interaction.editReply({ content: 'a' }));
expectType>>(interaction.fetchReply());
- expectType>>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>>(interaction.followUp({ content: 'a' }));
} else if (interaction.inGuild()) {
expectAssignable(interaction);
expectType(interaction.guild);
- expectType>(interaction.reply({ content: 'a', fetchReply: true }));
- expectType>(interaction.deferReply({ fetchReply: true }));
+ expectType>(interaction.reply({ content: 'a', withResponse: true }));
+ expectType>(interaction.deferReply({ withResponse: true }));
expectType>(interaction.editReply({ content: 'a' }));
expectType>(interaction.fetchReply());
- expectType>(interaction.deferUpdate({ fetchReply: true }));
+ expectType>(interaction.deferUpdate({ withResponse: true }));
expectType>(interaction.followUp({ content: 'a' }));
}
}