alternative syntax for relative time range
This commit is contained in:
@@ -59,7 +59,7 @@
|
|||||||
* fast: only read cache
|
* fast: only read cache
|
||||||
* fresh: does not read cache
|
* fresh: does not read cache
|
||||||
|
|
||||||
(Dates are formated 'yyyy-mm-dd' or 'yyyy-mm-ddThh:mm' (ISO 8601) or 'week/month/year')
|
(Dates are formated 'yyyy-mm-dd' or 'yyyy-mm-ddThh:mm' (ISO 8601) or 'week' or '8days' or '1y')
|
||||||
```
|
```
|
||||||
|
|
||||||
## Running this bot
|
## Running this bot
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ from utils import (
|
|||||||
delta,
|
delta,
|
||||||
gdpr,
|
gdpr,
|
||||||
ISO8601_REGEX,
|
ISO8601_REGEX,
|
||||||
|
RELATIVE_REGEX,
|
||||||
parse_time,
|
parse_time,
|
||||||
RELATIVE_TIME,
|
|
||||||
)
|
)
|
||||||
from logs import (
|
from logs import (
|
||||||
GuildLogs,
|
GuildLogs,
|
||||||
@@ -70,7 +70,7 @@ class Scanner(ABC):
|
|||||||
arg = arg[3:-1] if "!" in arg else arg[2:-1]
|
arg = arg[3:-1] if "!" in arg else arg[2:-1]
|
||||||
elif re.match(r"^<#!?\d+>$", arg):
|
elif re.match(r"^<#!?\d+>$", arg):
|
||||||
arg = arg[3:-1] if "!" in arg else arg[2:-1]
|
arg = arg[3:-1] if "!" in arg else arg[2:-1]
|
||||||
elif re.match(ISO8601_REGEX, arg) or arg in RELATIVE_TIME:
|
elif re.match(ISO8601_REGEX, arg) or re.match(RELATIVE_REGEX, arg):
|
||||||
dates += [parse_time(arg)]
|
dates += [parse_time(arg)]
|
||||||
skip_check = True
|
skip_check = True
|
||||||
if len(dates) > 2:
|
if len(dates) > 2:
|
||||||
|
|||||||
+26
-10
@@ -36,7 +36,7 @@ def generate_help(
|
|||||||
%{cmd}: {info}
|
%{cmd}: {info}
|
||||||
arguments:
|
arguments:
|
||||||
{arg_list}
|
{arg_list}
|
||||||
(Dates are formated 'yyyy-mm-dd' or 'yyyy-mm-ddThh:mm' (ISO 8601) or 'week/month/year')
|
(Dates are formated 'yyyy-mm-dd' or 'yyyy-mm-ddThh:mm' (ISO 8601) or 'week' or '8days' or '1y')
|
||||||
Example: %{cmd} {example}
|
Example: %{cmd} {example}
|
||||||
```"""
|
```"""
|
||||||
|
|
||||||
@@ -180,21 +180,37 @@ def parse_iso_datetime(str_date: str) -> datetime:
|
|||||||
return dateutil.parser.parse(str_date)
|
return dateutil.parser.parse(str_date)
|
||||||
|
|
||||||
|
|
||||||
RELATIVE_TIME = {
|
RELATIVE_REGEX = (
|
||||||
"today": relativedelta(days=1),
|
r"(yesterday|today|\d*h(ours?)?|\d*d(ays?)?|\d*w(eeks?)?|\d*m(onths?)?|\d*y(ears?))"
|
||||||
"yesterday": relativedelta(days=2),
|
)
|
||||||
"week": relativedelta(weeks=1),
|
|
||||||
"month": relativedelta(months=1),
|
|
||||||
"year": relativedelta(years=1),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def parse_relative_time(src: str) -> datetime:
|
def parse_relative_time(src: str) -> datetime:
|
||||||
return datetime.utcnow() - RELATIVE_TIME[src]
|
timezone_delta = datetime.utcnow() - datetime.now()
|
||||||
|
if src == "today":
|
||||||
|
return datetime.today() + timezone_delta
|
||||||
|
elif src == "yesterday":
|
||||||
|
return datetime.today() - relativedelta(days=1) + timezone_delta
|
||||||
|
else:
|
||||||
|
m = re.match("(\d*)(\w+)", src)
|
||||||
|
delta = None
|
||||||
|
value = int(m[1])
|
||||||
|
unit = m[2][0]
|
||||||
|
if unit == "h":
|
||||||
|
delta = relativedelta(hours=value)
|
||||||
|
elif unit == "d":
|
||||||
|
delta = relativedelta(days=value)
|
||||||
|
elif unit == "w":
|
||||||
|
delta = relativedelta(weeks=value)
|
||||||
|
elif unit == "m":
|
||||||
|
delta = relativedelta(months=value)
|
||||||
|
elif unit == "y":
|
||||||
|
delta = relativedelta(years=value)
|
||||||
|
return datetime.utcnow() - delta
|
||||||
|
|
||||||
|
|
||||||
def parse_time(src: str) -> datetime:
|
def parse_time(src: str) -> datetime:
|
||||||
if src in RELATIVE_TIME:
|
if re.match(RELATIVE_REGEX, src):
|
||||||
return parse_relative_time(src)
|
return parse_relative_time(src)
|
||||||
else:
|
else:
|
||||||
return parse_iso_datetime(src)
|
return parse_iso_datetime(src)
|
||||||
|
|||||||
Reference in New Issue
Block a user