diff --git a/index.js b/index.js index 1d70d216d..42376402c 100644 --- a/index.js +++ b/index.js @@ -468,7 +468,18 @@ exports.Client.prototype.connectWebsocket = function( cb ) { } else if ( dat.t === "PRESENCE_UPDATE" ) { var data = dat.d; - + var getUser = self.getUser(data.user.id); + if ( getUser ) { + //user already exists + var usr = new User( data.user ); + if ( usr.equalsStrict( getUser ) ) { + //no changes, actually a presence. + } else { + if(self.updateUserReferences( data.user.id, getUser, new User( data.user ) )){ + self.triggerEvent("userupdate", [getUser, usr]); + } + } + } self.triggerEvent( "presence", [ new User( data.user ), data.status, self.serverList.filter( "id", data.guild_id, true ) ] ); } else if ( dat.t === "GUILD_DELETE" ) { @@ -1002,6 +1013,23 @@ exports.isUserID = function( id ) { return ( ( id + "" ).length === 17 && !isNaN( id ) ); } +exports.Client.prototype.updateUserReferences = function( id, oldUser, user ) { + + if ( oldUser.equalsStrict( user ) ) { + return false; + } + + for ( server of this.serverList.contents ) { + + server.members.updateElement( oldUser, user ); + + } + + this.debug( "Updated references to " + oldUser.username + " to " + this.getUser( id ).username ); + return true; + +} + exports.Client.prototype.addPM = function( pm ) { this.PMList.add( pm ); } diff --git a/lib/user.js b/lib/user.js index 3de727332..2bf3cc51b 100644 --- a/lib/user.js +++ b/lib/user.js @@ -1,31 +1,37 @@ -exports.User = function(username, id, discriminator, avatar){ +exports.User = function( username, id, discriminator, avatar ) { - if(!id){ //there's no second argument - var user = username; - username = user.username; - id = user.id; - discriminator = user.discriminator; - avatar = user.avatar; - } + if ( !id ) { //there's no second argument + var user = username; + username = user.username; + id = user.id; + discriminator = user.discriminator; + avatar = user.avatar; + } - this.username = username; - this.discriminator = discriminator; - this.id = id; - this.avatar = avatar; + this.username = username; + this.discriminator = discriminator; + this.id = id; + this.avatar = avatar; } -exports.User.prototype.getAvatarURL = function(){ - if(!this.avatar) - return false; - return "https://discordapp.com/api/users/" + this.id + "/avatars/" + this.avatar + ".jpg"; +exports.User.prototype.getAvatarURL = function() { + if ( !this.avatar ) + return false; + return "https://discordapp.com/api/users/" + this.id + "/avatars/" + this.avatar + ".jpg"; } -exports.User.prototype.mention = function(){ - return "<@"+this.id+">"; +exports.User.prototype.mention = function() { + return "<@" + this.id + ">"; } -exports.User.prototype.equals = function(otherUser){ +exports.User.prototype.equals = function( otherUser ) { - return otherUser.id === this.id; + return otherUser.id === this.id; + +} + +exports.User.prototype.equalsStrict = function( otherUser ) { + + return ( this.username === otherUser.username && this.discriminator === otherUser.discriminator && this.id === otherUser.id && this.avatar === otherUser.avatar ); } diff --git a/package.json b/package.json index 7a384f55f..43fbfabd0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord.js", - "version": "2.7.0", + "version": "2.7.1", "description": "A way to interface with the Discord API", "main": "index.js", "scripts": {