Back to top

hikari.events.reaction_events

Events that fire if messages are reacted to.

View Source
# -*- coding: utf-8 -*-
# cython: language_level=3
# Copyright (c) 2020 Nekokatt
# Copyright (c) 2021-present davfsa
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
"""Events that fire if messages are reacted to."""

from __future__ import annotations

__all__: typing.Sequence[str] = (
    "ReactionEvent",
    "GuildReactionEvent",
    "DMReactionEvent",
    "ReactionAddEvent",
    "ReactionDeleteEvent",
    "ReactionDeleteEmojiEvent",
    "ReactionDeleteAllEvent",
    "GuildReactionAddEvent",
    "GuildReactionDeleteEvent",
    "GuildReactionDeleteEmojiEvent",
    "GuildReactionDeleteAllEvent",
    "DMReactionAddEvent",
    "DMReactionDeleteEvent",
    "DMReactionDeleteEmojiEvent",
    "DMReactionDeleteAllEvent",
)

import abc
import typing

import attr

from hikari import emojis
from hikari import intents
from hikari.events import base_events
from hikari.events import shard_events
from hikari.internal import attr_extensions

if typing.TYPE_CHECKING:
    from hikari import guilds
    from hikari import snowflakes
    from hikari import traits
    from hikari.api import shard as gateway_shard


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionEvent(shard_events.ShardEvent, abc.ABC):
    """Event base for any message reaction event."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def channel_id(self) -> snowflakes.Snowflake:
        """ID of the channel that this event concerns."""

    @property
    @abc.abstractmethod
    def message_id(self) -> snowflakes.Snowflake:
        """ID of the message that this event concerns."""


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction-bound event in guild messages."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def guild_id(self) -> snowflakes.Snowflake:
        """ID of the guild that this event concerns."""


@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction-bound event in private messages."""

    __slots__: typing.Sequence[str] = ()


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionAddEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction that is added to a message."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def user_id(self) -> snowflakes.Snowflake:
        """ID of the user that added this reaction."""

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was added if known.

        This can either be the string name of the custom emoji which was added,
        the object of the `hikari.emojis.UnicodeEmoji` which was added or
        `None` when the relevant custom emoji's data is not available
        (e.g. the emoji has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    @property
    @abc.abstractmethod
    def is_animated(self) -> bool:
        """Whether the emoji which was added is animated."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was added.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEvent(ReactionEvent, abc.ABC):
    """Event base for any single reaction that is removed from a message."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def user_id(self) -> snowflakes.Snowflake:
        """User ID for the user that added this reaction initially."""

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was removed.

        Either the string name of the custom emoji which was removed, the object
        of the `hikari.emojis.UnicodeEmoji` which was removed or `None`
        when the relevant custom emoji's data is not available (e.g. the emoji
        has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteAllEvent(ReactionEvent, abc.ABC):
    """Event base fired when all reactions are removed from a message."""

    __slots__: typing.Sequence[str] = ()


@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEmojiEvent(ReactionEvent, abc.ABC):
    """Event base fired when all reactions are removed for one emoji."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was removed.

        Either the string name of the custom emoji which was removed, the object
        of the `hikari.emojis.UnicodeEmoji` which was removed or `None`
        when the relevant custom emoji's data is not available (e.g. the emoji
        has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionAddEvent(GuildReactionEvent, ReactionAddEvent):
    """Event fired when a reaction is added to a guild message."""

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    member: guilds.Member = attr.field()
    """Member that added the reaction."""

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    is_animated: bool = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    @property
    def app(self) -> traits.RESTAware:
        # <<inherited docstring from Event>>.
        return self.member.app

    @property
    def guild_id(self) -> snowflakes.Snowflake:
        # <<inherited docstring from GuildReactionEvent>>.
        return self.member.guild_id

    @property
    def user_id(self) -> snowflakes.Snowflake:
        # <<inherited docstring from ReactionAddEvent>>.
        return self.member.user.id


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEvent(GuildReactionEvent, ReactionDeleteEvent):
    """Event fired when a reaction is removed from a guild message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEmojiEvent(GuildReactionEvent, ReactionDeleteEmojiEvent):
    """Event fired when an emoji is removed from a guild message's reactions."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteAllEvent(GuildReactionEvent, ReactionDeleteAllEvent):
    """Event fired when all of a guild message's reactions are removed."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionAddEvent(DMReactionEvent, ReactionAddEvent):
    """Event fired when a reaction is added to a private message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    is_animated: bool = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEvent(DMReactionEvent, ReactionDeleteEvent):
    """Event fired when a reaction is removed from a private message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEmojiEvent(DMReactionEvent, ReactionDeleteEmojiEvent):
    """Event fired when an emoji is removed from a private message's reactions."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteAllEvent(DMReactionEvent, ReactionDeleteAllEvent):
    """Event fired when all of a private message's reactions are removed."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.
#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionAddEvent(DMReactionEvent, ReactionAddEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionAddEvent(DMReactionEvent, ReactionAddEvent):
    """Event fired when a reaction is added to a private message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    is_animated: bool = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

Event fired when a reaction is added to a private message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]
#  is_animated: bool
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   user_id: hikari.snowflakes.Snowflake,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake],
   is_animated: bool
):
View Source
def __init__(self, *, app, shard, user_id, channel_id, message_id, emoji_name, emoji_id, is_animated):
    self.app = app
    self.shard = shard
    self.user_id = user_id
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id
    self.is_animated = is_animated

Method generated by attrs for class DMReactionAddEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was added.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was added.
#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteAllEvent(DMReactionEvent, ReactionDeleteAllEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteAllEvent(DMReactionEvent, ReactionDeleteAllEvent):
    """Event fired when all of a private message's reactions are removed."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

Event fired when all of a private message's reactions are removed.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake
):
View Source
def __init__(self, *, app, shard, channel_id, message_id):
    self.app = app
    self.shard = shard
    self.channel_id = channel_id
    self.message_id = message_id

Method generated by attrs for class DMReactionDeleteAllEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEmojiEvent(DMReactionEvent, ReactionDeleteEmojiEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEmojiEvent(DMReactionEvent, ReactionDeleteEmojiEvent):
    """Event fired when an emoji is removed from a private message's reactions."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

Event fired when an emoji is removed from a private message's reactions.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake]
):
View Source
def __init__(self, *, app, shard, channel_id, message_id, emoji_name, emoji_id):
    self.app = app
    self.shard = shard
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id

Method generated by attrs for class DMReactionDeleteEmojiEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEvent(DMReactionEvent, ReactionDeleteEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionDeleteEvent(DMReactionEvent, ReactionDeleteEvent):
    """Event fired when a reaction is removed from a private message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

Event fired when a reaction is removed from a private message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   user_id: hikari.snowflakes.Snowflake,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake]
):
View Source
def __init__(self, *, app, shard, user_id, channel_id, message_id, emoji_name, emoji_id):
    self.app = app
    self.shard = shard
    self.user_id = user_id
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id

Method generated by attrs for class DMReactionDeleteEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.DM_MESSAGE_REACTIONS)
class DMReactionEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction-bound event in private messages."""

    __slots__: typing.Sequence[str] = ()

Event base for any reaction-bound event in private messages.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the message that this event concerns.

Shard that received this event.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionAddEvent(GuildReactionEvent, ReactionAddEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionAddEvent(GuildReactionEvent, ReactionAddEvent):
    """Event fired when a reaction is added to a guild message."""

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    member: guilds.Member = attr.field()
    """Member that added the reaction."""

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    is_animated: bool = attr.field()
    # <<inherited docstring from ReactionAddEvent>>.

    @property
    def app(self) -> traits.RESTAware:
        # <<inherited docstring from Event>>.
        return self.member.app

    @property
    def guild_id(self) -> snowflakes.Snowflake:
        # <<inherited docstring from GuildReactionEvent>>.
        return self.member.guild_id

    @property
    def user_id(self) -> snowflakes.Snowflake:
        # <<inherited docstring from ReactionAddEvent>>.
        return self.member.user.id

Event fired when a reaction is added to a guild message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]

ID of the guild that this event concerns.

#  is_animated: bool

Member that added the reaction.

ID of the user that added this reaction.

Methods
#  def __init__(
   self,
   *,
   shard: hikari.api.shard.GatewayShard,
   member: hikari.guilds.Member,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake],
   is_animated: bool
):
View Source
def __init__(self, *, shard, member, channel_id, message_id, emoji_name, emoji_id, is_animated):
    self.shard = shard
    self.member = member
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id
    self.is_animated = is_animated

Method generated by attrs for class GuildReactionAddEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was added.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was added.
#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteAllEvent(GuildReactionEvent, ReactionDeleteAllEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteAllEvent(GuildReactionEvent, ReactionDeleteAllEvent):
    """Event fired when all of a guild message's reactions are removed."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

Event fired when all of a guild message's reactions are removed.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   guild_id: hikari.snowflakes.Snowflake,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake
):
View Source
def __init__(self, *, app, shard, guild_id, channel_id, message_id):
    self.app = app
    self.shard = shard
    self.guild_id = guild_id
    self.channel_id = channel_id
    self.message_id = message_id

Method generated by attrs for class GuildReactionDeleteAllEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEmojiEvent(GuildReactionEvent, ReactionDeleteEmojiEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEmojiEvent(GuildReactionEvent, ReactionDeleteEmojiEvent):
    """Event fired when an emoji is removed from a guild message's reactions."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEmojiEvent>>.

Event fired when an emoji is removed from a guild message's reactions.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   guild_id: hikari.snowflakes.Snowflake,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake]
):
View Source
def __init__(self, *, app, shard, guild_id, channel_id, message_id, emoji_name, emoji_id):
    self.app = app
    self.shard = shard
    self.guild_id = guild_id
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id

Method generated by attrs for class GuildReactionDeleteEmojiEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEvent(GuildReactionEvent, ReactionDeleteEvent):
View Source
@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionDeleteEvent(GuildReactionEvent, ReactionDeleteEvent):
    """Event fired when a reaction is removed from a guild message."""

    app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from Event>>.

    shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
    # <<inherited docstring from ShardEvent>>.

    user_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    guild_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from GuildReactionEvent>>.

    channel_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    message_id: snowflakes.Snowflake = attr.field()
    # <<inherited docstring from ReactionEvent>>.

    emoji_name: typing.Union[str, emojis.UnicodeEmoji, None] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

    emoji_id: typing.Optional[snowflakes.Snowflake] = attr.field()
    # <<inherited docstring from ReactionDeleteEvent>>.

Event fired when a reaction is removed from a guild message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties
#  emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType]
Methods
#  def __init__(
   self,
   *,
   app: hikari.traits.RESTAware,
   shard: hikari.api.shard.GatewayShard,
   user_id: hikari.snowflakes.Snowflake,
   guild_id: hikari.snowflakes.Snowflake,
   channel_id: hikari.snowflakes.Snowflake,
   message_id: hikari.snowflakes.Snowflake,
   emoji_name: Union[str, hikari.emojis.UnicodeEmoji, NoneType],
   emoji_id: Optional[hikari.snowflakes.Snowflake]
):
View Source
def __init__(self, *, app, shard, user_id, guild_id, channel_id, message_id, emoji_name, emoji_id):
    self.app = app
    self.shard = shard
    self.user_id = user_id
    self.guild_id = guild_id
    self.channel_id = channel_id
    self.message_id = message_id
    self.emoji_name = emoji_name
    self.emoji_id = emoji_id

Method generated by attrs for class GuildReactionDeleteEvent.

#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS)
class GuildReactionEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction-bound event in guild messages."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def guild_id(self) -> snowflakes.Snowflake:
        """ID of the guild that this event concerns."""

Event base for any reaction-bound event in guild messages.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the guild that this event concerns.

ID of the message that this event concerns.

Shard that received this event.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionAddEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionAddEvent(ReactionEvent, abc.ABC):
    """Event base for any reaction that is added to a message."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def user_id(self) -> snowflakes.Snowflake:
        """ID of the user that added this reaction."""

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was added if known.

        This can either be the string name of the custom emoji which was added,
        the object of the `hikari.emojis.UnicodeEmoji` which was added or
        `None` when the relevant custom emoji's data is not available
        (e.g. the emoji has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    @property
    @abc.abstractmethod
    def is_animated(self) -> bool:
        """Whether the emoji which was added is animated."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was added.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Event base for any reaction that is added to a message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the emoji which was added if it is custom, else None.

#  emoji_name: Union[hikari.emojis.UnicodeEmoji, str, NoneType]

Name of the emoji which was added if known.

This can either be the string name of the custom emoji which was added, the object of the hikari.emojis.UnicodeEmoji which was added or None when the relevant custom emoji's data is not available (e.g. the emoji has been deleted).

#  is_animated: bool

Whether the emoji which was added is animated.

ID of the message that this event concerns.

Shard that received this event.

ID of the user that added this reaction.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was added.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was added.
#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteAllEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteAllEvent(ReactionEvent, abc.ABC):
    """Event base fired when all reactions are removed from a message."""

    __slots__: typing.Sequence[str] = ()

Event base fired when all reactions are removed from a message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the message that this event concerns.

Shard that received this event.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEmojiEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEmojiEvent(ReactionEvent, abc.ABC):
    """Event base fired when all reactions are removed for one emoji."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was removed.

        Either the string name of the custom emoji which was removed, the object
        of the `hikari.emojis.UnicodeEmoji` which was removed or `None`
        when the relevant custom emoji's data is not available (e.g. the emoji
        has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Event base fired when all reactions are removed for one emoji.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the emoji which was added if it is custom, else None.

#  emoji_name: Union[hikari.emojis.UnicodeEmoji, str, NoneType]

Name of the emoji which was removed.

Either the string name of the custom emoji which was removed, the object of the hikari.emojis.UnicodeEmoji which was removed or None when the relevant custom emoji's data is not available (e.g. the emoji has been deleted).

ID of the message that this event concerns.

Shard that received this event.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEvent(ReactionEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionDeleteEvent(ReactionEvent, abc.ABC):
    """Event base for any single reaction that is removed from a message."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def user_id(self) -> snowflakes.Snowflake:
        """User ID for the user that added this reaction initially."""

    @property
    @abc.abstractmethod
    def emoji_name(self) -> typing.Union[emojis.UnicodeEmoji, str, None]:
        """Name of the emoji which was removed.

        Either the string name of the custom emoji which was removed, the object
        of the `hikari.emojis.UnicodeEmoji` which was removed or `None`
        when the relevant custom emoji's data is not available (e.g. the emoji
        has been deleted).
        """

    @property
    @abc.abstractmethod
    def emoji_id(self) -> typing.Optional[snowflakes.Snowflake]:
        """ID of the emoji which was added if it is custom, else `None`."""

    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Event base for any single reaction that is removed from a message.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the emoji which was added if it is custom, else None.

#  emoji_name: Union[hikari.emojis.UnicodeEmoji, str, NoneType]

Name of the emoji which was removed.

Either the string name of the custom emoji which was removed, the object of the hikari.emojis.UnicodeEmoji which was removed or None when the relevant custom emoji's data is not available (e.g. the emoji has been deleted).

ID of the message that this event concerns.

Shard that received this event.

User ID for the user that added this reaction initially.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.

#  def is_for_emoji(self, emoji: Union[hikari.emojis.Emoji, str], /) -> bool:
View Source
    def is_for_emoji(self, emoji: typing.Union[emojis.Emoji, str], /) -> bool:
        """Get whether the reaction event is for a specific emoji.

        Parameters
        ----------
        emoji : typing.Union[hikari.emojis.Emoji, str]
            The emoji to check.

            Passing `str` here indicates a unicode emoji.

        Returns
        -------
        bool
            Whether the emoji is the one which was removed.
        """
        return emoji.id == self.emoji_id if isinstance(emoji, emojis.CustomEmoji) else emoji == self.emoji_name

Get whether the reaction event is for a specific emoji.

Parameters
  • emoji (typing.Union[hikari.emojis.Emoji, str]): The emoji to check.

    Passing str here indicates a unicode emoji.

Returns
  • bool: Whether the emoji is the one which was removed.
#  
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionEvent(hikari.events.shard_events.ShardEvent, abc.ABC):
View Source
@base_events.requires_intents(intents.Intents.GUILD_MESSAGE_REACTIONS, intents.Intents.DM_MESSAGE_REACTIONS)
class ReactionEvent(shard_events.ShardEvent, abc.ABC):
    """Event base for any message reaction event."""

    __slots__: typing.Sequence[str] = ()

    @property
    @abc.abstractmethod
    def channel_id(self) -> snowflakes.Snowflake:
        """ID of the channel that this event concerns."""

    @property
    @abc.abstractmethod
    def message_id(self) -> snowflakes.Snowflake:
        """ID of the message that this event concerns."""

Event base for any message reaction event.

This requires one of the following combinations of intents in order to be dispatched:

Variables and properties

App instance for this application.

ID of the channel that this event concerns.

ID of the message that this event concerns.

Shard that received this event.

Methods
#  
@classmethod
def bitmask(cls) -> int:
View Source
    @classmethod
    def bitmask(cls) -> int:
        """Bitmask for this event."""
        return cls.__bitmask

Bitmask for this event.

#  
@classmethod
def dispatches(cls) -> Sequence[Type[hikari.events.base_events.Event]]:
View Source
    @classmethod
    def dispatches(cls) -> typing.Sequence[typing.Type[Event]]:
        """Sequence of the event classes this event is dispatched as."""
        return cls.__dispatches

Sequence of the event classes this event is dispatched as.