initial commit
This commit is contained in:
34
activity.py
Normal file
34
activity.py
Normal file
@@ -0,0 +1,34 @@
|
||||
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
|
||||
Reference in New Issue
Block a user