diff --git a/discord_reminder_bot/main.py b/discord_reminder_bot/main.py index c8f0378..564e737 100644 --- a/discord_reminder_bot/main.py +++ b/discord_reminder_bot/main.py @@ -1,21 +1,18 @@ -import dataclasses import logging -from datetime import datetime from typing import List -import dateparser import interactions from apscheduler import events from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED from apscheduler.jobstores.base import JobLookupError from apscheduler.triggers.date import DateTrigger -from dateparser.conf import SettingValidationError from discord_webhook import DiscordWebhook from interactions import CommandContext, Embed, Option, OptionType, autodefer from interactions.ext.paginator import Paginator from discord_reminder_bot.countdown import calculate from discord_reminder_bot.create_pages import create_pages +from discord_reminder_bot.parse import parse_time from discord_reminder_bot.settings import ( bot_token, config_timezone, @@ -49,56 +46,6 @@ async def base_command(ctx: interactions.CommandContext): pass -@dataclasses.dataclass -class ParsedTime: - """ - This is used when parsing a time or date from a string. - - We use this when adding a job with /reminder add. - - Attributes: - date_to_parse: The string we parsed the time from. - err: True if an error was raised when parsing the time. - err_msg: The error message. - parsed_time: The parsed time we got from the string. - """ - date_to_parse: str = None - err: bool = False - err_msg: str = "" - parsed_time: datetime = None - - -def parse_time(date_to_parse: str, timezone: str = config_timezone) -> ParsedTime: - """Parse the datetime from a string. - - Args: - date_to_parse: The string we want to parse. - timezone: The timezone to use when parsing. This will be used when typing things like "22:00". - - Returns: - ParsedTime - """ - try: - parsed_date = dateparser.parse( - f"{date_to_parse}", - settings={ - "PREFER_DATES_FROM": "future", - "TIMEZONE": f"{timezone}", - "TO_TIMEZONE": f"{timezone}", - }, - ) - except SettingValidationError as e: - 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) - - return ParsedTime(parsed_time=parsed_date, date_to_parse=date_to_parse) - - @bot.modal("edit_modal") async def modal_response_edit(ctx: CommandContext, *response: str): """This is what gets triggerd when the user clicks the Edit button in /reminder list. diff --git a/discord_reminder_bot/parse.py b/discord_reminder_bot/parse.py new file mode 100644 index 0000000..f337882 --- /dev/null +++ b/discord_reminder_bot/parse.py @@ -0,0 +1,57 @@ +import dataclasses +from datetime import datetime + +import dateparser +from dateparser.conf import SettingValidationError + +from discord_reminder_bot.settings import config_timezone + + +@dataclasses.dataclass +class ParsedTime: + """ + This is used when parsing a time or date from a string. + + We use this when adding a job with /reminder add. + + Attributes: + date_to_parse: The string we parsed the time from. + err: True if an error was raised when parsing the time. + err_msg: The error message. + parsed_time: The parsed time we got from the string. + """ + date_to_parse: str = None + err: bool = False + err_msg: str = "" + parsed_time: datetime = None + + +def parse_time(date_to_parse: str, timezone: str = config_timezone) -> ParsedTime: + """Parse the datetime from a string. + + Args: + date_to_parse: The string we want to parse. + timezone: The timezone to use when parsing. This will be used when typing things like "22:00". + + Returns: + ParsedTime + """ + try: + parsed_date = dateparser.parse( + f"{date_to_parse}", + settings={ + "PREFER_DATES_FROM": "future", + "TIMEZONE": f"{timezone}", + "TO_TIMEZONE": f"{timezone}", + }, + ) + except SettingValidationError as e: + 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) + + return ParsedTime(parsed_time=parsed_date, date_to_parse=date_to_parse)