35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime, timezone
|
|
from typing import Optional
|
|
|
|
|
|
def _now() -> datetime:
|
|
return datetime.now(timezone.utc)
|
|
|
|
|
|
@dataclass
|
|
class ChatActivityTracker:
|
|
last_bot_message_id: Optional[int] = None
|
|
last_bot_message_time: Optional[datetime] = None
|
|
last_user_message_time: Optional[datetime] = None
|
|
_now_fn: callable = field(default=_now, repr=False)
|
|
|
|
def record_user_activity(self) -> None:
|
|
self.last_user_message_time = self._now_fn()
|
|
|
|
def record_bot_message(self, message_id: int) -> None:
|
|
self.last_bot_message_id = message_id
|
|
self.last_bot_message_time = self._now_fn()
|
|
|
|
def can_edit_last_bot_message(self) -> bool:
|
|
if self.last_bot_message_id is None:
|
|
return False
|
|
if self.last_user_message_time is None:
|
|
return True
|
|
if self.last_bot_message_time is None:
|
|
return False
|
|
# Edit only if после последнего бот-сообщения не было новых сообщений пользователей.
|
|
return self.last_bot_message_time >= self.last_user_message_time
|