diff --git a/flanabot/bots/flana_bot.py b/flanabot/bots/flana_bot.py index 0e59f7a..fc5038d 100644 --- a/flanabot/bots/flana_bot.py +++ b/flanabot/bots/flana_bot.py @@ -274,7 +274,15 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe }): chat = await self.get_chat(chat.id) chat.pull_from_database(overwrite_fields=('_id', 'config', 'ubereats_cookies', 'ubereats_seconds')) - await self.start_ubereats(chat, send_code_now=False) + if ( + not chat.ubereats_next_execution + or + (delta_time := chat.ubereats_next_execution - datetime.datetime.now(datetime.timezone.utc)) <= datetime.timedelta() + ): + await self.start_ubereats(chat) + else: + # noinspection PyUnboundLocalVariable + await flanautils.do_later(delta_time, self.start_ubereats, chat) @inline(False) async def _on_recover_message(self, message: Message): diff --git a/flanabot/bots/ubereats_bot.py b/flanabot/bots/ubereats_bot.py index 4ea5e61..07ef407 100644 --- a/flanabot/bots/ubereats_bot.py +++ b/flanabot/bots/ubereats_bot.py @@ -148,6 +148,7 @@ class UberEatsBot(MultiBot, ABC): await self.send(f'{warning_text} {code}', chat, silent=True) chat.ubereats_last_codes = new_codes + 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): diff --git a/flanabot/models/chat.py b/flanabot/models/chat.py index cf6cf60..600829c 100644 --- a/flanabot/models/chat.py +++ b/flanabot/models/chat.py @@ -1,5 +1,6 @@ __all__ = ['Chat'] +import datetime from dataclasses import dataclass, field from multibot import Chat as MultiBotChat @@ -21,6 +22,7 @@ class Chat(MultiBotChat): 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__()