diff --git a/packages/discord.js/src/structures/MessagePayload.js b/packages/discord.js/src/structures/MessagePayload.js index 49ad3d9bc..83dc1e971 100644 --- a/packages/discord.js/src/structures/MessagePayload.js +++ b/packages/discord.js/src/structures/MessagePayload.js @@ -1,11 +1,10 @@ 'use strict'; const { Buffer } = require('node:buffer'); -const { createComponent } = require('@discordjs/builders'); -const { Embed } = require('@discordjs/builders'); +const { createComponent, Embed } = require('@discordjs/builders'); +const { MessageFlags } = require('discord-api-types/v9'); const { RangeError } = require('../errors'); const DataResolver = require('../util/DataResolver'); -const MessageFlags = require('../util/MessageFlags'); const Util = require('../util/Util'); /** @@ -148,11 +147,13 @@ class MessagePayload { } let flags; - if (this.isMessage || this.isMessageManager) { + if (typeof this.options.flags !== 'undefined' || this.isMessage || this.isMessageManager) { // eslint-disable-next-line eqeqeq flags = this.options.flags != null ? new MessageFlags(this.options.flags).bitfield : this.target.flags?.bitfield; - } else if (isInteraction && this.options.ephemeral) { - flags = MessageFlags.FLAGS.EPHEMERAL; + } + + if (isInteraction && this.options.ephemeral) { + flags |= MessageFlags.Ephemeral; } let allowedMentions = diff --git a/packages/discord.js/src/structures/Webhook.js b/packages/discord.js/src/structures/Webhook.js index bdd4df41f..1ea3a05f6 100644 --- a/packages/discord.js/src/structures/Webhook.js +++ b/packages/discord.js/src/structures/Webhook.js @@ -123,6 +123,7 @@ class Webhook { * @property {string} [avatarURL] Avatar URL override for the message * @property {Snowflake} [threadId] The id of the thread in the channel to send to. * For interaction webhooks, this property is ignored + * @property {MessageFlags} [flags] Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set. */ /** diff --git a/packages/discord.js/src/structures/interfaces/InteractionResponses.js b/packages/discord.js/src/structures/interfaces/InteractionResponses.js index c571f20b5..fa30d5e2d 100644 --- a/packages/discord.js/src/structures/interfaces/InteractionResponses.js +++ b/packages/discord.js/src/structures/interfaces/InteractionResponses.js @@ -28,6 +28,8 @@ class InteractionResponses { * @typedef {BaseMessageOptions} InteractionReplyOptions * @property {boolean} [ephemeral] Whether the reply should be ephemeral * @property {boolean} [fetchReply] Whether to fetch the reply + * @property {MessageFlags} [flags] Which flags to set for the message. + * Only `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set. */ /** diff --git a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js index bc31e9f45..5d3e790b4 100644 --- a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js +++ b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js @@ -72,6 +72,7 @@ class TextBasedChannel { * @typedef {BaseMessageOptions} MessageOptions * @property {ReplyOptions} [reply] The options for replying to a message * @property {StickerResolvable[]} [stickers=[]] Stickers to send in the message + * @property {MessageFlags} [flags] Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set. */ /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 363f0f882..9fbd8cf3b 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -3145,7 +3145,7 @@ export interface PartialWebhookFields { options: string | MessagePayload | WebhookEditMessageOptions, ): Promise; fetchMessage(message: Snowflake | '@original', options?: WebhookFetchMessageOptions): Promise; - send(options: string | MessagePayload | WebhookMessageOptions): Promise; + send(options: string | MessagePayload | Omit): Promise; } export interface WebhookFields extends PartialWebhookFields { @@ -4491,9 +4491,10 @@ export interface InteractionDeferReplyOptions { export type InteractionDeferUpdateOptions = Omit; -export interface InteractionReplyOptions extends Omit { +export interface InteractionReplyOptions extends Omit { ephemeral?: boolean; fetchReply?: boolean; + flags?: BitFieldResolvable<'SUPPRESS_EMBEDS' | 'EPHEMERAL', number>; } export interface InteractionUpdateOptions extends MessageEditOptions { @@ -4693,6 +4694,7 @@ export interface MessageOptions { reply?: ReplyOptions; stickers?: StickerResolvable[]; attachments?: MessageAttachment[]; + flags?: BitFieldResolvable<'SUPPRESS_EMBEDS', number>; } export type MessageReactionResolvable =