From 097c7b9cdd5e1bb52b037272eed19f556800ccff Mon Sep 17 00:00:00 2001 From: SpaceEEC Date: Thu, 10 Jun 2021 18:42:45 +0200 Subject: [PATCH] fix: don't patch missing properties from partial payloads (#5796) * fix: don't patch missing properties from partial payloads * fix(GuildChannel): initialize permissionOverwrites in the constructor * refactor(GuildChannel): remove redundant if --- src/structures/GuildChannel.js | 51 +++++++++++++++++------------ src/structures/StageChannel.js | 12 ++++--- src/structures/StoreChannel.js | 5 +-- src/structures/TextChannel.js | 59 ++++++++++++++++++++-------------- src/structures/User.js | 24 +++++++------- 5 files changed, 87 insertions(+), 64 deletions(-) diff --git a/src/structures/GuildChannel.js b/src/structures/GuildChannel.js index 043f36cfa..1ea0c9d45 100644 --- a/src/structures/GuildChannel.js +++ b/src/structures/GuildChannel.js @@ -35,35 +35,44 @@ class GuildChannel extends Channel { * @type {Guild} */ this.guild = guild; + + this.parentID = null; + this.permissionOverwrites = new Collection(); } _patch(data) { super._patch(data); - /** - * The name of the guild channel - * @type {string} - */ - this.name = data.name; + if ('name' in data) { + /** + * The name of the guild channel + * @type {string} + */ + this.name = data.name; + } - /** - * The raw position of the channel from discord - * @type {number} - */ - this.rawPosition = data.position; + if ('position' in data) { + /** + * The raw position of the channel from discord + * @type {number} + */ + this.rawPosition = data.position; + } - /** - * The ID of the category parent of this channel - * @type {?Snowflake} - */ - this.parentID = data.parent_id || null; + if ('parent_id' in data) { + /** + * The ID of the category parent of this channel + * @type {?Snowflake} + */ + this.parentID = data.parent_id; + } - /** - * A map of permission overwrites in this channel for roles and users - * @type {Collection} - */ - this.permissionOverwrites = new Collection(); - if (data.permission_overwrites) { + if ('permission_overwrites' in data) { + /** + * A map of permission overwrites in this channel for roles and users + * @type {Collection} + */ + this.permissionOverwrites = new Collection(); for (const overwrite of data.permission_overwrites) { this.permissionOverwrites.set(overwrite.id, new PermissionOverwrites(this, overwrite)); } diff --git a/src/structures/StageChannel.js b/src/structures/StageChannel.js index ce2b9bd11..7d66625cc 100644 --- a/src/structures/StageChannel.js +++ b/src/structures/StageChannel.js @@ -10,11 +10,13 @@ class StageChannel extends BaseGuildVoiceChannel { _patch(data) { super._patch(data); - /** - * The topic of the stage channel - * @type {?string} - */ - this.topic = data.topic; + if ('topic' in data) { + /** + * The topic of the stage channel + * @type {?string} + */ + this.topic = data.topic; + } } /** diff --git a/src/structures/StoreChannel.js b/src/structures/StoreChannel.js index 1c518a7f5..c2bc287f1 100644 --- a/src/structures/StoreChannel.js +++ b/src/structures/StoreChannel.js @@ -17,7 +17,6 @@ class StoreChannel extends GuildChannel { /** * If the guild considers this channel NSFW * @type {boolean} - * @readonly */ this.nsfw = Boolean(data.nsfw); } @@ -25,7 +24,9 @@ class StoreChannel extends GuildChannel { _patch(data) { super._patch(data); - if (typeof data.nsfw !== 'undefined') this.nsfw = Boolean(data.nsfw); + if ('nsfw' in data) { + this.nsfw = Boolean(data.nsfw); + } } } diff --git a/src/structures/TextChannel.js b/src/structures/TextChannel.js index 18e0f1bb0..b8d5f00dd 100644 --- a/src/structures/TextChannel.js +++ b/src/structures/TextChannel.js @@ -28,7 +28,6 @@ class TextChannel extends GuildChannel { /** * If the guild considers this channel NSFW * @type {boolean} - * @readonly */ this.nsfw = Boolean(data.nsfw); this._typing = new Map(); @@ -37,34 +36,46 @@ class TextChannel extends GuildChannel { _patch(data) { super._patch(data); - /** - * The topic of the text channel - * @type {?string} - */ - this.topic = data.topic; + if ('topic' in data) { + /** + * The topic of the text channel + * @type {?string} + */ + this.topic = data.topic; + } - if (typeof data.nsfw !== 'undefined') this.nsfw = Boolean(data.nsfw); + if ('nsfw' in data) { + this.nsfw = Boolean(data.nsfw); + } - /** - * The ID of the last message sent in this channel, if one was sent - * @type {?Snowflake} - */ - this.lastMessageID = data.last_message_id; + if ('last_message_id' in data) { + /** + * The ID of the last message sent in this channel, if one was sent + * @type {?Snowflake} + */ + this.lastMessageID = data.last_message_id; + } - /** - * The ratelimit per user for this channel in seconds - * It is not currently possible to set a rate limit per user on a `NewsChannel`. - * @type {number} - */ - this.rateLimitPerUser = data.rate_limit_per_user || 0; + if ('rate_limit_per_user' in data) { + /** + * The ratelimit per user for this channel in seconds + * It is not currently possible to set a rate limit per user on a `NewsChannel`. + * @type {number} + */ + this.rateLimitPerUser = data.rate_limit_per_user; + } - /** - * The timestamp when the last pinned message was pinned, if there was one - * @type {?number} - */ - this.lastPinTimestamp = data.last_pin_timestamp ? new Date(data.last_pin_timestamp).getTime() : null; + if ('last_pin_timestamp' in data) { + /** + * The timestamp when the last pinned message was pinned, if there was one + * @type {?number} + */ + this.lastPinTimestamp = data.last_pin_timestamp ? new Date(data.last_pin_timestamp).getTime() : null; + } - if (data.messages) for (const message of data.messages) this.messages.add(message); + if ('messages' in data) { + for (const message of data.messages) this.messages.add(message); + } } /** diff --git a/src/structures/User.js b/src/structures/User.js index 59a4a7925..bb821b213 100644 --- a/src/structures/User.js +++ b/src/structures/User.js @@ -30,6 +30,18 @@ class User extends Base { this.system = null; this.flags = null; + /** + * The ID of the last message sent by the user, if one was sent + * @type {?Snowflake} + */ + this.lastMessageID = null; + + /** + * The ID of the channel for the last message sent by the user, if one was sent + * @type {?Snowflake} + */ + this.lastMessageChannelID = null; + this._patch(data); } @@ -87,18 +99,6 @@ class User extends Base { */ this.flags = new UserFlags(data.public_flags); } - - /** - * The ID of the last message sent by the user, if one was sent - * @type {?Snowflake} - */ - this.lastMessageID = null; - - /** - * The ID of the channel for the last message sent by the user, if one was sent - * @type {?Snowflake} - */ - this.lastMessageChannelID = null; } /**