Update Chat.ubereats

This commit is contained in:
AlberLC
2023-03-08 02:14:47 +01:00
parent 61daaa387a
commit 34320079eb
3 changed files with 28 additions and 34 deletions

View File

@@ -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('<b>Estos son los ajustes del chat:</b>\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:

View File

@@ -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 <b>{period.to_words()}</b>.', 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 = '<i>Código ya enviado anteriormente:</i>'
else:
warning_text = ''
await self.send(f'{warning_text} <code>{code}</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',))

View File

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