Class MessageReaction

java.lang.Object
net.dv8tion.jda.api.entities.MessageReaction

public class MessageReaction extends Object
An object representing a single MessageReaction from Discord. This is an immutable object and is not updated by method calls or changes in Discord. A new snapshot instance built from Discord is needed to see changes.
See Also:
  • Constructor Details

    • MessageReaction

      public MessageReaction(@Nonnull JDA jda, @Nullable MessageChannel channel, @Nonnull EmojiUnion emoji, long channelId, long messageId, boolean[] self, int[] counts)
      Creates a new MessageReaction instance
      Parameters:
      channel - The MessageChannel this Reaction was used in
      emoji - The Emoji that was used
      channelId - The channel id for this reaction
      messageId - The message id this reaction is attached to
      self - Whether we already reacted with this Reaction, as an array of [normal, super]
      counts - The amount of people that reacted with this Reaction, as an array of [total, normal, super]
  • Method Details

    • getJDA

      @Nonnull public JDA getJDA()
      The JDA instance of this Reaction
      Returns:
      The JDA instance of this Reaction
    • isSelf

      public boolean isSelf()
      Whether the currently logged in account has reacted with this reaction at all, including both super and normal.

      This will always be false for events. Discord does not provide this information for reaction events. You can use MessageChannel.retrieveMessageById(String) to get this information on a complete message.

      Returns:
      True, if we reacted with this reaction
      See Also:
    • isSelf

      public boolean isSelf(@Nonnull MessageReaction.ReactionType type)
      Whether the currently logged in account has reacted with this reaction as specifically a super or normal reaction.

      This will always be false for events. Discord does not provide this information for reaction events. You can use MessageChannel.retrieveMessageById(String) to get this information on a complete message.

      Parameters:
      type - The specific type of reaction
      Returns:
      True, if we reacted with this reaction
    • hasCount

      public boolean hasCount()
      Whether this reaction can provide a count via getCount().
      This is usually not provided for reactions coming from MessageReactionAddEvent or similar.
      Returns:
      True, if a count is available
      See Also:
    • hasChannel

      public boolean hasChannel()
      Whether this reaction instance has an available getChannel().

      This can be false for messages sent via webhooks, or in the context of interactions.

      Returns:
      True, if getChannel() is available
    • getCount

      public int getCount()
      The total amount of users that already reacted with this Reaction.
      This is not updated, it is a final int per Reaction instance

      This value is not available in events such as MessageReactionAddEvent and MessageReactionRemoveEvent in which case an IllegalStateException is thrown!

      Returns:
      The amount of users that reacted with this Reaction
      Throws:
      IllegalStateException - If this MessageReaction is from an event which does not provide a count
      See Also:
    • getCount

      public int getCount(@Nonnull MessageReaction.ReactionType type)
      The specific amount of users that already reacted with this Reaction.
      This is not updated, it is a final int per Reaction instance

      This value is not available in events such as MessageReactionAddEvent and MessageReactionRemoveEvent in which case an IllegalStateException is thrown!

      Parameters:
      type - The specific type of reaction
      Returns:
      The amount of users that reacted with this Reaction
      Throws:
      IllegalStateException - If this MessageReaction is from an event which does not provide a count
      See Also:
    • getChannelType

      @Nonnull public ChannelType getChannelType()
      The ChannelType this Reaction was used in.
      Returns:
      The ChannelType
    • isFromType

      public boolean isFromType(@Nonnull ChannelType type)
      Whether this Reaction was used in a MessageChannel of the specified ChannelType.
      Parameters:
      type - The ChannelType to compare
      Returns:
      True, if this Reaction was used in a MessageChannel from the specified ChannelType
    • getGuild

      @Nonnull public Guild getGuild()
      The Guild this Reaction was used in.
      Returns:
      Guild this Reaction was used in
      Throws:
      IllegalStateException - If getChannel() is not a guild channel or the channel is not provided
    • getChannel

      @Nonnull public MessageChannelUnion getChannel()
      The MessageChannel this Reaction was used in.
      Returns:
      The channel this Reaction was used in
      Throws:
      IllegalStateException - If no channel instance is provided, this might be missing for messages sent from webhooks.
    • getGuildChannel

      @Nonnull public GuildMessageChannelUnion getGuildChannel()
      The channel this Reaction was used in.
      Returns:
      The guild channel this Reaction was used in
      Throws:
      IllegalStateException - If getChannel() is not a guild channel or the channel is not provided
    • getChannelIdLong

      public long getChannelIdLong()
      The ID for the channel this reaction happened in.
      Returns:
      The channel id
    • getChannelId

      @Nonnull public String getChannelId()
      The ID for the channel this reaction happened in.
      Returns:
      The channel id
    • getEmoji

      @Nonnull public EmojiUnion getEmoji()
      The Emoji of this Reaction.
      This includes both custom emojis and unicode emoji.
      Returns:
      The final instance of this Reaction's Emoji
    • getMessageId

      @Nonnull public String getMessageId()
      The message id this reaction is attached to
      Returns:
      The message id this reaction is attached to
    • getMessageIdLong

      public long getMessageIdLong()
      The message id this reaction is attached to
      Returns:
      The message id this reaction is attached to
    • retrieveUsers

      @Nonnull @CheckReturnValue public ReactionPaginationAction retrieveUsers()
      Retrieves the Users that already reacted with this MessageReaction.
      By default, this only includes users that reacted with MessageReaction.ReactionType.NORMAL. Use retrieveUsers(ReactionType.SUPER) to retrieve the users that used a super reaction instead.

      Possible ErrorResponses include:

      Returns:
      ReactionPaginationAction
      See Also:
    • retrieveUsers

      @Nonnull @CheckReturnValue public ReactionPaginationAction retrieveUsers(@Nonnull MessageReaction.ReactionType type)
      Retrieves the Users that already reacted with this MessageReaction.

      Possible ErrorResponses include:

      Parameters:
      type - The specific type of reaction
      Returns:
      ReactionPaginationAction
      Throws:
      IllegalArgumentException - If null is provided.
      See Also:
    • removeReaction

      @Nonnull @CheckReturnValue public RestAction<Void> removeReaction()
      Removes this Reaction from the Message.
      This will remove our own reaction as an overload of removeReaction(User).

      Possible ErrorResponses include:

      Returns:
      RestAction - Type: Void Nothing is returned on success
    • removeReaction

      @Nonnull @CheckReturnValue public RestAction<Void> removeReaction(@Nonnull User user)
      Removes this Reaction from the Message.
      This will remove the reaction of the User provided.

      If the provided User did not react with this Reaction this does nothing.

      Possible ErrorResponses include:

      Parameters:
      user - The User of which to remove the reaction
      Returns:
      RestAction Nothing is returned on success
      Throws:
      IllegalArgumentException - If the provided user is null.
      InsufficientPermissionException - If the provided User is not us and we do not have permission to manage messages in the channel this reaction was used in
      PermissionException - If the message is from another user in a PrivateChannel
    • clearReactions

      @Nonnull @CheckReturnValue public RestAction<Void> clearReactions()
      Removes this entire reaction from the message.
      Unlike removeReaction(User), which removes the reaction of a single user, this will remove the reaction completely.

      The following ErrorResponses are possible:

      • MISSING_ACCESS
        The currently logged in account lost access to the channel by either being removed from the guild or losing the VIEW_CHANNEL permission
      • UNKNOWN_EMOJI
        The provided unicode emoji doesn't exist. Try using one of the example formats.
      • UNKNOWN_MESSAGE
        The message was deleted.
      Returns:
      RestAction
      Throws:
      UnsupportedOperationException - If this reaction happened in a private channel
      InsufficientPermissionException - If the currently logged in account does not have Permission.MESSAGE_MANAGE in the channel
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object