Update _add_handlers (reset polls)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user