diff --git a/webhook-bridge.py b/webhook-bridge.py index dc3de5b..a333235 100755 --- a/webhook-bridge.py +++ b/webhook-bridge.py @@ -102,6 +102,14 @@ def remove_emoji(string): return emoji_pattern.sub(r'', string) +def escape_markdown(string): + # Absolutely needs to go first or it will replace our escaping slashes! + string = string.replace("\\", "\\\\") + string = string.replace("_", "\\_") + string = string.replace("*", "\\*") + return string + + def strip_colour(string): colour_pattern = re.compile( u"\U000000A7" # selection symbol @@ -249,10 +257,9 @@ def main(): global TAB_FOOTER, TAB_HEADER logging.debug("Got Tablist H/F Update: header={}".format(header_footer_packet.header)) logging.debug("Got Tablist H/F Update: footer={}".format(header_footer_packet.footer)) - # Strip out colour codes - - TAB_HEADER = strip_colour(json.loads(header_footer_packet.header)["text"]) - TAB_FOOTER = strip_colour(json.loads(header_footer_packet.footer)["text"]) + # Strip out colour codes and some markdown + TAB_HEADER = escape_markdown(strip_colour(json.loads(header_footer_packet.header)["text"])) + TAB_FOOTER = escape_markdown(strip_colour(json.loads(header_footer_packet.footer)["text"])) def handle_tab_list(tab_list_packet): logging.debug("Processing tab list packet") @@ -333,7 +340,7 @@ def main(): return logging.info("Username: {} Message: {}".format(username, original_message)) logging.debug("msg: {}".format(repr(original_message))) - message = remove_emoji(original_message.strip().replace("@", "@\N{zero width space}")) + message = escape_markdown(remove_emoji(original_message.strip().replace("@", "@\N{zero width space}"))) webhook_payload = { 'username': username, 'avatar_url': "https://visage.surgeplay.com/face/160/{}".format(player_uuid),