From d2a9f15e82e2eb2eebb0fd9172eac6c00613ed7c Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Thu, 10 Mar 2016 22:16:05 -0800 Subject: [PATCH] Fixed options + message cache limit + server member count + leaving users --- lib/Client/Client.js | 5 ++-- lib/Client/InternalClient.js | 52 +++++++++++++++++++++++++++-------- lib/Structures/PMChannel.js | 4 +-- lib/Structures/TextChannel.js | 2 +- src/Client/Client.js | 5 ++-- src/Client/InternalClient.js | 17 ++++++++++-- src/Structures/PMChannel.js | 4 +-- src/Structures/TextChannel.js | 2 +- 8 files changed, 68 insertions(+), 23 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 7ccb35766..1f2efe736 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -73,8 +73,9 @@ var Client = (function (_EventEmitter) { this.options = options || {}; this.options.compress = options.compress || !process.browser; this.options.revive = options.revive || false; - this.options.rate_limit_as_error = options.rate_limit_as_error || false; - this.options.large_threshold = options.large_threshold || 250; + this.options.rateLimitAsError = options.rateLimitAsError || false; + this.options.largeThreshold = options.largeThreshold || 250; + this.options.maxCachedMessages = options.maxCachedMessages || 1000; /** * Internal Client that the Client wraps around. * @readonly diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index b853e4fd2..cd7bb0574 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -132,7 +132,7 @@ var InternalClient = (function () { return new Promise(function (resolve, reject) { ret.end(function (error, data) { if (error) { - if (!_this.client.options.rate_limit_as_error && error.response && error.response.error && error.response.error.status && error.response.error.status === 429) { + if (!_this.client.options.rateLimitAsError && error.response && error.response.error && error.response.error.status && error.response.error.status === 429) { if (data.headers["retry-after"] || data.headers["Retry-After"]) { var toWait = data.headers["retry-after"] || data.headers["Retry-After"]; @@ -1361,7 +1361,7 @@ var InternalClient = (function () { token: self.token, v: 3, compress: self.client.options.compress, - large_threshold: self.client.options.large_threshold, + large_threshold: self.client.options.largeThreshold, properties: { "$os": "discord.js", "$browser": "discord.js", @@ -1528,6 +1528,28 @@ var InternalClient = (function () { } self.servers.remove(server); + + for (var _iterator8 = self.users, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { + var _ref8; + + if (_isArray8) { + if (_i8 >= _iterator8.length) break; + _ref8 = _iterator8[_i8++]; + } else { + _i8 = _iterator8.next(); + if (_i8.done) break; + _ref8 = _i8.value; + } + + var user = _ref8; + + if (!self.servers.find(function (s) { + return !!s.members.get("id", user.id); + })) { + self.users.remove(user); + } + } + client.emit("serverDeleted", server); } else { client.emit("warn", "server was unavailable, could not update"); @@ -1680,6 +1702,8 @@ var InternalClient = (function () { joinedAt: Date.parse(data.joined_at) }; + 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"); @@ -1692,7 +1716,13 @@ var InternalClient = (function () { if (user) { server.memberMap[data.user.id] = null; server.members.remove(user); + server.memberCount--; client.emit("serverMemberRemoved", server, user); + if (!self.servers.find(function (s) { + return !!s.members.get("id", user.id); + })) { + self.users.remove(user); + } } else { client.emit("warn", "server member removed but user doesn't exist in cache"); } @@ -1846,19 +1876,19 @@ var InternalClient = (function () { var testtime = new Date().getTime(); - for (var _iterator8 = data.members, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { - var _ref8; + for (var _iterator9 = data.members, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { + var _ref9; - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref8 = _iterator8[_i8++]; + if (_isArray9) { + if (_i9 >= _iterator9.length) break; + _ref9 = _iterator9[_i9++]; } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref8 = _i8.value; + _i9 = _iterator9.next(); + if (_i9.done) break; + _ref9 = _i9.value; } - var user = _ref8; + var user = _ref9; server.memberMap[user.user.id] = { roles: user.roles.map(function (pid) { diff --git a/lib/Structures/PMChannel.js b/lib/Structures/PMChannel.js index 09d052713..ecbcb77d0 100644 --- a/lib/Structures/PMChannel.js +++ b/lib/Structures/PMChannel.js @@ -33,8 +33,8 @@ var PMChannel = (function (_Channel) { _Channel.call(this, data, client); this.type = data.type || "text"; - this.lastMessageId = data.last_message_id || data.lastMessageId; - this.messages = new _UtilCache2["default"]("id", 1000); + this.lastMessageID = data.last_message_id || data.lastMessageID; + this.messages = new _UtilCache2["default"]("id", client.options.maxCachedMessages); this.recipient = this.client.internal.users.add(new _User2["default"](data.recipient, this.client)); } diff --git a/lib/Structures/TextChannel.js b/lib/Structures/TextChannel.js index 38b36aea9..876640cbc 100644 --- a/lib/Structures/TextChannel.js +++ b/lib/Structures/TextChannel.js @@ -30,7 +30,7 @@ var TextChannel = (function (_ServerChannel) { this.topic = data.topic; this.lastMessageID = data.last_message_id || data.lastMessageID; - this.messages = new _UtilCache2["default"]("id", client.options.maximumMessages); + this.messages = new _UtilCache2["default"]("id", client.options.maxCachedMessages); } /* warning! may return null */ diff --git a/src/Client/Client.js b/src/Client/Client.js index 1d6e97150..78b4a2ae0 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -47,8 +47,9 @@ export default class Client extends EventEmitter { this.options = options || {}; this.options.compress = options.compress || (!process.browser); this.options.revive = options.revive || false; - this.options.rate_limit_as_error = options.rate_limit_as_error || false; - this.options.large_threshold = options.large_threshold || 250; + this.options.rateLimitAsError = options.rateLimitAsError || false; + this.options.largeThreshold = options.largeThreshold || 250; + this.options.maxCachedMessages = options.maxCachedMessages || 1000; /** * Internal Client that the Client wraps around. * @readonly diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 5cf3f4448..97d7355c8 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -65,7 +65,7 @@ export default class InternalClient { return new Promise((resolve, reject) => { ret.end((error, data) => { if (error) { - if (!this.client.options.rate_limit_as_error && + if (!this.client.options.rateLimitAsError && error.response && error.response.error && error.response.error.status @@ -1122,7 +1122,7 @@ export default class InternalClient { token: self.token, v: 3, compress: self.client.options.compress, - large_threshold : self.client.options.large_threshold, + large_threshold : self.client.options.largeThreshold, properties: { "$os": "discord.js", "$browser": "discord.js", @@ -1270,6 +1270,13 @@ export default class InternalClient { } self.servers.remove(server); + + for (var user of self.users) { + if (!self.servers.find((s) => !!s.members.get("id", user.id))) { + self.users.remove(user); + } + } + client.emit("serverDeleted", server); } else { client.emit("warn", "server was unavailable, could not update"); @@ -1424,6 +1431,8 @@ export default class InternalClient { joinedAt: Date.parse(data.joined_at) }; + server.memberCount++; + client.emit( "serverNewMember", server, @@ -1441,7 +1450,11 @@ export default class InternalClient { if (user) { server.memberMap[data.user.id] = null; server.members.remove(user); + server.memberCount--; client.emit("serverMemberRemoved", server, user); + if (!self.servers.find((s) => !!s.members.get("id", user.id))) { + self.users.remove(user); + } } else { client.emit("warn", "server member removed but user doesn't exist in cache"); } diff --git a/src/Structures/PMChannel.js b/src/Structures/PMChannel.js index 7c531c847..fbb2a1f8e 100644 --- a/src/Structures/PMChannel.js +++ b/src/Structures/PMChannel.js @@ -10,8 +10,8 @@ export default class PMChannel extends Channel { super(data, client); this.type = data.type || "text"; - this.lastMessageId = data.last_message_id || data.lastMessageId; - this.messages = new Cache("id", 1000); + this.lastMessageID = data.last_message_id || data.lastMessageID; + this.messages = new Cache("id", client.options.maxCachedMessages); this.recipient = this.client.internal.users.add(new User(data.recipient, this.client)); } diff --git a/src/Structures/TextChannel.js b/src/Structures/TextChannel.js index dbc183a8c..e9036bc08 100644 --- a/src/Structures/TextChannel.js +++ b/src/Structures/TextChannel.js @@ -10,7 +10,7 @@ export default class TextChannel extends ServerChannel{ this.topic = data.topic; this.lastMessageID = data.last_message_id || data.lastMessageID; - this.messages = new Cache("id", client.options.maximumMessages); + this.messages = new Cache("id", client.options.maxCachedMessages); } /* warning! may return null */