diff --git a/data/embeds/ufora.py b/data/embeds/ufora.py index c445e1b..2f2dbe3 100644 --- a/data/embeds/ufora.py +++ b/data/embeds/ufora.py @@ -1,17 +1,17 @@ -from datetime import datetime +from datetime import datetime, timedelta from discord import Embed, Colour from functions.stringFormatters import leadingZero as lz from functions.timeFormatters import intToWeekday -from markdownify import markdownify as md +from html import unescape import pytz +import re class UforaNotification: def __init__(self, content: dict, course, notif_id, course_id): self._content: dict = content self._course = course - self._notif_id = notif_id - self._course_id = course_id + self._notif_id, self._course_id = notif_id, course_id self._view_url = self._create_url() self._title = self._clean_content(self._content["title"]) self._description = self._get_description() @@ -40,24 +40,54 @@ class UforaNotification: def _get_description(self): desc = self._clean_content(self._content["summary"]) - if len(desc) > 4096: - return desc[:4093] + "..." + if len(desc) > 500: + return desc[:497] + "..." return desc def _clean_content(self, text: str): - return md(text) + # Dict with HTML & markdown tags to replace + html_table = { + # CHARACTERS: + "&": '&', + """: '"', + "apos;": "'", + ">": ">", + "<": "<", + # MARKDOWN SUPPORT: + "": "**", + "": "**", + "": "**", + "": "**", + "": "*", + "": "*", + "": "*", + "": "*", + "": "~~", + "": "~~", + "": "__", + "": "__", + # Represent paragraphs with newlines + "

": "\n", + "
": "\n", + "
": "\n", + "
": "\n" + } + + # Unescape HTML + for key, value in html_table.items(): + text = text.replace(key, value) + + # Remove HTML tags + return unescape(re.sub(r"<[^>]*>", "", text)) def _get_published(self): - # Datetime is unable to parse the timezone because it's useless - # We will hereby cut it out and pray the timezone will always be UTC+0 - published = self._content["published"].rsplit(" ", 1)[0] - time_string = "%a, %d %b %Y %H:%M:%S" - dt = datetime.strptime(published, time_string)\ + time_string = "%a, %d %b %Y %H:%M:%S %Z" + dt = datetime.strptime(self._content["published"], time_string)\ .astimezone(pytz.timezone("Europe/Brussels")) - # Apply timezone offset in a hacky way - dt = dt + dt.utcoffset() + # Apply timezone offset + dt = dt + timedelta(hours=dt.utcoffset().seconds//3600) return "{} {}/{}/{} om {}:{}:{}".format( intToWeekday(dt.weekday()), diff --git a/requirements.txt b/requirements.txt index 036bf7e..dc9dcba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,5 +17,4 @@ quart==0.15.1 Quart-CORS==0.5.0 attrs~=21.2.0 dacite~=1.6.0 -pytest==6.2.4 -markdownify==0.9.2 \ No newline at end of file +pytest==6.2.4 \ No newline at end of file