diff --git a/royalnet/serf/discord/escape.py b/royalnet/serf/discord/escape.py index e8af742a..70848e50 100644 --- a/royalnet/serf/discord/escape.py +++ b/royalnet/serf/discord/escape.py @@ -1,4 +1,14 @@ import re +from ...utils import escalating_odds +import datetime + + +# https://stackoverflow.com/questions/18621568/regex-replace-text-outside-html-tags +spooky_pattern = re.compile(r"o(?![^\[]*]|[^[]]*\[/)") +spooky_replacement = r'⊕' + +url_pattern = re.compile(r"\[url=(.*?)](.*?)\[/url]") +url_replacement = r'\2 (\1)' def escape(string: str) -> str: @@ -6,10 +16,10 @@ def escape(string: str) -> str: Warning: Currently escapes everything, even items in code blocks.""" - url_pattern = re.compile(r"\[url=(.*?)](.*?)\[/url]") - url_replacement = r'\2 (\1)' + if escalating_odds(datetime.datetime(2020, 10, 17, 4, 0)): + string = re.sub(spooky_pattern, spooky_replacement, string) - simple_parse = string \ + string = string \ .replace("*", "\\*") \ .replace("_", "\\_") \ .replace("`", "\\`") \ @@ -24,6 +34,6 @@ def escape(string: str) -> str: .replace("[p]", "```") \ .replace("[/p]", "```") - advanced_parse = re.sub(url_pattern, url_replacement, simple_parse) + string = re.sub(url_pattern, url_replacement, string) - return advanced_parse + return string diff --git a/royalnet/serf/telegram/escape.py b/royalnet/serf/telegram/escape.py index ecdc6066..a0147555 100644 --- a/royalnet/serf/telegram/escape.py +++ b/royalnet/serf/telegram/escape.py @@ -1,5 +1,15 @@ import re from typing import * +from ...utils import escalating_odds +import datetime + + +# https://stackoverflow.com/questions/18621568/regex-replace-text-outside-html-tags +spooky_pattern = re.compile(r"o(?![^\[]*]|[^[]]*\[/)") +spooky_replacement = r'⊕' + +url_pattern = re.compile(r"\[url=(.*?)](.*?)\[/url]") +url_replacement = r'\2' def escape(string: Optional[str]) -> Optional[str]: @@ -8,12 +18,12 @@ def escape(string: Optional[str]) -> Optional[str]: Warning: Currently escapes everything, even items in code blocks.""" - url_pattern = re.compile(r"\[url=(.*?)](.*?)\[/url]") - url_replacement = r'\2' + string = string.replace("<", "<").replace(">", ">") - escaped_string = string.replace("<", "<").replace(">", ">") + if escalating_odds(datetime.datetime(2020, 10, 17, 4, 0)): + string = re.sub(spooky_pattern, spooky_replacement, string) - simple_parse = escaped_string \ + string = string \ .replace("[b]", "") \ .replace("[/b]", "") \ .replace("[i]", "") \ @@ -25,6 +35,6 @@ def escape(string: Optional[str]) -> Optional[str]: .replace("[p]", "
") \
         .replace("[/p]", "
") - advanced_parse = re.sub(url_pattern, url_replacement, simple_parse) + string = re.sub(url_pattern, url_replacement, string) - return advanced_parse + return string diff --git a/royalnet/utils/__init__.py b/royalnet/utils/__init__.py index c0aec256..12345899 100644 --- a/royalnet/utils/__init__.py +++ b/royalnet/utils/__init__.py @@ -9,6 +9,7 @@ from .sleep_until import sleep_until from .strip_tabs import strip_tabs from .taskslist import TaskList from .urluuid import to_urluuid, from_urluuid +from .escalating_odds import escalating_odds __all__ = [ "asyncify", @@ -30,4 +31,5 @@ __all__ = [ "strip_tabs", "TaskList", "RoyalnetProcess", + "escalating_odds", ] diff --git a/royalnet/utils/escalating_odds.py b/royalnet/utils/escalating_odds.py new file mode 100644 index 00000000..66c758dd --- /dev/null +++ b/royalnet/utils/escalating_odds.py @@ -0,0 +1,19 @@ +import random +import datetime +import logging + +log = logging.getLogger(__name__) + + +def escalating_odds(target_day: datetime.datetime) -> bool: + time_left: datetime.timedelta = target_day - datetime.datetime.now() + log.debug(f"Time left is {time_left}") + + if time_left.total_seconds() <= 0: + log.debug("Target has passed, autorolling a success") + return True + + odds = 1 / (time_left.days + 1) + result = random.uniform(0, 1) <= odds + log.debug(f"Odds are {odds}, rolled a {result}") + return result