mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
fix(Message#deletable): add check for deletable message types (#9168)
* fix(Message#deletable): add check for deletable message types * docs: update docs * fix: add check for `AutoModerationAction` message * style: better style --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
@@ -22,7 +22,7 @@ const { Sticker } = require('./Sticker');
|
||||
const { DiscordjsError, ErrorCodes } = require('../errors');
|
||||
const ReactionManager = require('../managers/ReactionManager');
|
||||
const { createComponent } = require('../util/Components');
|
||||
const { NonSystemMessageTypes, MaxBulkDeletableMessageAge } = require('../util/Constants');
|
||||
const { NonSystemMessageTypes, MaxBulkDeletableMessageAge, DeletableMessageTypes } = require('../util/Constants');
|
||||
const MessageFlagsBitField = require('../util/MessageFlagsBitField');
|
||||
const PermissionsBitField = require('../util/PermissionsBitField');
|
||||
const { cleanContent, resolvePartialEmoji } = require('../util/Util');
|
||||
@@ -616,6 +616,8 @@ class Message extends Base {
|
||||
* @readonly
|
||||
*/
|
||||
get deletable() {
|
||||
if (!DeletableMessageTypes.includes(this.type)) return false;
|
||||
|
||||
if (!this.guild) {
|
||||
return this.author.id === this.client.user.id;
|
||||
}
|
||||
@@ -629,10 +631,10 @@ class Message extends Base {
|
||||
// This flag allows deleting even if timed out
|
||||
if (permissions.has(PermissionFlagsBits.Administrator, false)) return true;
|
||||
|
||||
return Boolean(
|
||||
this.author.id === this.client.user.id ||
|
||||
(permissions.has(PermissionFlagsBits.ManageMessages, false) &&
|
||||
this.guild.members.me.communicationDisabledUntilTimestamp < Date.now()),
|
||||
// The auto moderation action message author is the reference message author
|
||||
return (
|
||||
(this.type !== MessageType.AutoModerationAction && this.author.id === this.client.user.id) ||
|
||||
(permissions.has(PermissionFlagsBits.ManageMessages, false) && !this.guild.members.me.isCommunicationDisabled())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,55 @@ exports.SelectMenuTypes = [
|
||||
ComponentType.ChannelSelect,
|
||||
];
|
||||
|
||||
/**
|
||||
* The types of messages that can be deleted. The available types are:
|
||||
* * {@link MessageType.AutoModerationAction}
|
||||
* * {@link MessageType.ChannelFollowAdd}
|
||||
* * {@link MessageType.ChannelPinnedMessage}
|
||||
* * {@link MessageType.ChatInputCommand}
|
||||
* * {@link MessageType.ContextMenuCommand}
|
||||
* * {@link MessageType.Default}
|
||||
* * {@link MessageType.GuildBoost}
|
||||
* * {@link MessageType.GuildBoostTier1}
|
||||
* * {@link MessageType.GuildBoostTier2}
|
||||
* * {@link MessageType.GuildBoostTier3}
|
||||
* * {@link MessageType.GuildInviteReminder}
|
||||
* * {@link MessageType.InteractionPremiumUpsell}
|
||||
* * {@link MessageType.Reply}
|
||||
* * {@link MessageType.RoleSubscriptionPurchase}
|
||||
* * {@link MessageType.StageEnd}
|
||||
* * {@link MessageType.StageRaiseHand}
|
||||
* * {@link MessageType.StageSpeaker}
|
||||
* * {@link MessageType.StageStart}
|
||||
* * {@link MessageType.StageTopic}
|
||||
* * {@link MessageType.ThreadCreated}
|
||||
* * {@link MessageType.UserJoin}
|
||||
* @typedef {MessageType[]} DeletableMessageTypes
|
||||
*/
|
||||
exports.DeletableMessageTypes = [
|
||||
MessageType.AutoModerationAction,
|
||||
MessageType.ChannelFollowAdd,
|
||||
MessageType.ChannelPinnedMessage,
|
||||
MessageType.ChatInputCommand,
|
||||
MessageType.ContextMenuCommand,
|
||||
MessageType.Default,
|
||||
MessageType.GuildBoost,
|
||||
MessageType.GuildBoostTier1,
|
||||
MessageType.GuildBoostTier2,
|
||||
MessageType.GuildBoostTier3,
|
||||
MessageType.GuildInviteReminder,
|
||||
MessageType.InteractionPremiumUpsell,
|
||||
MessageType.Reply,
|
||||
MessageType.RoleSubscriptionPurchase,
|
||||
MessageType.StageEnd,
|
||||
MessageType.StageRaiseHand,
|
||||
MessageType.StageSpeaker,
|
||||
MessageType.StageStart,
|
||||
MessageType.StageTopic,
|
||||
MessageType.ThreadCreated,
|
||||
MessageType.UserJoin,
|
||||
];
|
||||
|
||||
/**
|
||||
* A mapping between sticker formats and their respective image formats.
|
||||
* * {@link StickerFormatType.PNG} -> {@link ImageFormat.PNG}
|
||||
|
||||
24
packages/discord.js/typings/index.d.ts
vendored
24
packages/discord.js/typings/index.d.ts
vendored
@@ -3445,6 +3445,29 @@ export type NonSystemMessageType =
|
||||
| MessageType.ChatInputCommand
|
||||
| MessageType.ContextMenuCommand;
|
||||
|
||||
export type DeletableMessageType =
|
||||
| MessageType.AutoModerationAction
|
||||
| MessageType.ChannelFollowAdd
|
||||
| MessageType.ChannelPinnedMessage
|
||||
| MessageType.ChatInputCommand
|
||||
| MessageType.ContextMenuCommand
|
||||
| MessageType.Default
|
||||
| MessageType.GuildBoost
|
||||
| MessageType.GuildBoostTier1
|
||||
| MessageType.GuildBoostTier2
|
||||
| MessageType.GuildBoostTier3
|
||||
| MessageType.GuildInviteReminder
|
||||
| MessageType.InteractionPremiumUpsell
|
||||
| MessageType.Reply
|
||||
| MessageType.RoleSubscriptionPurchase
|
||||
| MessageType.StageEnd
|
||||
| MessageType.StageRaiseHand
|
||||
| MessageType.StageSpeaker
|
||||
| MessageType.StageStart
|
||||
| MessageType.StageTopic
|
||||
| MessageType.ThreadCreated
|
||||
| MessageType.UserJoin;
|
||||
|
||||
export const Constants: {
|
||||
MaxBulkDeletableMessageAge: 1_209_600_000;
|
||||
SweeperKeys: SweeperKey[];
|
||||
@@ -3453,6 +3476,7 @@ export const Constants: {
|
||||
ThreadChannelTypes: ThreadChannelType[];
|
||||
VoiceBasedChannelTypes: VoiceBasedChannelTypes[];
|
||||
SelectMenuTypes: SelectMenuType[];
|
||||
DeletableMessageTypes: DeletableMessageType[];
|
||||
StickerFormatExtensionMap: Record<StickerFormatType, ImageFormat>;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user