StarRailCopilot/module/base/timer.py

73 lines
1.6 KiB
Python

import time
from datetime import datetime, timedelta
from functools import wraps
from module.logger import logger
def timer(function):
@wraps(function)
def function_timer(*args, **kwargs):
t0 = time.time()
result = function(*args, **kwargs)
t1 = time.time()
print('%s: %s s' % (function.__name__, str(round(t1 - t0, 10))))
return result
return function_timer
def future_time(string):
"""
Args:
string (str): Such as 14:59.
Returns:
datetime: Time with given hour, minute, second in the future.
"""
hour, minute = [int(x) for x in string.split(':')]
future = datetime.now().replace(hour=hour, minute=minute, second=0, microsecond=0)
future = future + timedelta(days=1) if future < datetime.now() else future
return future
class Timer:
def __init__(self, limit):
self.limit = limit
self._current = 0
def start(self):
if not self.started():
self._current = time.time()
def started(self):
return bool(self._current)
def current(self):
"""
Returns:
float
"""
return time.time() - self._current
def reached(self):
"""
Returns:
bool
"""
return time.time() - self._current > self.limit
def reset(self):
self._current = time.time()
def wait(self):
"""
Wait until timer reached.
"""
diff = self._current + self.limit - time.time()
if diff > 0:
time.sleep(diff)
def show(self):
logger.info('%s s' % str(self.current()))