From 30dd3e0cff4aef4b32abdc4556d32c86658f6df3 Mon Sep 17 00:00:00 2001 From: Amish Shah Date: Sat, 26 Aug 2017 13:43:13 +0100 Subject: [PATCH] Fix #1684 --- .../websocket/packets/handlers/PresenceUpdate.js | 2 +- src/structures/Presence.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/client/websocket/packets/handlers/PresenceUpdate.js b/src/client/websocket/packets/handlers/PresenceUpdate.js index b5d04c642..9dda784a8 100644 --- a/src/client/websocket/packets/handlers/PresenceUpdate.js +++ b/src/client/websocket/packets/handlers/PresenceUpdate.js @@ -41,7 +41,7 @@ class PresenceUpdateHandler extends AbstractHandler { } const oldMember = member._clone(); if (member.presence) { - oldMember.frozenPresence = Util.cloneObject(member.presence); + oldMember.frozenPresence = member.presence._clone(); } guild._setPresence(user.id, data); client.emit(Constants.Events.PRESENCE_UPDATE, oldMember, member); diff --git a/src/structures/Presence.js b/src/structures/Presence.js index a2dd00a73..77b9ee40d 100644 --- a/src/structures/Presence.js +++ b/src/structures/Presence.js @@ -28,6 +28,12 @@ class Presence { this.game = data.game ? new Game(data.game) : null; } + _clone() { + const clone = Object.assign(Object.create(this), this); + if (this.game) clone.game = this.game._clone(); + return clone; + } + /** * Whether this presence is equal to another * @param {Presence} presence The presence to compare with @@ -79,6 +85,10 @@ class Game { this.url === game.url ); } + + _clone() { + return Object.assign(Object.create(this), this); + } } exports.Presence = Presence;