diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index e138c7b08..a10a226d7 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -213,8 +213,10 @@ var InternalClient = (function () { this.messageAwaits = {}; this.retryAfters = {}; - this.tokenCacher = new _UtilTokenCacher2["default"](this.client); - this.tokenCacher.init(0); + if (!this.tokenCacher) { + this.tokenCacher = new _UtilTokenCacher2["default"](this.client); + this.tokenCacher.init(0); + } }; InternalClient.prototype.cleanIntervals = function cleanIntervals() { @@ -255,7 +257,6 @@ var InternalClient = (function () { if (!_this2.email && !_this2.token) { return; } - _this2.setup(); // Check whether the email is set (if not, only a token has been used for login) _this2.loginWithToken(_this2.token, _this2.email, _this2.password)["catch"](function () { @@ -588,6 +589,8 @@ var InternalClient = (function () { InternalClient.prototype.loginWithToken = function loginWithToken(token, email, password) { var _this10 = this; + this.setup(); + this.state = _ConnectionState2["default"].LOGGED_IN; this.token = token; this.email = email; @@ -1819,8 +1822,11 @@ var InternalClient = (function () { data.content = data.content || msg.content; data.mentions = data.mentions || msg.mentions; data.author = data.author || msg.author; - var nmsg = new _StructuresMessage2["default"](data, channel, client); - client.emit("messageUpdated", new _StructuresMessage2["default"](msg, channel, client), nmsg); + msg = new _StructuresMessage2["default"](msg, channel, client); + } + var nmsg = new _StructuresMessage2["default"](data, channel, client); + client.emit("messageUpdated", msg, nmsg); + if (msg) { channel.messages.update(msg, nmsg); } } else { diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index d559aafa3..5694ddb69 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -133,10 +133,8 @@ var Server = (function (_Equality) { var presence = _ref; var user = client.internal.users.get("id", presence.user.id); - if (user) { - user.status = presence.status; - user.game = presence.game; - } + user.status = presence.status; + user.game = presence.game; } } diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index a30cfd68f..758357ffe 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -53,8 +53,8 @@ export default class InternalClient { apiRequest(method, url, useAuth, data, file) { var endpoint = url.replace(/\/[0-9]+/g, "/:id"); - if(this.retryAfters[endpoint]) { - if(this.retryAfters[endpoint] < Date.now()) { + if (this.retryAfters[endpoint]) { + if (this.retryAfters[endpoint] < Date.now()) { delete this.retryAfters[endpoint]; } else { return new Promise((resolve, reject) => { @@ -93,7 +93,7 @@ export default class InternalClient { if (data.headers["retry-after"] || data.headers["Retry-After"]) { var toWait = data.headers["retry-after"] || data.headers["Retry-After"]; - if(!this.retryAfters[endpoint]) + if (!this.retryAfters[endpoint]) this.retryAfters[endpoint] = Date.now() + parseInt(toWait); setTimeout(() => { this.apiRequest.apply(this, arguments).then(resolve).catch(reject); @@ -150,8 +150,10 @@ export default class InternalClient { this.messageAwaits = {}; this.retryAfters = {}; - this.tokenCacher = new TokenCacher(this.client); - this.tokenCacher.init(0); + if (!this.tokenCacher) { + this.tokenCacher = new TokenCacher(this.client); + this.tokenCacher.init(0); + } } cleanIntervals() { @@ -173,10 +175,9 @@ export default class InternalClient { if (autoReconnect) { this.autoReconnectInterval = Math.min(this.autoReconnectInterval * (Math.random() + 1), 60000); setTimeout(() => { - if(!this.email && !this.token) { + if (!this.email && !this.token) { return; } - this.setup(); // Check whether the email is set (if not, only a token has been used for login) this.loginWithToken(this.token, this.email, this.password).catch(() => this.disconnected(true)); @@ -305,7 +306,7 @@ export default class InternalClient { chan.on("error", reject); chan.on("close", reject); - if(timeout) { + if (timeout) { clearTimeout(timeout); } this.websocket.removeListener("message", check); @@ -344,7 +345,7 @@ export default class InternalClient { getGuildMembers(serverID, chunkCount) { this.forceFetchCount[serverID] = chunkCount; - if(this.forceFetchLength + 3 + serverID.length > 4082) { // 4096 - '{"op":8,"d":[]}'.length + 1 for lazy comma offset + if (this.forceFetchLength + 3 + serverID.length > 4082) { // 4096 - '{"op":8,"d":[]}'.length + 1 for lazy comma offset this.requestGuildMembers(this.forceFetchQueue); this.forceFetchQueue = [serverID]; this.forceFetchLength = 1 + serverID.length + 3; @@ -365,8 +366,8 @@ export default class InternalClient { } checkReady() { - if(!this.readyTime) { - if(this.forceFetchQueue.length > 0) { + if (!this.readyTime) { + if (this.forceFetchQueue.length > 0) { this.requestGuildMembers(this.forceFetchQueue); this.forceFetchQueue = []; this.forceFetchLength = 1; @@ -383,11 +384,11 @@ export default class InternalClient { } restartServerCreateTimeout() { - if(this.guildCreateTimeout) { + if (this.guildCreateTimeout) { clearTimeout(this.guildCreateTimeout); this.guildCreateTimeout = null; } - if(!this.readyTime) { + if (!this.readyTime) { this.guildCreateTimeout = setTimeout(() => { this.checkReady(); }, this.client.options.guildCreateTimeout); @@ -489,6 +490,8 @@ export default class InternalClient { // def loginWithToken // email and password are optional loginWithToken(token, email, password) { + this.setup(); + this.state = ConnectionState.LOGGED_IN; this.token = token; this.email = email; @@ -582,7 +585,7 @@ export default class InternalClient { // def getGateway getGateway() { - if(this.gatewayURL) { + if (this.gatewayURL) { return Promise.resolve(this.gatewayURL); } return this.apiRequest("get", Endpoints.GATEWAY, true) @@ -1500,7 +1503,7 @@ export default class InternalClient { data.guilds.forEach(server => { if (!server.unavailable) { server = self.servers.add(new Server(server, client)); - if(self.client.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { + if (self.client.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } } else { @@ -1591,8 +1594,11 @@ export default class InternalClient { data.content = data.content || msg.content; data.mentions = data.mentions || msg.mentions; data.author = data.author || msg.author; - var nmsg = new Message(data, channel, client); - client.emit("messageUpdated", new Message(msg, channel, client), nmsg); + msg = new Message(msg, channel, client); + } + var nmsg = new Message(data, channel, client); + client.emit("messageUpdated", msg, nmsg); + if (msg) { channel.messages.update(msg, nmsg); } } else { @@ -1604,14 +1610,14 @@ export default class InternalClient { if (!server) { if (!data.unavailable) { server = self.servers.add(new Server(data, client)); - if(client.readyTime) { + if (client.readyTime) { client.emit("serverCreated", server); } if (self.client.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } var unavailable = self.unavailableServers.get("id", server.id); - if(unavailable) { + if (unavailable) { self.unavailableServers.remove(unavailable); } self.restartServerCreateTimeout(); @@ -2016,8 +2022,8 @@ export default class InternalClient { server.members.add(self.users.add(new User(user.user, client))); } - if(self.forceFetchCount.hasOwnProperty(server.id)) { - if(self.forceFetchCount[server.id] <= 1) { + if (self.forceFetchCount.hasOwnProperty(server.id)) { + if (self.forceFetchCount[server.id] <= 1) { delete self.forceFetchCount[server.id]; self.checkReady(); } else { diff --git a/src/Structures/Server.js b/src/Structures/Server.js index a3545cec5..197005b01 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -83,10 +83,8 @@ export default class Server extends Equality { if (data.presences) { for (var presence of data.presences) { var user = client.internal.users.get("id", presence.user.id); - if (user) { - user.status = presence.status; - user.game = presence.game; - } + user.status = presence.status; + user.game = presence.game; } }