From f0c4d0e834d66a4ad1c3cd766addfd8726ef2070 Mon Sep 17 00:00:00 2001 From: Braxton Date: Mon, 28 May 2018 18:42:51 -0400 Subject: [PATCH] feat: Add "deleted" property to multiple structures. (#2556) * Add "deleted" property to "Message" structure * Add "deleted" property to Multiple structures Structures edited: - Channel - Emoji - Guild - Guild Member - Role * Update "deletable" getter * Fix ESLint "no-trailing-spaces" errors * Requested Change: Mark w/ bulkDelete --- src/client/actions/ChannelDelete.js | 1 + src/client/actions/GuildDelete.js | 1 + src/client/actions/GuildEmojiDelete.js | 1 + src/client/actions/GuildMemberRemove.js | 1 + src/client/actions/GuildRoleDelete.js | 1 + src/client/actions/MessageDelete.js | 1 + src/client/actions/MessageDeleteBulk.js | 1 + src/structures/Channel.js | 6 ++++++ src/structures/Emoji.js | 6 ++++++ src/structures/Guild.js | 6 ++++++ src/structures/GuildMember.js | 6 ++++++ src/structures/Message.js | 10 ++++++++-- src/structures/Role.js | 6 ++++++ 13 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/client/actions/ChannelDelete.js b/src/client/actions/ChannelDelete.js index 5af3d30c9..f183bbc78 100644 --- a/src/client/actions/ChannelDelete.js +++ b/src/client/actions/ChannelDelete.js @@ -13,6 +13,7 @@ class ChannelDeleteAction extends Action { if (channel) { client.channels.remove(channel.id); + channel.deleted = true; client.emit(Events.CHANNEL_DELETE, channel); } diff --git a/src/client/actions/GuildDelete.js b/src/client/actions/GuildDelete.js index cc12e14a9..1bf237bd9 100644 --- a/src/client/actions/GuildDelete.js +++ b/src/client/actions/GuildDelete.js @@ -33,6 +33,7 @@ class GuildDeleteAction extends Action { // Delete guild client.guilds.remove(guild.id); + guild.deleted = true; client.emit(Events.GUILD_DELETE, guild); this.deleted.set(guild.id, guild); this.scheduleForDeletion(guild.id); diff --git a/src/client/actions/GuildEmojiDelete.js b/src/client/actions/GuildEmojiDelete.js index d8a83fc3e..82df6ec8b 100644 --- a/src/client/actions/GuildEmojiDelete.js +++ b/src/client/actions/GuildEmojiDelete.js @@ -4,6 +4,7 @@ const { Events } = require('../../util/Constants'); class GuildEmojiDeleteAction extends Action { handle(emoji) { emoji.guild.emojis.remove(emoji.id); + emoji.deleted = true; this.client.emit(Events.GUILD_EMOJI_DELETE, emoji); return { emoji }; } diff --git a/src/client/actions/GuildMemberRemove.js b/src/client/actions/GuildMemberRemove.js index 30feb805d..2e0a1d8cc 100644 --- a/src/client/actions/GuildMemberRemove.js +++ b/src/client/actions/GuildMemberRemove.js @@ -11,6 +11,7 @@ class GuildMemberRemoveAction extends Action { guild.memberCount--; if (member) { guild.voiceStates.delete(member.id); + member.deleted = true; guild.members.remove(member.id); if (client.status === Status.READY) client.emit(Events.GUILD_MEMBER_REMOVE, member); } diff --git a/src/client/actions/GuildRoleDelete.js b/src/client/actions/GuildRoleDelete.js index f7a0468c5..ce6bcaedf 100644 --- a/src/client/actions/GuildRoleDelete.js +++ b/src/client/actions/GuildRoleDelete.js @@ -11,6 +11,7 @@ class GuildRoleDeleteAction extends Action { role = guild.roles.get(data.role_id); if (role) { guild.roles.remove(data.role_id); + role.deleted = true; client.emit(Events.GUILD_ROLE_DELETE, role); } } diff --git a/src/client/actions/MessageDelete.js b/src/client/actions/MessageDelete.js index 645f16d57..c31c39cb4 100644 --- a/src/client/actions/MessageDelete.js +++ b/src/client/actions/MessageDelete.js @@ -11,6 +11,7 @@ class MessageDeleteAction extends Action { message = channel.messages.get(data.id); if (message) { channel.messages.delete(message.id); + message.deleted = true; client.emit(Events.MESSAGE_DELETE, message); } } diff --git a/src/client/actions/MessageDeleteBulk.js b/src/client/actions/MessageDeleteBulk.js index 16deb9873..e12eaa73a 100644 --- a/src/client/actions/MessageDeleteBulk.js +++ b/src/client/actions/MessageDeleteBulk.js @@ -13,6 +13,7 @@ class MessageDeleteBulkAction extends Action { for (const id of ids) { const message = channel.messages.get(id); if (message) { + message.deleted = true; messages.set(message.id, message); channel.messages.delete(id); } diff --git a/src/structures/Channel.js b/src/structures/Channel.js index 52d87f092..8466d19af 100644 --- a/src/structures/Channel.js +++ b/src/structures/Channel.js @@ -23,6 +23,12 @@ class Channel extends Base { */ this.type = type ? type.toLowerCase() : 'unknown'; + /** + * Whether the channel has been deleted + * @type {boolean} + */ + this.deleted = false; + if (data) this._patch(data); } diff --git a/src/structures/Emoji.js b/src/structures/Emoji.js index 419db88d1..20d6b12bb 100644 --- a/src/structures/Emoji.js +++ b/src/structures/Emoji.js @@ -24,6 +24,12 @@ class Emoji extends Base { * @type {?Snowflake} */ this.id = emoji.id; + + /** + * Whether this emoji has been deleted + * @type {boolean} + */ + this.deleted = false; } /** diff --git a/src/structures/Guild.js b/src/structures/Guild.js index ce2382bb2..e507bd203 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -50,6 +50,12 @@ class Guild extends Base { */ this.presences = new PresenceStore(this.client); + /** + * Whether the bot has been removed from the guild + * @type {boolean} + */ + this.deleted = false; + if (!data) return; if (data.unavailable) { /** diff --git a/src/structures/GuildMember.js b/src/structures/GuildMember.js index b029a61b5..c5c2cff40 100644 --- a/src/structures/GuildMember.js +++ b/src/structures/GuildMember.js @@ -39,6 +39,12 @@ class GuildMember extends Base { */ this.lastMessageChannelID = null; + /** + * Whether the member has been removed from the guild + * @type {boolean} + */ + this.deleted = false; + this._roles = []; if (data) this._patch(data); } diff --git a/src/structures/Message.js b/src/structures/Message.js index b57769a21..6b5f5b64e 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -157,6 +157,12 @@ class Message extends Base { * @private */ this._edits = []; + + /** + * Whether this message has been deleted + * @type {boolean} + */ + this.deleted = false; } /** @@ -341,9 +347,9 @@ class Message extends Base { * @readonly */ get deletable() { - return this.author.id === this.client.user.id || (this.guild && + return !this.deleted && (this.author.id === this.client.user.id || (this.guild && this.channel.permissionsFor(this.client.user).has(Permissions.FLAGS.MANAGE_MESSAGES) - ); + )); } /** diff --git a/src/structures/Role.js b/src/structures/Role.js index 6767d296e..43d74c15d 100644 --- a/src/structures/Role.js +++ b/src/structures/Role.js @@ -69,6 +69,12 @@ class Role extends Base { * @type {boolean} */ this.mentionable = data.mentionable; + + /** + * Whether the role has been deleted + * @type {boolean} + */ + this.deleted = false; } /**