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

@@ -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,23 +62,19 @@ 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++; if (!this.me || user.id !== this.message.client.user.id || this.count === 0) 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);
this.count--; if (!this.me || user.id !== this.message.client.user.id) 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);
} }
} }
} }
}
module.exports = MessageReaction; module.exports = MessageReaction;