diff --git a/botbotbot/text.py b/botbotbot/text.py index 164d10e..5a920b9 100644 --- a/botbotbot/text.py +++ b/botbotbot/text.py @@ -34,6 +34,7 @@ class TextBot: def init_events(self) -> None: self.bot.add_listener(self.on_message, "on_message") self.bot.add_listener(self.add_more_reaction, "on_reaction_add") + self.bot.add_listener(self.add_more_reaction, "on_reaction_remove") self.bot.add_listener(self.react_message_edit, "on_message_edit") self.bot.add_listener(self.rando_shuffle, "on_message") self.bot.add_application_command( @@ -140,6 +141,9 @@ class TextBot: await message.reply(answer) async def react(self, message: discord.Message) -> None: + logger.info( + f"React to message from <{message.author}> in channel <{message.channel}>." + ) emojis: tuple[str | discord.Emoji, ...] = self.uni_emojis if message.guild is not None and random.random() < 50 / 100: emojis = message.guild.emojis @@ -165,9 +169,30 @@ class TextBot: async def add_more_reaction( self, reaction: discord.Reaction, user: discord.Member | discord.User ) -> None: - if random.random() < 20 / 100: - logger.info(f"Copy reaction from {user}") - await reaction.message.add_reaction(reaction.emoji) + if user == self.bot.user: + return + + message = reaction.message + guild = message.guild + for reaction in message.reactions: + if random.random() < 50 / 100: + if random.random() < 50 / 100: + if ( + self.bot.user is not None + and self.bot.user in await reaction.users().flatten() + and guild is not None + and isinstance( + member := guild.get_member(self.bot.user.id), + discord.Member, + ) + ): + logger.info(f"Remove reaction <{reaction}>.") + await message.remove_reaction(reaction, member) + else: + logger.info(f"Copy reaction <{reaction}> from <{user}>.") + await reaction.message.add_reaction(reaction.emoji) + if random.random() < 10 / 100: + await self.react(message) async def react_message_edit( self, before: discord.Message, after: discord.Message