Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: don't patch missing properties from partial payloads #5796

Merged
merged 3 commits into from Jun 10, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
56 changes: 33 additions & 23 deletions src/structures/GuildChannel.js
Expand Up @@ -35,37 +35,47 @@ class GuildChannel extends Channel {
* @type {Guild}
*/
this.guild = guild;

this.parentID = null;
}

_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) {
for (const overwrite of data.permission_overwrites) {
this.permissionOverwrites.set(overwrite.id, new PermissionOverwrites(this, overwrite));
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();
SpaceEEC marked this conversation as resolved.
Show resolved Hide resolved
if (data.permission_overwrites) {
SpaceEEC marked this conversation as resolved.
Show resolved Hide resolved
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