Add /parse command

This commit is contained in:
2022-10-30 20:03:47 +01:00
parent bf767b622a
commit 8f01d1825f
2 changed files with 63 additions and 6 deletions

View File

@ -37,12 +37,25 @@ def calculate(job: Job) -> str:
# Get time and date the job will run and calculate how many days,
# hours and seconds.
countdown = trigger_time - datetime.datetime.now(tz=pytz.timezone(config_timezone))
return countdown(trigger_time)
def countdown(trigger_time: datetime) -> str:
"""
Calculate days, hours and minutes to a date.
Args:
trigger_time: The date.
Returns:
A string with the days, hours and minutes.
"""
countdown_time = trigger_time - datetime.datetime.now(tz=pytz.timezone(config_timezone))
days, hours, minutes = (
countdown.days,
countdown.seconds // 3600,
countdown.seconds // 60 % 60,
countdown_time.days,
countdown_time.seconds // 3600,
countdown_time.seconds // 60 % 60,
)
# TODO: Explain this.

View File

@ -74,7 +74,8 @@ def parse_time(date_to_parse: str, timezone: str = config_timezone) -> ParsedTim
return ParsedTime(err=True, err_msg=f"Timezone is possible wrong?: {e}", date_to_parse=date_to_parse)
except ValueError as e:
return ParsedTime(err=True, err_msg=f"Failed to parse date. Unknown language: {e}", date_to_parse=date_to_parse)
except TypeError as e:
return ParsedTime(err=True, err_msg=f"{e}", date_to_parse=date_to_parse)
if not parsed_date:
return ParsedTime(err=True, err_msg=f"Could not parse the date.", date_to_parse=date_to_parse)
@ -177,9 +178,52 @@ async def modal_response_edit(ctx: CommandContext, *response: str):
return await ctx.send(msg)
@bot.command(name="parse", description="Parse the time from a string", options=[
Option(
name="time_to_parse",
description="The string you want to parse.",
type=OptionType.STRING,
required=True,
),
Option(
name="optional_timezone",
description="Optional time zone, for example Europe/Stockholm",
type=OptionType.STRING,
required=False,
),
])
async def parse_command(ctx: interactions.CommandContext, time_to_parse: str, optional_timezone: str | None = None):
"""
Find the date and time from a string.
Args:
ctx: Context of the slash command. Contains the guild, author and message and more.
time_to_parse: The string you want to parse.
optional_timezone: Optional time zone, for example Europe/Stockholm.
"""
if optional_timezone:
parsed = parse_time(date_to_parse=time_to_parse, timezone=optional_timezone)
else:
parsed = parse_time(date_to_parse=time_to_parse)
if parsed.err:
return await ctx.send(parsed.err_msg)
parsed_date = parsed.parsed_time
# Locales appropriate date and time representation.
locale_time = parsed_date.strftime("%c")
run_date = parsed_date.strftime("%Y-%m-%d %H:%M:%S")
return await ctx.send(f"**String**: {time_to_parse}\n"
f"**Parsed date**: {parsed_date}\n"
f"**Formatted**: {run_date}\n"
f"**Locale time**: {locale_time}\n")
@base_command.subcommand(name="list", description="List, pause, unpause, and remove reminders.")
async def list_command(ctx: interactions.CommandContext):
"""List, pause, unpause, and remove reminders."""
"""List, pause, unpause, and remove reminders.
Args:
ctx: Context of the slash command. Contains the guild, author and message and more.
"""
pages = create_pages(ctx)
if not pages: