mirror of
https://github.com/Xevion/unbelievaselfbot.git
synced 2025-12-10 18:09:05 -06:00
custom cooldown class for managing timings separately
This commit is contained in:
40
bot/timings.py
Normal file
40
bot/timings.py
Normal file
@@ -0,0 +1,40 @@
|
||||
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
|
||||
Reference in New Issue
Block a user