import time from userbot.modules.capture.repository import CHANNEL_ID_THRESHOLD PENDING_DELETE_SECONDS = 120.0 PENDING_DELETE_LIMIT = 10_000 DeleteKey = tuple[int | None, int] def _key(chat_id: int | None, message_id: int) -> DeleteKey: if chat_id is None or chat_id > CHANNEL_ID_THRESHOLD: return None, message_id return chat_id, message_id class PendingDeletes: def __init__(self) -> None: self._expires: dict[DeleteKey, float] = {} def remember(self, chat_id: int | None, message_ids: list[int]) -> None: now = time.monotonic() while self._expires: oldest = next(iter(self._expires)) fresh = self._expires[oldest] > now if fresh and len(self._expires) < PENDING_DELETE_LIMIT: break del self._expires[oldest] for message_id in message_ids: key = _key(chat_id, message_id) self._expires.pop(key, None) self._expires[key] = now + PENDING_DELETE_SECONDS def take(self, chat_id: int, message_id: int) -> bool: expires = self._expires.pop(_key(chat_id, message_id), None) return expires is not None and expires > time.monotonic()