'use strict'; const Action = require('./Action'); const { Events } = require('../../util/Constants'); const { PartialTypes } = require('../../util/Constants'); /* { user_id: 'id', message_id: 'id', emoji: { name: '�', id: null }, channel_id: 'id', // If originating from a guild guild_id: 'id', member: { ..., user: { ... } } } */ class MessageReactionAdd extends Action { handle(data, fromStructure = false) { if (!data.emoji) return false; const user = this.getUserFromMember(data); if (!user) return false; // Verify channel const channel = this.getChannel(data); if (!channel || !channel.isText()) return false; // Verify message const message = this.getMessage(data, channel); if (!message) return false; // Verify reaction const includePartial = this.client.options.partials.includes(PartialTypes.REACTION); if (message.partial && !includePartial) return false; const reaction = message.reactions._add({ emoji: data.emoji, count: message.partial ? null : 0, me: user.id === this.client.user.id, me_burst: user.id === this.client.user.id && data.me_burst, }); if (!reaction) return false; reaction._add(user); if (fromStructure) return { message, reaction, user }; /** * Emitted whenever a reaction is added to a cached message. * @event Client#messageReactionAdd * @param {MessageReaction} messageReaction The reaction object * @param {User} user The user that applied the guild or reaction emoji */ this.client.emit(Events.MESSAGE_REACTION_ADD, reaction, user); return { message, reaction, user }; } } module.exports = MessageReactionAdd;