diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 021367a3e..d066965cd 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -680,7 +680,9 @@ var InternalClient = (function () { if (server) { server.memberMap[data.user.id] = { - roles: data.roles, + roles: data.roles.map(function (pid) { + return server.roles.get("id", pid); + }), mute: false, deaf: false, joinedAt: Date.parse(data.joined_at) @@ -696,6 +698,7 @@ var InternalClient = (function () { if (server) { var user = self.users.get("id", data.user.id); if (user) { + server.memberMap[data.user.id] = null; server.members.remove(user); client.emit("serverMemberRemoved", server, user); } else { @@ -705,6 +708,24 @@ var InternalClient = (function () { client.emit("warn", "server member removed but server doesn't exist in cache"); } break; + case PacketType.SERVER_MEMBER_UPDATE: + var server = self.servers.get("id", data.guild_id); + if (server) { + var user = self.users.get("id", data.user.id); + if (user) { + server.memberMap[data.user.id].roles = data.roles.map(function (pid) { + return server.roles.get("id", pid); + }); + server.memberMap[data.user.id].mute = data.mute; + server.memberMap[data.user.id].deaf = data.deaf; + client.emit("serverMemberUpdated", server, user); + } else { + client.emit("warn", "server member removed but user doesn't exist in cache"); + } + } else { + client.emit("warn", "server member updated but server doesn't exist in cache"); + } + break; } }; }; diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index d740b2ff7..7d3a24f9a 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -41,9 +41,17 @@ var Server = (function (_Equality) { this.afkChannelID = data.afk_channel_id; this.memberMap = {}; + var self = this; + + data.roles.forEach(function (dataRole) { + _this.roles.add(new Role(dataRole, _this, client)); + }); + data.members.forEach(function (dataUser) { _this.memberMap[dataUser.user.id] = { - roles: dataUser.roles, + roles: dataUser.roles.map(function (pid) { + return self.roles.get("id", pid); + }), mute: dataUser.mute, deaf: dataUser.deaf, joinedAt: Date.parse(dataUser.joined_at) @@ -61,10 +69,6 @@ var Server = (function (_Equality) { _this.channels.add(channel); } }); - - data.roles.forEach(function (dataRole) { - _this.roles.add(new Role(dataRole, _this, client)); - }); } Server.prototype.toString = function toString() { diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 4cf259636..707464a7d 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -704,7 +704,7 @@ class InternalClient { if (server) { server.memberMap[data.user.id] = { - roles: data.roles, + roles: data.roles.map((pid) => server.roles.get("id", pid)), mute: false, deaf: false, joinedAt: Date.parse(data.joined_at) @@ -725,6 +725,7 @@ class InternalClient { if(server){ var user = self.users.get("id", data.user.id); if(user){ + server.memberMap[data.user.id] = null; server.members.remove(user); client.emit("serverMemberRemoved", server, user); }else{ @@ -734,6 +735,22 @@ class InternalClient { client.emit("warn", "server member removed but server doesn't exist in cache"); } break; + case PacketType.SERVER_MEMBER_UPDATE: + var server = self.servers.get("id", data.guild_id); + if(server){ + var user = self.users.get("id", data.user.id); + if(user){ + server.memberMap[data.user.id].roles = data.roles.map((pid) => server.roles.get("id", pid)); + server.memberMap[data.user.id].mute = data.mute; + server.memberMap[data.user.id].deaf = data.deaf; + client.emit("serverMemberUpdated", server, user); + }else{ + client.emit("warn", "server member removed but user doesn't exist in cache"); + } + }else{ + client.emit("warn", "server member updated but server doesn't exist in cache"); + } + break; } } } diff --git a/src/Structures/Server.js b/src/Structures/Server.js index 367051c4e..e8036cb14 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -32,9 +32,15 @@ class Server extends Equality { this.afkChannelID = data.afk_channel_id; this.memberMap = {}; + var self = this; + + data.roles.forEach( (dataRole) => { + this.roles.add( new Role(dataRole, this, client) ); + } ); + data.members.forEach( (dataUser) => { this.memberMap[dataUser.user.id] = { - roles : dataUser.roles, + roles : dataUser.roles.map((pid) => self.roles.get("id", pid)), mute : dataUser.mute, deaf : dataUser.deaf, joinedAt : Date.parse(dataUser.joined_at) @@ -52,10 +58,6 @@ class Server extends Equality { this.channels.add(channel); } } ); - - data.roles.forEach( (dataRole) => { - this.roles.add( new Role(dataRole, this, client) ); - } ); } get iconURL() {