diff --git a/flanabot/bots/flana_bot.py b/flanabot/bots/flana_bot.py index 5388f5a..c4d6a46 100644 --- a/flanabot/bots/flana_bot.py +++ b/flanabot/bots/flana_bot.py @@ -68,9 +68,10 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe self.register(self._on_new_message_default, default=True) - self.register(self._on_recover_message, multibot_constants.KEYWORDS['reset']) self.register(self._on_recover_message, multibot_constants.KEYWORDS['message']) - self.register(self._on_recover_message, (multibot_constants.KEYWORDS['reset'], multibot_constants.KEYWORDS['message'])) + + self.register(self._on_reset, multibot_constants.KEYWORDS['reset']) + self.register(self._on_reset, (multibot_constants.KEYWORDS['reset'], multibot_constants.KEYWORDS['message'])) self.register(self._on_roles, multibot_constants.KEYWORDS['permission']) self.register(self._on_roles, multibot_constants.KEYWORDS['role']) @@ -159,6 +160,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe async def _on_bye(self, message: Message): if message.chat.is_private or self.is_bot_mentioned(message): + message.is_inline = False await self.send_bye(message) async def _on_config(self, message: Message): @@ -331,6 +333,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe async def _on_hello(self, message: Message): if message.chat.is_private or self.is_bot_mentioned(message): + message.is_inline = False await self.send_hello(message) async def _on_help(self, message: Message): @@ -455,6 +458,12 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe for deleted_message in deleted_messages: await self.send(deleted_message.text, message) + async def _on_reset(self, message: Message): + if self._get_poll_message(message): + await self._on_delete_votes(message, all_=True) + else: + await self._on_recover_message(message) + @group @bot_mentioned async def _on_roles(self, message: Message): @@ -565,12 +574,16 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe BotAction.delete_many_raw({'platform': self.platform.value, 'date': {'$lte': before_date}}) async def send_bye(self, chat: int | str | User | Chat | Message) -> multibot_constants.ORIGINAL_MESSAGE: - chat = await self.get_chat(chat) - return await self.send(random.choice((*constants.BYE_PHRASES, flanautils.CommonWords.random_time_greeting())), chat) + return await self.send( + random.choice((*constants.BYE_PHRASES, flanautils.CommonWords.random_time_greeting())), + chat + ) async def send_hello(self, chat: int | str | User | Chat | Message) -> multibot_constants.ORIGINAL_MESSAGE: - chat = await self.get_chat(chat) - return await self.send(random.choice((*constants.HELLO_PHRASES, flanautils.CommonWords.random_time_greeting())), chat) + return await self.send( + random.choice((*constants.HELLO_PHRASES, flanautils.CommonWords.random_time_greeting())), + chat + ) async def send_insult(self, chat: int | str | User | Chat | Message) -> multibot_constants.ORIGINAL_MESSAGE | None: chat = await self.get_chat(chat) diff --git a/flanabot/bots/poll_bot.py b/flanabot/bots/poll_bot.py index 316c0ca..955c678 100644 --- a/flanabot/bots/poll_bot.py +++ b/flanabot/bots/poll_bot.py @@ -8,7 +8,7 @@ from typing import Iterable import flanautils from flanautils import OrderedSet -from multibot import MultiBot, constants as multibot_constants +from multibot import MultiBot, RegisteredCallback, constants as multibot_constants from flanabot import constants from flanabot.models import ButtonsGroup, Message @@ -30,8 +30,6 @@ class PollBot(MultiBot, ABC): self.register(lambda message: self._on_delete_votes(message, all_=True), (multibot_constants.KEYWORDS['deactivate'], multibot_constants.KEYWORDS['all'], constants.KEYWORDS['vote'])) self.register(lambda message: self._on_delete_votes(message, all_=True), (multibot_constants.KEYWORDS['delete'], multibot_constants.KEYWORDS['all'], constants.KEYWORDS['vote'])) - self.register(lambda message: self._on_delete_votes(message, all_=True), multibot_constants.KEYWORDS['reset']) - self.register(lambda message: self._on_delete_votes(message, all_=True), (multibot_constants.KEYWORDS['reset'], constants.KEYWORDS['poll'])) self.register(self._on_delete_votes, (multibot_constants.KEYWORDS['deactivate'], constants.KEYWORDS['vote'])) self.register(self._on_delete_votes, (multibot_constants.KEYWORDS['delete'], constants.KEYWORDS['vote'])) @@ -137,12 +135,12 @@ class PollBot(MultiBot, ABC): poll_data = poll_message.data['poll'] if all_: - for option_name, option_votes in poll_data['votes'].items(): - poll_data['votes'][option_name].clear() + for option_votes in poll_data['votes'].values(): + option_votes.clear() else: - for user in await self._find_users_to_punish(message): - for option_name, option_votes in poll_data['votes'].items(): - poll_data['votes'][option_name] = [option_vote for option_vote in option_votes if option_vote[0] != user.id] + user_ids = [user.id for user in await self._find_users_to_punish(message)] + for option_votes in poll_data['votes'].values(): + option_votes[:] = [option_vote for option_vote in option_votes if option_vote[0] not in user_ids] await self.delete_message(message) await self._update_poll_buttons(poll_message) @@ -157,6 +155,14 @@ class PollBot(MultiBot, ABC): await self.send(random.choice(('¿De cuántas caras?', '¿Y el número?', '?', '🤔')), message) async def _on_poll(self, message: Message, is_multiple_answer=False): + if ( + self._get_poll_message(message) + and + self._parse_callbacks(message.text, [RegisteredCallback(..., multibot_constants.KEYWORDS['reset'])]) + ): + await self._on_delete_votes(message, all_=True) + return + if message.chat.is_group and not self.is_bot_mentioned(message): return