mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
feat: add Message#bulkDeletable (v13) (#8761)
This commit is contained in:
@@ -14,7 +14,7 @@ const ReactionCollector = require('./ReactionCollector');
|
||||
const { Sticker } = require('./Sticker');
|
||||
const { Error } = require('../errors');
|
||||
const ReactionManager = require('../managers/ReactionManager');
|
||||
const { InteractionTypes, MessageTypes, SystemMessageTypes } = require('../util/Constants');
|
||||
const { InteractionTypes, MessageTypes, SystemMessageTypes, MaxBulkDeletableMessageAge } = require('../util/Constants');
|
||||
const MessageFlags = require('../util/MessageFlags');
|
||||
const Permissions = require('../util/Permissions');
|
||||
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
||||
@@ -625,6 +625,25 @@ class Message extends Base {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the message is bulk deletable by the client user
|
||||
* @type {boolean}
|
||||
* @readonly
|
||||
* @example
|
||||
* // Filter for bulk deletable messages
|
||||
* channel.bulkDelete(messages.filter(message => message.bulkDeletable));
|
||||
*/
|
||||
get bulkDeletable() {
|
||||
const permissions = this.channel?.permissionsFor(this.client.user);
|
||||
return (
|
||||
(this.inGuild() &&
|
||||
Date.now() - this.createdTimestamp < MaxBulkDeletableMessageAge &&
|
||||
this.deletable &&
|
||||
permissions?.has(Permissions.FLAGS.MANAGE_MESSAGES, false)) ??
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the message is pinnable by the client user
|
||||
* @type {boolean}
|
||||
|
||||
@@ -5,7 +5,7 @@ const MessageCollector = require('../MessageCollector');
|
||||
const MessagePayload = require('../MessagePayload');
|
||||
const SnowflakeUtil = require('../../util/SnowflakeUtil');
|
||||
const { Collection } = require('@discordjs/collection');
|
||||
const { InteractionTypes } = require('../../util/Constants');
|
||||
const { InteractionTypes, MaxBulkDeletableMessageAge } = require('../../util/Constants');
|
||||
const { TypeError, Error } = require('../../errors');
|
||||
const InteractionCollector = require('../InteractionCollector');
|
||||
|
||||
@@ -295,7 +295,7 @@ class TextBasedChannel {
|
||||
if (Array.isArray(messages) || messages instanceof Collection) {
|
||||
let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(m => m.id ?? m);
|
||||
if (filterOld) {
|
||||
messageIds = messageIds.filter(id => Date.now() - SnowflakeUtil.timestampFrom(id) < 1_209_600_000);
|
||||
messageIds = messageIds.filter(id => Date.now() - SnowflakeUtil.timestampFrom(id) < MaxBulkDeletableMessageAge);
|
||||
}
|
||||
if (messageIds.length === 0) return new Collection();
|
||||
if (messageIds.length === 1) {
|
||||
|
||||
@@ -4,6 +4,12 @@ const process = require('node:process');
|
||||
const Package = (exports.Package = require('../../package.json'));
|
||||
const { Error, RangeError, TypeError } = require('../errors');
|
||||
|
||||
/**
|
||||
* Max bulk deletable message age
|
||||
* @typedef {number} MaxBulkDeletableMessageAge
|
||||
*/
|
||||
exports.MaxBulkDeletableMessageAge = 1_209_600_000;
|
||||
|
||||
exports.UserAgent = `DiscordBot (${Package.homepage}, ${Package.version}) Node.js/${process.version}`;
|
||||
|
||||
/**
|
||||
@@ -1443,6 +1449,7 @@ function createEnum(keys) {
|
||||
* @property {SweeperKey[]} SweeperKeys The name of an item to be swept in Sweepers.
|
||||
* @property {SystemMessageType[]} SystemMessageTypes The types of messages that are `System`.
|
||||
* @property {Object<TextInputStyle, number>} TextInputStyles The style of a text input component.
|
||||
* @property {number} MaxBulkDeletableMessageAge Max bulk deletable message age
|
||||
* @property {string} UserAgent The user agent used for requests.
|
||||
* @property {Object<VerificationLevel, number>} VerificationLevels
|
||||
* The value set for the verification levels for a guild.
|
||||
|
||||
2
typings/index.d.ts
vendored
2
typings/index.d.ts
vendored
@@ -1555,6 +1555,7 @@ export class Message<Cached extends boolean = boolean> extends Base {
|
||||
public applicationId: Snowflake | null;
|
||||
public attachments: Collection<Snowflake, MessageAttachment>;
|
||||
public author: User;
|
||||
public get bulkDeletable(): boolean;
|
||||
public readonly channel: If<Cached, GuildTextBasedChannel, TextBasedChannel>;
|
||||
public channelId: Snowflake;
|
||||
public readonly cleanContent: string;
|
||||
@@ -2930,6 +2931,7 @@ export const Constants: {
|
||||
devDependencies: Record<string, string>;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
MaxBulkDeletableMessageAge: 1_209_600_000;
|
||||
UserAgent: string;
|
||||
Endpoints: {
|
||||
botGateway: string;
|
||||
|
||||
Reference in New Issue
Block a user