diff --git a/src/client/websocket/packets/WebSocketPacketManager.js b/src/client/websocket/packets/WebSocketPacketManager.js index a64a7bac7..bb9ef601e 100644 --- a/src/client/websocket/packets/WebSocketPacketManager.js +++ b/src/client/websocket/packets/WebSocketPacketManager.js @@ -8,6 +8,8 @@ const BeforeReadyWhitelist = [ Constants.WSEvents.GUILD_DELETE, ]; +var amount = 0; + class WebSocketPacketManager { constructor(websocketManager) { @@ -31,6 +33,7 @@ class WebSocketPacketManager { this.register(Constants.WSEvents.CHANNEL_DELETE, 'ChannelDelete'); this.register(Constants.WSEvents.CHANNEL_UPDATE, 'ChannelUpdate'); this.register(Constants.WSEvents.PRESENCE_UPDATE, 'PresenceUpdate'); + this.register(Constants.WSEvents.USER_UPDATE, 'UserUpdate'); } get client() { @@ -50,7 +53,7 @@ class WebSocketPacketManager { } handle(packet) { - + amount++; if (!this.ws.emittedReady) { if (BeforeReadyWhitelist.indexOf(packet.t) === -1) { this.queue.push(packet); diff --git a/src/client/websocket/packets/handlers/Ready.js b/src/client/websocket/packets/handlers/Ready.js index cd512a5e8..b5bd514f3 100644 --- a/src/client/websocket/packets/handlers/Ready.js +++ b/src/client/websocket/packets/handlers/Ready.js @@ -16,7 +16,6 @@ class ReadyHandler extends AbstractHandler { handle(packet) { let data = packet.d; let client = this.packetManager.client; - client.manager.setupKeepAlive(data.heartbeat_interval); client.store.user = client.store.add('users', new ClientUser(client, data.user)); @@ -29,6 +28,8 @@ class ReadyHandler extends AbstractHandler { client.store.NewChannel(privateDM); } + this.packetManager.ws.checkIfReady(); + } }; diff --git a/src/client/websocket/packets/handlers/UserUpdate.js b/src/client/websocket/packets/handlers/UserUpdate.js new file mode 100644 index 000000000..d8bc1f7cc --- /dev/null +++ b/src/client/websocket/packets/handlers/UserUpdate.js @@ -0,0 +1,42 @@ +'use strict'; + +const AbstractHandler = require('./AbstractHandler'); +const Structure = name => require(`../../../../structures/${name}`); +const CloneObject = name => require(`../../../../util/CloneObject`); + +const ClientUser = Structure('ClientUser'); +const Guild = Structure('Guild'); +const DMChannel = Structure('DMChannel'); + +class UserUpdateHandler extends AbstractHandler { + + constructor(packetManager) { + super(packetManager); + } + + handle(packet) { + let data = packet.d; + let client = this.packetManager.client; + + let user = client.store.user; + + if (!user) { + return; + } + + let oldUser = CloneObject(user); + + user.username = data.username || user.username; + user.id = data.id || user.id; + user.avatar = data.avatar || user.avatar; + user.discriminator = data.discriminator || user.discriminator; + user.email = data.email || user.email; + user.verified = data.verified || user.verified; + + client.emit(Constants.Events.USER_UPDATE, oldUser, user); + + } + +}; + +module.exports = UserUpdateHandler; diff --git a/src/util/Constants.js b/src/util/Constants.js index 3f2a8d64c..81511b072 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -92,6 +92,7 @@ const Events = exports.Events = { CHANNEL_DELETE: 'channelDelete', CHANNEL_UPDATE: 'channelUpdate', PRESENCE_UPDATE: 'presenceUpdate', + USER_UPDATE: 'userUpdate', WARN: 'warn', }; diff --git a/test/random.js b/test/random.js index 569b40b55..fd54e734b 100644 --- a/test/random.js +++ b/test/random.js @@ -50,5 +50,5 @@ client.on('guildRoleUpdate', (guild, old, newRole) => { }); client.on('presenceUpdate', (oldUser, newUser) => { - console.log('presence from', oldUser.username, 'to', newUser.username); + // console.log('presence from', oldUser.username, 'to', newUser.username); });