44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import re
|
|
from datetime import timedelta
|
|
|
|
from discord.ext.commands import BadArgument
|
|
from sqlalchemy.orm import Session
|
|
|
|
import db
|
|
|
|
|
|
def time_pars(s: str) -> timedelta:
|
|
match = re.fullmatch(r"(?:([0-9]+)W)*(?:([0-9]+)D)*(?:([0-9]+)H)*(?:([0-9]+)M)*(?:([0-9]+)S)*",
|
|
s.upper().replace(" ", "").strip())
|
|
if match:
|
|
w, d, h, m, s = match.groups()
|
|
if any([w, d, h, m, s]):
|
|
w, d, h, m, s = [i if i else 0 for i in [w, d, h, m, s]]
|
|
return timedelta(weeks=int(w), days=int(d), hours=int(h), minutes=int(m), seconds=int(s))
|
|
raise BadArgument()
|
|
|
|
|
|
def seconds_to_time_string(seconds: float) -> str:
|
|
days, seconds = divmod(seconds, 86400)
|
|
hours, seconds = divmod(seconds, 3600)
|
|
minutes, seconds = divmod(seconds, 60)
|
|
return f"""{f"{days}d {hours}h {minutes}m {seconds}s"
|
|
if days > 0 else f"{hours}h {minutes}m {seconds}s"
|
|
if hours > 0 else f"{minutes}m {seconds}s"
|
|
if minutes > 0 else f"{seconds}s"}"""
|
|
|
|
|
|
def event_is_enabled(cog: str, guild_id: int, s: Session = None) -> bool:
|
|
close = False
|
|
if not s:
|
|
s = db.Session()
|
|
close = True
|
|
|
|
es = s.query(db.ExtensionState).get((cog, guild_id))
|
|
|
|
if close or (es and not es.state):
|
|
s.close()
|
|
|
|
if es:
|
|
return es.state
|
|
return True
|