1
0
Fork 0
This repository has been archived on 2024-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
Administrator-py/administrator/utils.py

45 lines
1.3 KiB
Python
Raw Normal View History

2020-08-02 19:41:38 +02:00
import re
from datetime import timedelta
from discord.ext.commands import BadArgument
2020-11-05 14:37:37 +01:00
from sqlalchemy.orm import Session
import db
2020-08-02 19:41:38 +02:00
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()
2020-08-02 20:50:11 +02:00
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"}"""
2020-11-05 14:37:37 +01:00
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