fix(MessageReaction): inaccurate count

also works towards async rewrite goal
fixes #2404
This commit is contained in:
Lewdcario
2018-03-24 15:22:21 -06:00
parent d041cb2460
commit 4e0e64d8a1
2 changed files with 20 additions and 28 deletions

View File

@@ -45,7 +45,7 @@ class MessageStore extends DataStore {
* .catch(console.error); * .catch(console.error);
* @example * @example
* // Get messages * // Get messages
* channel.messages.fetch({limit: 10}) * channel.messages.fetch({ limit: 10 })
* .then(messages => console.log(`Received ${messages.size} messages`)) * .then(messages => console.log(`Received ${messages.size} messages`))
* .catch(console.error); * .catch(console.error);
*/ */
@@ -67,26 +67,22 @@ class MessageStore extends DataStore {
}); });
} }
_fetchId(messageID) { async _fetchId(messageID) {
if (!this.client.user.bot) { if (!this.client.user.bot) {
return this._fetchMany({ limit: 1, around: messageID }) const messages = await this._fetchMany({ limit: 1, around: messageID });
.then(messages => { const msg = messages.get(messageID);
const msg = messages.get(messageID); if (!msg) throw new Error('MESSAGE_MISSING');
if (!msg) throw new Error('MESSAGE_MISSING'); return msg;
return msg;
});
} }
return this.client.api.channels[this.channel.id].messages[messageID].get() const data = await this.client.api.channels[this.channel.id].messages[messageID].get();
.then(data => this.add(data)); return this.add(data);
} }
_fetchMany(options = {}) { async _fetchMany(options = {}) {
return this.client.api.channels[this.channel.id].messages.get({ query: options }) const data = await this.client.api.channels[this.channel.id].messages.get({ query: options });
.then(data => { const messages = new Collection();
const messages = new Collection(); for (const message of data) messages.set(message.id, this.add(message));
for (const message of data) messages.set(message.id, this.add(message)); return messages;
return messages;
});
} }

View File

@@ -62,21 +62,17 @@ class MessageReaction {
} }
_add(user) { _add(user) {
if (!this.users.has(user.id)) { this.users.set(user.id, user);
this.users.set(user.id, user); if (!this.me || user.id !== this.message.client.user.id || this.count === 0) this.count++;
if (!this.me || user.id !== this.message.client.user.id) this.count++;
}
if (!this.me) this.me = user.id === this.message.client.user.id; if (!this.me) this.me = user.id === this.message.client.user.id;
} }
_remove(user) { _remove(user) {
if (this.users.has(user.id)) { this.users.delete(user.id);
this.users.delete(user.id); if (!this.me || user.id !== this.message.client.user.id) this.count--;
this.count--; if (user.id === this.message.client.user.id) this.me = false;
if (user.id === this.message.client.user.id) this.me = false; if (this.count <= 0) {
if (this.count <= 0) { this.message.reactions.remove(this.emoji.id || this.emoji.name);
this.message.reactions.remove(this.emoji.id || this.emoji.name);
}
} }
} }
} }