diff --git a/packages/discord.js/src/client/WebhookClient.js b/packages/discord.js/src/client/WebhookClient.js index ff1f41ed4..9aff4b51f 100644 --- a/packages/discord.js/src/client/WebhookClient.js +++ b/packages/discord.js/src/client/WebhookClient.js @@ -42,12 +42,32 @@ class WebhookClient extends BaseClient { } // These are here only for documentation purposes - they are implemented by Webhook - /* eslint-disable no-empty-function */ + /* eslint-disable no-empty-function, valid-jsdoc */ + /** + * Sends a message with this webhook. + * @param {string|MessagePayload|WebhookMessageOptions} options The content for the reply + * @returns {Promise} + */ send() {} - sendSlackMessage() {} + + /** + * Gets a message that was sent by this webhook. + * @param {Snowflake} message The id of the message to fetch + * @param {WebhookFetchMessageOptions} [options={}] The options to provide to fetch the message. + * @returns {Promise} Returns the message sent by this webhook + */ fetchMessage() {} - edit() {} + + /** + * Edits a message that was sent by this webhook. + * @param {MessageResolvable} message The message to edit + * @param {string|MessagePayload|WebhookEditMessageOptions} options The options to provide + * @returns {Promise} Returns the message edited by this webhook + */ editMessage() {} + + sendSlackMessage() {} + edit() {} delete() {} deleteMessage() {} get createdTimestamp() {} diff --git a/packages/discord.js/src/structures/Webhook.js b/packages/discord.js/src/structures/Webhook.js index 00fc8cb74..6f2313805 100644 --- a/packages/discord.js/src/structures/Webhook.js +++ b/packages/discord.js/src/structures/Webhook.js @@ -148,7 +148,7 @@ class Webhook { /** * Sends a message with this webhook. * @param {string|MessagePayload|WebhookMessageOptions} options The options to provide - * @returns {Promise} + * @returns {Promise} * @example * // Send a basic message * webhook.send('hello!') @@ -288,7 +288,7 @@ class Webhook { * Gets a message that was sent by this webhook. * @param {Snowflake|'@original'} message The id of the message to fetch * @param {WebhookFetchMessageOptions} [options={}] The options to provide to fetch the message. - * @returns {Promise} Returns the message sent by this webhook + * @returns {Promise} Returns the message sent by this webhook */ async fetchMessage(message, { threadId } = {}) { if (!this.token) throw new Error(ErrorCodes.WebhookTokenUnavailable); @@ -309,7 +309,7 @@ class Webhook { * Edits a message that was sent by this webhook. * @param {MessageResolvable|'@original'} message The message to edit * @param {string|MessagePayload|WebhookEditMessageOptions} options The options to provide - * @returns {Promise} Returns the message edited by this webhook + * @returns {Promise} Returns the message edited by this webhook */ async editMessage(message, options) { if (!this.token) throw new Error(ErrorCodes.WebhookTokenUnavailable); diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 6a0449fc3..aa6d271dc 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1570,10 +1570,10 @@ export class InteractionWebhook extends PartialWebhookMixin() { public token: string; public send(options: string | MessagePayload | InteractionReplyOptions): Promise; public editMessage( - message: MessageResolvable, + message: MessageResolvable | '@original', options: string | MessagePayload | WebhookEditMessageOptions, ): Promise; - public fetchMessage(message: string): Promise; + public fetchMessage(message: Snowflake | '@original'): Promise; } export class Invite extends Base { @@ -2804,6 +2804,13 @@ export class Webhook extends WebhookMixin() { applicationId: null; owner: User | APIUser; }; + + public editMessage( + message: MessageResolvable, + options: string | MessagePayload | WebhookEditMessageOptions, + ): Promise; + public fetchMessage(message: Snowflake, options?: WebhookFetchMessageOptions): Promise; + public send(options: string | MessagePayload | Omit): Promise; } export class WebhookClient extends WebhookMixin(BaseClient) { diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 8c79b1f01..7946a360e 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -23,6 +23,7 @@ import { APITextInputComponent, APIEmbed, ApplicationCommandType, + APIMessage, } from 'discord-api-types/v10'; import { ApplicationCommand, @@ -130,6 +131,9 @@ import { ThreadMemberManager, CollectedMessageInteraction, ShardEvents, + Webhook, + WebhookClient, + InteractionWebhook, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -1691,3 +1695,20 @@ expectType(partialGroupDMChannel.toString()); expectType(dmChannel.toString()); expectType(user.toString()); expectType(guildMember.toString()); + +declare const webhook: Webhook; +declare const webhookClient: WebhookClient; +declare const interactionWebhook: InteractionWebhook; +declare const snowflake: Snowflake; + +expectType>(webhook.send('content')); +expectType>(webhook.editMessage(snowflake, 'content')); +expectType>(webhook.fetchMessage(snowflake)); + +expectType>(webhookClient.send('content')); +expectType>(webhookClient.editMessage(snowflake, 'content')); +expectType>(webhookClient.fetchMessage(snowflake)); + +expectType>(interactionWebhook.send('content')); +expectType>(interactionWebhook.editMessage(snowflake, 'content')); +expectType>(interactionWebhook.fetchMessage(snowflake));