Update _add_handlers (reset polls)

This commit is contained in:
AlberLC
2024-01-27 02:11:59 +01:00
parent 0769b16dd6
commit fb7b155368
2 changed files with 33 additions and 14 deletions

View File

@@ -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)

View File

@@ -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