From d9fa561dd92feb1d1f5156c9f46efe41db0ff184 Mon Sep 17 00:00:00 2001 From: Brian Tanner Date: Thu, 9 Jun 2016 22:34:28 -0400 Subject: [PATCH] fix presence updates not emitting game changes, closes #420 (#421) --- lib/Client/InternalClient.js | 2 +- src/Client/InternalClient.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 73ceadbb4..91ea7758d 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -102,7 +102,7 @@ client.emit("debug","received server update but server already updated");}else { channel.server.channels.remove(channel);self.channels.remove(channel);}else {self.private_channels.remove(channel);}client.emit("channelDeleted",channel);}else {client.emit("warn","channel deleted but already out of cache?");}break;case _Constants.PacketType.CHANNEL_UPDATE:var channel=self.channels.get("id",data.id) || self.private_channels.get("id",data.id);if(channel){if(channel instanceof _StructuresPMChannel2["default"]){ //PM CHANNEL client.emit("channelUpdated",new _StructuresPMChannel2["default"](channel,client),self.private_channels.update(channel,new _StructuresPMChannel2["default"](data,client)));}else {if(channel.server){if(channel.type === "text"){ //TEXT CHANNEL var chan=new _StructuresTextChannel2["default"](data,client,channel.server);chan.messages = channel.messages;client.emit("channelUpdated",channel,chan);channel.server.channels.update(channel,chan);self.channels.update(channel,chan);}else { //VOICE CHANNEL -data.members = channel.members;var chan=new _StructuresVoiceChannel2["default"](data,client,channel.server);client.emit("channelUpdated",channel,chan);channel.server.channels.update(channel,chan);self.channels.update(channel,chan);}}else {client.emit("warn","channel updated but server non-existant");}}}else {client.emit("warn","channel updated but not in cache");}break;case _Constants.PacketType.SERVER_ROLE_CREATE:var server=self.servers.get("id",data.guild_id);if(server){client.emit("serverRoleCreated",server.roles.add(new _StructuresRole2["default"](data.role,server,client)),server);}else {client.emit("warn","server role made but server not in cache");}break;case _Constants.PacketType.SERVER_ROLE_DELETE:var server=self.servers.get("id",data.guild_id);if(server){var role=server.roles.get("id",data.role_id);if(role){server.roles.remove(role);client.emit("serverRoleDeleted",role);}else {client.emit("warn","server role deleted but role not in cache");}}else {client.emit("warn","server role deleted but server not in cache");}break;case _Constants.PacketType.SERVER_ROLE_UPDATE:var server=self.servers.get("id",data.guild_id);if(server){var role=server.roles.get("id",data.role.id);if(role){var newRole=new _StructuresRole2["default"](data.role,server,client);client.emit("serverRoleUpdated",new _StructuresRole2["default"](role,server,client),newRole);server.roles.update(role,newRole);}else {client.emit("warn","server role updated but role not in cache");}}else {client.emit("warn","server role updated but server not in cache");}break;case _Constants.PacketType.SERVER_MEMBER_ADD:var server=self.servers.get("id",data.guild_id);if(server){server.memberMap[data.user.id] = {roles:data.roles,mute:false,selfMute:false,deaf:false,selfDeaf:false,joinedAt:Date.parse(data.joined_at),nick:data.nick || null};server.memberCount++;client.emit("serverNewMember",server,server.members.add(self.users.add(new _StructuresUser2["default"](data.user,client))));}else {client.emit("warn","server member added but server doesn't exist in cache");}break;case _Constants.PacketType.SERVER_MEMBER_REMOVE:var server=self.servers.get("id",data.guild_id);if(server){var user=self.users.get("id",data.user.id);if(user){client.emit("serverMemberRemoved",server,user);server.memberMap[data.user.id] = null;server.members.remove(user);server.memberCount--;}else {client.emit("warn","server member removed but user doesn't exist in cache");}}else {client.emit("warn","server member removed but server doesn't exist in cache");}break;case _Constants.PacketType.SERVER_MEMBER_UPDATE:var server=self.servers.get("id",data.guild_id);if(server){var user=self.users.add(new _StructuresUser2["default"](data.user,client));if(user){var oldMember=null;if(server.memberMap[data.user.id]){oldMember = {roles:server.memberMap[data.user.id].roles,mute:server.memberMap[data.user.id].mute,selfMute:server.memberMap[data.user.id].selfMute,deaf:server.memberMap[data.user.id].deaf,selfDeaf:server.memberMap[data.user.id].selfDeaf,nick:server.memberMap[data.user.id].nick};}else {server.memberMap[data.user.id] = {};}server.memberMap[data.user.id].roles = data.roles?data.roles:server.memberMap[data.user.id].roles;server.memberMap[data.user.id].mute = data.mute || server.memberMap[data.user.id].mute;server.memberMap[data.user.id].selfMute = data.self_mute === undefined?server.memberMap[data.user.id].selfMute:data.self_mute;server.memberMap[data.user.id].deaf = data.deaf || server.memberMap[data.user.id].deaf;server.memberMap[data.user.id].selfDeaf = data.self_deaf === undefined?server.memberMap[data.user.id].selfDeaf:data.self_deaf;server.memberMap[data.user.id].nick = data.nick === undefined?server.memberMap[data.user.id].nick:data.nick || null;client.emit("serverMemberUpdated",server,user,oldMember);}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;case _Constants.PacketType.PRESENCE_UPDATE:var user=self.users.add(new _StructuresUser2["default"](data.user,client));var server=self.servers.get("id",data.guild_id);if(user && server){server.members.add(user);data.user.username = data.user.username || user.username;data.user.id = data.user.id || user.id;data.user.avatar = data.user.avatar !== undefined?data.user.avatar:user.avatar;data.user.discriminator = data.user.discriminator || user.discriminator;data.user.status = data.status || user.status;data.user.game = data.user.game !== undefined?data.user.game:user.game;data.user.bot = data.user.bot !== undefined?data.user.bot:user.bot;var presenceUser=new _StructuresUser2["default"](data.user,client);if(!presenceUser.equalsStrict(user)){client.emit("presence",user,presenceUser);self.users.update(user,presenceUser);}}else {client.emit("warn","presence update but user/server not in cache");}break;case _Constants.PacketType.USER_UPDATE:var user=self.users.get("id",data.id);if(user){data.username = data.username || user.username;data.id = data.id || user.id;data.avatar = data.avatar || user.avatar;data.discriminator = data.discriminator || user.discriminator;_this36.email = data.email || _this36.email;var presenceUser=new _StructuresUser2["default"](data,client);client.emit("presence",user,presenceUser);self.users.update(user,presenceUser);}else {client.emit("warn","user update but user not in cache (this should never happen)");}break;case _Constants.PacketType.TYPING:var user=self.users.get("id",data.user_id);var channel=self.channels.get("id",data.channel_id) || self.private_channels.get("id",data.channel_id);if(user && channel){if(user.typing.since){user.typing.since = Date.now();user.typing.channel = channel;}else {user.typing.since = Date.now();user.typing.channel = channel;client.emit("userTypingStarted",user,channel);}setTimeout(function(){if(Date.now() - user.typing.since > 5500){ // they haven't typed since +data.members = channel.members;var chan=new _StructuresVoiceChannel2["default"](data,client,channel.server);client.emit("channelUpdated",channel,chan);channel.server.channels.update(channel,chan);self.channels.update(channel,chan);}}else {client.emit("warn","channel updated but server non-existant");}}}else {client.emit("warn","channel updated but not in cache");}break;case _Constants.PacketType.SERVER_ROLE_CREATE:var server=self.servers.get("id",data.guild_id);if(server){client.emit("serverRoleCreated",server.roles.add(new _StructuresRole2["default"](data.role,server,client)),server);}else {client.emit("warn","server role made but server not in cache");}break;case _Constants.PacketType.SERVER_ROLE_DELETE:var server=self.servers.get("id",data.guild_id);if(server){var role=server.roles.get("id",data.role_id);if(role){server.roles.remove(role);client.emit("serverRoleDeleted",role);}else {client.emit("warn","server role deleted but role not in cache");}}else {client.emit("warn","server role deleted but server not in cache");}break;case _Constants.PacketType.SERVER_ROLE_UPDATE:var server=self.servers.get("id",data.guild_id);if(server){var role=server.roles.get("id",data.role.id);if(role){var newRole=new _StructuresRole2["default"](data.role,server,client);client.emit("serverRoleUpdated",new _StructuresRole2["default"](role,server,client),newRole);server.roles.update(role,newRole);}else {client.emit("warn","server role updated but role not in cache");}}else {client.emit("warn","server role updated but server not in cache");}break;case _Constants.PacketType.SERVER_MEMBER_ADD:var server=self.servers.get("id",data.guild_id);if(server){server.memberMap[data.user.id] = {roles:data.roles,mute:false,selfMute:false,deaf:false,selfDeaf:false,joinedAt:Date.parse(data.joined_at),nick:data.nick || null};server.memberCount++;client.emit("serverNewMember",server,server.members.add(self.users.add(new _StructuresUser2["default"](data.user,client))));}else {client.emit("warn","server member added but server doesn't exist in cache");}break;case _Constants.PacketType.SERVER_MEMBER_REMOVE:var server=self.servers.get("id",data.guild_id);if(server){var user=self.users.get("id",data.user.id);if(user){client.emit("serverMemberRemoved",server,user);server.memberMap[data.user.id] = null;server.members.remove(user);server.memberCount--;}else {client.emit("warn","server member removed but user doesn't exist in cache");}}else {client.emit("warn","server member removed but server doesn't exist in cache");}break;case _Constants.PacketType.SERVER_MEMBER_UPDATE:var server=self.servers.get("id",data.guild_id);if(server){var user=self.users.add(new _StructuresUser2["default"](data.user,client));if(user){var oldMember=null;if(server.memberMap[data.user.id]){oldMember = {roles:server.memberMap[data.user.id].roles,mute:server.memberMap[data.user.id].mute,selfMute:server.memberMap[data.user.id].selfMute,deaf:server.memberMap[data.user.id].deaf,selfDeaf:server.memberMap[data.user.id].selfDeaf,nick:server.memberMap[data.user.id].nick};}else {server.memberMap[data.user.id] = {};}server.memberMap[data.user.id].roles = data.roles?data.roles:server.memberMap[data.user.id].roles;server.memberMap[data.user.id].mute = data.mute || server.memberMap[data.user.id].mute;server.memberMap[data.user.id].selfMute = data.self_mute === undefined?server.memberMap[data.user.id].selfMute:data.self_mute;server.memberMap[data.user.id].deaf = data.deaf || server.memberMap[data.user.id].deaf;server.memberMap[data.user.id].selfDeaf = data.self_deaf === undefined?server.memberMap[data.user.id].selfDeaf:data.self_deaf;server.memberMap[data.user.id].nick = data.nick === undefined?server.memberMap[data.user.id].nick:data.nick || null;client.emit("serverMemberUpdated",server,user,oldMember);}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;case _Constants.PacketType.PRESENCE_UPDATE:var user=self.users.add(new _StructuresUser2["default"](data.user,client));var server=self.servers.get("id",data.guild_id);if(user && server){server.members.add(user);data.user.username = data.user.username || user.username;data.user.id = data.user.id || user.id;data.user.avatar = data.user.avatar !== undefined?data.user.avatar:user.avatar;data.user.discriminator = data.user.discriminator || user.discriminator;data.user.status = data.status || user.status;data.user.game = data.game !== undefined?data.game:user.game;data.user.bot = data.user.bot !== undefined?data.user.bot:user.bot;var presenceUser=new _StructuresUser2["default"](data.user,client);if(!presenceUser.equalsStrict(user)){client.emit("presence",user,presenceUser);self.users.update(user,presenceUser);}}else {client.emit("warn","presence update but user/server not in cache");}break;case _Constants.PacketType.USER_UPDATE:var user=self.users.get("id",data.id);if(user){data.username = data.username || user.username;data.id = data.id || user.id;data.avatar = data.avatar || user.avatar;data.discriminator = data.discriminator || user.discriminator;_this36.email = data.email || _this36.email;var presenceUser=new _StructuresUser2["default"](data,client);client.emit("presence",user,presenceUser);self.users.update(user,presenceUser);}else {client.emit("warn","user update but user not in cache (this should never happen)");}break;case _Constants.PacketType.TYPING:var user=self.users.get("id",data.user_id);var channel=self.channels.get("id",data.channel_id) || self.private_channels.get("id",data.channel_id);if(user && channel){if(user.typing.since){user.typing.since = Date.now();user.typing.channel = channel;}else {user.typing.since = Date.now();user.typing.channel = channel;client.emit("userTypingStarted",user,channel);}setTimeout(function(){if(Date.now() - user.typing.since > 5500){ // they haven't typed since user.typing.since = null;user.typing.channel = null;client.emit("userTypingStopped",user,channel);}},6000);}else {client.emit("warn","user typing but user or channel not existant in cache");}break;case _Constants.PacketType.SERVER_BAN_ADD:var user=self.users.get("id",data.user.id);var server=self.servers.get("id",data.guild_id);if(user && server){client.emit("userBanned",user,server);}else {client.emit("warn","user banned but user/server not in cache.");}break;case _Constants.PacketType.SERVER_BAN_REMOVE:var user=self.users.get("id",data.user.id);var server=self.servers.get("id",data.guild_id);if(user && server){client.emit("userUnbanned",user,server);}else {client.emit("warn","user unbanned but user/server not in cache.");}break;case _Constants.PacketType.VOICE_STATE_UPDATE:var user=self.users.get("id",data.user_id);var server=self.servers.get("id",data.guild_id);var connection=self.voiceConnections.get("server",server);if(user && server){if(data.channel_id){ // in voice channel var channel=self.channels.get("id",data.channel_id);if(channel && channel.type === "voice"){server.eventVoiceStateUpdate(channel,user,data);}else {client.emit("warn","voice state channel not in cache");}}else { // not in voice channel client.emit("voiceLeave",server.eventVoiceLeave(user),user);}}else {client.emit("warn","voice state update but user or server not in cache");}if(user && user.id === self.user.id){ // only for detecting self user movements for connections. diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 07d7edc0c..9abdb9e69 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -1901,7 +1901,7 @@ export default class InternalClient { data.user.avatar = data.user.avatar !== undefined ? data.user.avatar : user.avatar; data.user.discriminator = data.user.discriminator || user.discriminator; data.user.status = data.status || user.status; - data.user.game = data.user.game !== undefined ? data.user.game : user.game; + data.user.game = data.game !== undefined ? data.game : user.game; data.user.bot = data.user.bot !== undefined ? data.user.bot : user.bot; var presenceUser = new User(data.user, client);