mirror of
https://github.com/Xevion/unbelievaselfbot.git
synced 2025-12-08 16:08:58 -06:00
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
import time
|
|
from typing import Union, Optional
|
|
|
|
from bot import exceptions
|
|
|
|
|
|
class Cooldown(object):
|
|
"""
|
|
A cooldown object helps users manage a minimum time passed between activations of something.
|
|
"""
|
|
|
|
def __init__(self, cooldown: float, now: bool = False, last_hit: Union[float, int] = None):
|
|
self.cooldown: float = max(0.0, cooldown)
|
|
self.hot_until: Optional[float] = float(last_hit) if last_hit is not None else None
|
|
|
|
if now:
|
|
self.hot_until = time.time()
|
|
|
|
def hit(self, safe: bool = False):
|
|
"""Activate the cooldown. Raises an exception if Safe is set to True and the cooldown has not passed."""
|
|
if safe and not self.ready:
|
|
raise exceptions.CooldownRequired('The cooldown duration has not passed. {}')
|
|
self.hot_until = time.time() + self.cooldown
|
|
|
|
@property
|
|
def time_left(self) -> float:
|
|
"""Returns the non-negative time left until the cooldown is ready."""
|
|
return max(0.0, self.hot_until - time.time())
|
|
|
|
@property
|
|
def ready(self, now: Union[float, int] = None) -> bool:
|
|
"""Returns True if the cooldown has passed."""
|
|
if self.hot_until:
|
|
return now or time.time() >= self.hot_until
|
|
return True
|
|
|
|
|
|
class TimingHandler(object):
|
|
"""A class for easily managing and working with cooldown timers."""
|
|
pass
|