Skip to content

Commit

Permalink
fix: don't patch missing properties from partial payloads (#5796)
Browse files Browse the repository at this point in the history
* fix: don't patch missing properties from partial payloads

* fix(GuildChannel): initialize permissionOverwrites in the constructor

* refactor(GuildChannel): remove redundant if
  • Loading branch information
SpaceEEC committed Jun 10, 2021
1 parent ffabec3 commit 097c7b9
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 64 deletions.
51 changes: 30 additions & 21 deletions src/structures/GuildChannel.js
Expand Up @@ -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<Snowflake, PermissionOverwrites>}
*/
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<Snowflake, PermissionOverwrites>}
*/
this.permissionOverwrites = new Collection();
for (const overwrite of data.permission_overwrites) {
this.permissionOverwrites.set(overwrite.id, new PermissionOverwrites(this, overwrite));
}
Expand Down
12 changes: 7 additions & 5 deletions src/structures/StageChannel.js
Expand Up @@ -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;
}
}

/**
Expand Down
5 changes: 3 additions & 2 deletions src/structures/StoreChannel.js
Expand Up @@ -17,15 +17,16 @@ class StoreChannel extends GuildChannel {
/**
* If the guild considers this channel NSFW
* @type {boolean}
* @readonly
*/
this.nsfw = Boolean(data.nsfw);
}

_patch(data) {
super._patch(data);

if (typeof data.nsfw !== 'undefined') this.nsfw = Boolean(data.nsfw);
if ('nsfw' in data) {
this.nsfw = Boolean(data.nsfw);
}
}
}

Expand Down
59 changes: 35 additions & 24 deletions src/structures/TextChannel.js
Expand Up @@ -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();
Expand All @@ -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
* <warn>It is not currently possible to set a rate limit per user on a `NewsChannel`.</warn>
* @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
* <warn>It is not currently possible to set a rate limit per user on a `NewsChannel`.</warn>
* @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);
}
}

/**
Expand Down
24 changes: 12 additions & 12 deletions src/structures/User.js
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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;
}

/**
Expand Down

0 comments on commit 097c7b9

Please sign in to comment.