diff --git a/flanabot/bots/__init__.py b/flanabot/bots/__init__.py index 0a3ebc7..fee30d5 100644 --- a/flanabot/bots/__init__.py +++ b/flanabot/bots/__init__.py @@ -4,4 +4,5 @@ from flanabot.bots.flana_tele_bot import * from flanabot.bots.penalty_bot import * from flanabot.bots.poll_bot import * from flanabot.bots.scraper_bot import * +from flanabot.bots.ubereats_bot import * from flanabot.bots.weather_bot import * diff --git a/flanabot/bots/flana_bot.py b/flanabot/bots/flana_bot.py index ef0eec9..326840b 100644 --- a/flanabot/bots/flana_bot.py +++ b/flanabot/bots/flana_bot.py @@ -18,6 +18,7 @@ from flanabot.bots.connect_4_bot import Connect4Bot from flanabot.bots.penalty_bot import PenaltyBot from flanabot.bots.poll_bot import PollBot from flanabot.bots.scraper_bot import ScraperBot +from flanabot.bots.ubereats_bot import UberEatsBot from flanabot.bots.weather_bot import WeatherBot from flanabot.models import Action, BotAction, ButtonsGroup, Chat, Message @@ -25,7 +26,7 @@ from flanabot.models import Action, BotAction, ButtonsGroup, Chat, Message # ----------------------------------------------------------------------------------------------------- # # --------------------------------------------- FLANA_BOT --------------------------------------------- # # ----------------------------------------------------------------------------------------------------- # -class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, WeatherBot, MultiBot, ABC): +class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, WeatherBot, MultiBot, ABC): Chat = Chat Message = Message @@ -75,7 +76,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, WeatherBot, MultiBo async def _get_message( self, event: multibot_constants.MESSAGE_EVENT, - pull_overwrite_fields: Iterable[str] = ('_id', 'config') + pull_overwrite_fields: Iterable[str] = ('_id', 'config', 'ubereats_seconds') ) -> Message: return await super()._get_message(event, pull_overwrite_fields) @@ -125,13 +126,29 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, WeatherBot, MultiBo if message.chat.is_private or self.is_bot_mentioned(message): await self.send_bye(message) - @group - @bot_mentioned async def _on_config(self, message: Message): - if not message.chat.config: + if message.chat.is_private: + config_names = ('auto_insult', 'auto_scraping', 'scraping_delete_original', 'ubereats') + elif self.is_bot_mentioned(message): + config_names = ( + 'auto_insult', + 'auto_scraping', + 'auto_weather_chart', + 'check_flood', + 'punish', + 'scraping_delete_original' + ) + else: return - buttons_texts = [(f"{'✔' if v else '❌'} {k}", v) for k, v in message.chat.config.items()] + buttons_texts = [] + for k, v in message.chat.config.items(): + if k not in config_names: + continue + if k == 'ubereats': + k = f"ubereats (cada {flanautils.TimeUnits(seconds=message.chat.ubereats_seconds).to_words()})" + buttons_texts.append((f"{'✔' if v else '❌'} {k}", v)) + await self.send('Estos son los ajustes del chat:\n\n', flanautils.chunks(buttons_texts, 3), message, buttons_key=ButtonsGroup.CONFIG) await self.delete_message(message) @@ -143,7 +160,15 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, WeatherBot, MultiBo config_name = message.buttons_info.pressed_text.split()[1] message.chat.config[config_name] = not message.chat.config[config_name] - message.buttons_info.pressed_button.text = f"{'✔' if message.chat.config[config_name] else '❌'} {config_name}" + if config_name == 'ubereats': + if message.chat.config[config_name]: + await self.start_ubereats(message.chat) + else: + self.stop_ubereats(message.chat) + button_text = f"ubereats (cada {flanautils.TimeUnits(seconds=message.chat.ubereats_seconds).to_words()})" + else: + button_text = config_name + message.buttons_info.pressed_button.text = f"{'✔' if message.chat.config[config_name] else '❌'} {button_text}" await self.edit(message.buttons_info.buttons, message) @@ -242,6 +267,14 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, WeatherBot, MultiBo async def _on_ready(self): await super()._on_ready() await flanautils.do_every(multibot_constants.CHECK_OLD_DATABASE_MESSAGES_EVERY_SECONDS, self.check_old_database_actions) + for chat in Chat.find({ + 'platform': self.platform.value, + "config.ubereats": {"$exists": True, "$eq": True}, + "ubereats_cookies": {"$exists": True, "$ne": []} + }): + chat = await self.get_chat(chat.id) + chat.pull_from_database(overwrite_fields=('ubereats_seconds',)) + await self.start_ubereats(chat, send_code_now=False) @inline(False) async def _on_recover_message(self, message: Message): diff --git a/flanabot/models/chat.py b/flanabot/models/chat.py index 94a1f3f..81608f4 100644 --- a/flanabot/models/chat.py +++ b/flanabot/models/chat.py @@ -13,10 +13,14 @@ class Chat(MultiBotChat): 'auto_weather_chart': False, 'check_flood': False, 'punish': False, - 'scraping_delete_original': True + 'scraping_delete_original': True, + 'ubereats': False } - config: dict[str, bool] = field(default_factory=dict) + config: dict = field(default_factory=dict) + ubereats_cookies: list[dict] = field(default_factory=list) + ubereats_last_code: str = None + ubereats_seconds: int = 86700 def __post_init__(self): super().__post_init__()