From 7f7077438d23ec45d12afaadef35b8f711a58229 Mon Sep 17 00:00:00 2001 From: TyrantKingBen <42081911+TyrantKingBen@users.noreply.github.com> Date: Sun, 24 Mar 2024 11:07:11 -0500 Subject: [PATCH] feat: add new reaction event --- interactions/api/events/__init__.py | 2 ++ interactions/api/events/discord.py | 11 ++++++++++ .../api/events/processors/reaction_events.py | 21 +++++++++++++++++++ interactions/client/client.py | 5 +++++ 4 files changed, 39 insertions(+) diff --git a/interactions/api/events/__init__.py b/interactions/api/events/__init__.py index cccf69857..70db34457 100644 --- a/interactions/api/events/__init__.py +++ b/interactions/api/events/__init__.py @@ -44,6 +44,7 @@ MessageReactionAdd, MessageReactionRemove, MessageReactionRemoveAll, + MessageReactionRemoveEmoji, MessageUpdate, NewThreadCreate, PresenceUpdate, @@ -161,6 +162,7 @@ "MessageReactionAdd", "MessageReactionRemove", "MessageReactionRemoveAll", + "MessageReactionRemoveEmoji", "MessageUpdate", "ModalCompletion", "ModalError", diff --git a/interactions/api/events/discord.py b/interactions/api/events/discord.py index 182c5a467..bbd6f1f2a 100644 --- a/interactions/api/events/discord.py +++ b/interactions/api/events/discord.py @@ -75,6 +75,7 @@ async def an_event_handler(event: ChannelCreate): "MessageReactionAdd", "MessageReactionRemove", "MessageReactionRemoveAll", + "MessageReactionRemoveEmoji", "MessageUpdate", "NewThreadCreate", "PresenceUpdate", @@ -577,6 +578,16 @@ class MessageReactionRemoveAll(GuildEvent): """The message that was reacted to""" +@attrs.define(eq=False, order=False, hash=False, kw_only=False) +class MessageReactionRemoveEmoji(MessageReactionRemoveAll): + """Dispatched when all reactions of a specifc emoji are removed from a message.""" + + emoji: "PartialEmoji" = attrs.field( + repr=False, + ) + """The emoji that was removed""" + + @attrs.define(eq=False, order=False, hash=False, kw_only=False) class PresenceUpdate(BaseEvent): """A user's presence has changed.""" diff --git a/interactions/api/events/processors/reaction_events.py b/interactions/api/events/processors/reaction_events.py index 112a8638a..2f1de264f 100644 --- a/interactions/api/events/processors/reaction_events.py +++ b/interactions/api/events/processors/reaction_events.py @@ -81,3 +81,24 @@ async def _on_raw_message_reaction_remove_all(self, event: "RawGatewayEvent") -> await self.cache.fetch_message(event.data["channel_id"], event.data["message_id"]), ) ) + + @Processor.define() + async def _on_raw_message_reaction_remove_emoji(self, event: "RawGatewayEvent") -> None: + emoji = PartialEmoji.from_dict(event.data.get("emoji")) + message = self.cache.get_message(event.data.get("channel_id"), event.data.get("message_id")) + + if message: + for i, reaction in enumerate(message.reactions): + if reaction.emoji == emoji: + message.reactions.pop(i) + break + else: + message = await self.cache.fetch_message(event.data.get("channel_id"), event.data.get("message_id")) + + self.dispatch( + events.MessageReactionRemoveEmoji( + event.data.get("guild_id"), + message, + emoji, + ) + ) diff --git a/interactions/client/client.py b/interactions/client/client.py index ae342d460..0ac66a4db 100644 --- a/interactions/client/client.py +++ b/interactions/client/client.py @@ -208,6 +208,11 @@ Intents.DIRECT_MESSAGE_REACTIONS, Intents.REACTIONS, ], + events.MessageReactionRemoveEmoji: [ + Intents.GUILD_MESSAGE_REACTIONS, + Intents.DIRECT_MESSAGE_REACTIONS, + Intents.REACTIONS, + ], }