43 lines
919 B
Python
43 lines
919 B
Python
import time
|
|
from typing import Dict
|
|
|
|
# category -> unix timestamp until muted
|
|
_MUTES: Dict[str, float] = {}
|
|
|
|
|
|
def _cleanup() -> None:
|
|
now = time.time()
|
|
expired = [k for k, until in _MUTES.items() if until <= now]
|
|
for k in expired:
|
|
_MUTES.pop(k, None)
|
|
|
|
|
|
def set_mute(category: str, seconds: int) -> float:
|
|
_cleanup()
|
|
until = time.time() + max(0, seconds)
|
|
_MUTES[category] = until
|
|
return until
|
|
|
|
|
|
def clear_mute(category: str) -> None:
|
|
_MUTES.pop(category, None)
|
|
|
|
|
|
def is_muted(category: str | None) -> bool:
|
|
if not category:
|
|
return False
|
|
_cleanup()
|
|
until = _MUTES.get(category)
|
|
if until is None:
|
|
return False
|
|
if until <= time.time():
|
|
_MUTES.pop(category, None)
|
|
return False
|
|
return True
|
|
|
|
|
|
def list_mutes() -> dict[str, int]:
|
|
_cleanup()
|
|
now = time.time()
|
|
return {k: int(until - now) for k, until in _MUTES.items()}
|