This repository has been archived on 2024-07-28. You can view files and clone it, but cannot push or open issues or pull requests.
moderator-bot/utils/parse_timedelta.py

32 lines
996 B
Python
Raw Normal View History

2022-08-07 04:45:35 -04:00
import re
2022-12-01 05:54:32 -05:00
import typing
2022-08-07 04:45:35 -04:00
2022-12-01 05:54:32 -05:00
import datetime
from load import types
def parse_timedelta(value: str) -> typing.Optional[datetime.timedelta]:
specification = value.strip().replace(' ', '')
2022-08-07 04:45:35 -04:00
match = re.fullmatch(r'(?:(\d+)(?:d|д))?(?:(\d+)(?:h|ч))?(?:(\d+)(?:m|м))?(?:(\d+)(?:s|с))?', specification)
if match:
units = [(0 if i is None else int(i)) for i in match.groups()]
2022-12-01 05:54:32 -05:00
return datetime.timedelta(days=units[0], hours=units[1], minutes=units[2], seconds=units[3])
2022-08-07 04:45:35 -04:00
else:
return None
2022-12-01 05:54:32 -05:00
async def parse_timedelta_from_message(
message: types.Message,
) -> typing.Optional[datetime.timedelta]:
_, *args = message.text.split()
if args:
duration = re.findall(r"(\d+d|\d+h|\d+m|\d+s)",''.join(message.text))
duration = " ".join(duration)
duration = parse_timedelta(duration)
return duration
else:
return datetime.timedelta(0,0,0) # forever