Skip to content

Commit

Permalink
fix(Message#deletable): add check for deletable message types (#9168)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
Syjalo and kodiakhq[bot] committed Feb 25, 2023
1 parent c1000b8 commit e78b8ad
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 5 deletions.
12 changes: 7 additions & 5 deletions packages/discord.js/src/structures/Message.js
Expand Up @@ -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');
Expand Down Expand Up @@ -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;
}
Expand All @@ -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())
);
}

Expand Down
49 changes: 49 additions & 0 deletions packages/discord.js/src/util/Constants.js
Expand Up @@ -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}
Expand Down
24 changes: 24 additions & 0 deletions packages/discord.js/typings/index.d.ts
Expand Up @@ -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[];
Expand All @@ -3453,6 +3476,7 @@ export const Constants: {
ThreadChannelTypes: ThreadChannelType[];
VoiceBasedChannelTypes: VoiceBasedChannelTypes[];
SelectMenuTypes: SelectMenuType[];
DeletableMessageTypes: DeletableMessageType[];
StickerFormatExtensionMap: Record<StickerFormatType, ImageFormat>;
};

Expand Down

2 comments on commit e78b8ad

@vercel
Copy link

@vercel vercel bot commented on e78b8ad Feb 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vercel
Copy link

@vercel vercel bot commented on e78b8ad Feb 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.