import logging import time logger = logging.getLogger(__name__) _WINDOW_SECONDS = 48 * 3600 class PinduoduoWindowTracker: def __init__(self): self._last_msg_time: dict[str, float] = {} def record(self, buyer_id: str) -> None: self._last_msg_time[buyer_id] = time.time() def can_reply(self, buyer_id: str) -> bool: last = self._last_msg_time.get(buyer_id, 0) now = time.time() if now - last > _WINDOW_SECONDS: logger.info( "拼多多 48h 互动窗口已过期,用户 %s,最后消息时间戳=%s", buyer_id, last, ) return False return True def remaining_seconds(self, buyer_id: str) -> float: last = self._last_msg_time.get(buyer_id, 0) if last == 0: return 0 elapsed = time.time() - last remaining = _WINDOW_SECONDS - elapsed return max(0.0, remaining) def cleanup(self) -> None: now = time.time() expired = [ k for k, ts in self._last_msg_time.items() if now - ts > _WINDOW_SECONDS ] for k in expired: del self._last_msg_time[k]