diff --git a/flanabot/bots/flana_bot.py b/flanabot/bots/flana_bot.py
index 9580faa..7090d5a 100644
--- a/flanabot/bots/flana_bot.py
+++ b/flanabot/bots/flana_bot.py
@@ -76,7 +76,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
async def _get_message(
self,
event: multibot_constants.MESSAGE_EVENT,
- pull_overwrite_fields: Iterable[str] = ('_id', 'config', 'ubereats_seconds')
+ pull_overwrite_fields: Iterable[str] = ('_id', 'config', 'ubereats')
) -> Message:
return await super()._get_message(event, pull_overwrite_fields)
@@ -146,7 +146,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
if k not in config_names:
continue
if k == 'ubereats':
- k = f"ubereats (cada {flanautils.TimeUnits(seconds=message.chat.ubereats_seconds).to_words()})"
+ 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)
@@ -165,7 +165,7 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
await self.start_ubereats(message.chat)
else:
await self.stop_ubereats(message.chat)
- button_text = f"ubereats (cada {flanautils.TimeUnits(seconds=message.chat.ubereats_seconds).to_words()})"
+ 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}"
@@ -269,15 +269,15 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
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": []}
+ 'config.ubereats': {"$exists": True, "$eq": True},
+ 'ubereats.cookies': {"$exists": True, "$ne": []}
}):
chat = await self.get_chat(chat.id)
- chat.pull_from_database(overwrite_fields=('_id', 'config', 'ubereats_cookies', 'ubereats_seconds'))
+ chat.pull_from_database(overwrite_fields=('_id', 'config', 'ubereats'))
if (
- chat.ubereats_next_execution
+ chat.ubereats['next_execution']
and
- (delta_time := chat.ubereats_next_execution - datetime.datetime.now(datetime.timezone.utc)) > datetime.timedelta()
+ (delta_time := chat.ubereats['next_execution'] - datetime.datetime.now(datetime.timezone.utc)) > datetime.timedelta()
):
await flanautils.do_later(delta_time, self.start_ubereats, chat)
else:
diff --git a/flanabot/bots/ubereats_bot.py b/flanabot/bots/ubereats_bot.py
index a4c8cc1..2b24e99 100644
--- a/flanabot/bots/ubereats_bot.py
+++ b/flanabot/bots/ubereats_bot.py
@@ -52,8 +52,7 @@ class UberEatsBot(MultiBot, ABC):
self.task_contexts[chat.id]['playwright'] = await playwright.async_api.async_playwright().start()
- chat.pull_from_database(overwrite_fields=('ubereats_cookies',))
- for i, cookies in enumerate(chat.ubereats_cookies):
+ for i, cookies in enumerate(chat.ubereats['cookies']):
for _ in range(3):
try:
self.task_contexts[chat.id]['browser'] = await self.task_contexts[chat.id]['playwright'].chromium.launch()
@@ -90,7 +89,7 @@ class UberEatsBot(MultiBot, ABC):
code = pyperclip.paste()
codes.append(code)
- chat.ubereats_cookies[i] = await context.cookies('https://www.myunidays.com')
+ chat.ubereats['cookies'][i] = await context.cookies('https://www.myunidays.com')
except playwright.async_api.Error:
pass
@@ -103,8 +102,6 @@ class UberEatsBot(MultiBot, ABC):
if playwright_ := self.task_contexts[chat.id]['playwright']:
await playwright_.stop()
- chat.save()
-
return codes
# ---------------------------------------------- #
@@ -112,7 +109,7 @@ class UberEatsBot(MultiBot, ABC):
# ---------------------------------------------- #
@group(False)
async def _on_ubereats(self, message: Message):
- if not message.chat.ubereats_cookies:
+ if not message.chat.ubereats['cookies']:
return
time = flanautils.text_to_time(message.text)
@@ -127,7 +124,7 @@ class UberEatsBot(MultiBot, ABC):
return
seconds = int(time.total_seconds())
- message.chat.ubereats_seconds = seconds
+ message.chat.ubereats['seconds'] = seconds
message.save()
period = flanautils.TimeUnits(seconds=seconds)
await self.send(f'A partir de ahora te enviaré un código de UberEats cada {period.to_words()}.', message)
@@ -137,28 +134,30 @@ class UberEatsBot(MultiBot, ABC):
# -------------------- PUBLIC METHODS -------------------- #
# -------------------------------------------------------- #
async def send_ubereats_code(self, chat: Chat, update_next_execution=True):
+ chat.pull_from_database(overwrite_fields=('ubereats',))
+
new_codes = []
for code in await self._scrape_codes(chat):
new_codes.append(code)
- if code in chat.ubereats_last_codes:
+ if code in chat.ubereats['last_codes']:
warning_text = 'Código ya enviado anteriormente:'
else:
warning_text = ''
await self.send(f'{warning_text} {code}', chat, silent=True)
+ chat.ubereats['last_codes'] = new_codes
- chat.ubereats_last_codes = new_codes
if update_next_execution:
- chat.ubereats_next_execution = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(seconds=chat.ubereats_seconds)
+ chat.ubereats['next_execution'] = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(seconds=chat.ubereats['seconds'])
chat.save()
async def start_ubereats(self, chat: Chat, send_code_now=True):
await self._cancel_scraping_task(chat)
chat.config['ubereats'] = True
- chat.save(pull_overwrite_fields=('ubereats_cookies',))
- self.task_contexts[chat.id]['task'] = await flanautils.do_every(chat.ubereats_seconds, self.send_ubereats_code, chat, do_first_now=send_code_now)
+ chat.save(pull_overwrite_fields=('ubereats',))
+ self.task_contexts[chat.id]['task'] = await flanautils.do_every(chat.ubereats['seconds'], self.send_ubereats_code, chat, do_first_now=send_code_now)
async def stop_ubereats(self, chat: Chat):
await self._cancel_scraping_task(chat)
chat.config['ubereats'] = False
- chat.save(pull_overwrite_fields=('ubereats_cookies',))
+ chat.save(pull_overwrite_fields=('ubereats',))
diff --git a/flanabot/models/chat.py b/flanabot/models/chat.py
index 600829c..b4c7f58 100644
--- a/flanabot/models/chat.py
+++ b/flanabot/models/chat.py
@@ -1,6 +1,5 @@
__all__ = ['Chat']
-import datetime
from dataclasses import dataclass, field
from multibot import Chat as MultiBotChat
@@ -8,7 +7,7 @@ from multibot import Chat as MultiBotChat
@dataclass(eq=False)
class Chat(MultiBotChat):
- DEFAULT_CONFIG = {
+ config: dict = field(default_factory=lambda: {
'auto_insult': True,
'auto_scraping': True,
'auto_weather_chart': False,
@@ -16,14 +15,10 @@ class Chat(MultiBotChat):
'punish': False,
'scraping_delete_original': True,
'ubereats': False
- }
-
- config: dict = field(default_factory=dict)
- ubereats_cookies: list[list[dict]] = field(default_factory=list)
- ubereats_last_codes: list[str] = field(default_factory=list)
- ubereats_seconds: int = 86700
- ubereats_next_execution: datetime.datetime = None
-
- def __post_init__(self):
- super().__post_init__()
- self.config = self.DEFAULT_CONFIG | self.config
+ })
+ ubereats: dict = field(default_factory=lambda: {
+ 'cookies': [],
+ 'last_codes': [],
+ 'seconds': 86700,
+ 'next_execution': None
+ })