diff --git a/ntfy/bot.py b/ntfy/bot.py
index 918b9ab..1457e0a 100644
--- a/ntfy/bot.py
+++ b/ntfy/bot.py
@@ -2,6 +2,7 @@ import asyncio
from html import escape
import json
from typing import Any, Dict, Tuple, List, Awaitable, Callable
+import markdown
from aiohttp import ClientTimeout
from maubot import MessageEvent, Plugin
@@ -639,9 +640,11 @@ class NtfyBot(Plugin):
if click and not title:
html_content += "%s%s" % (
emoji, escape(click),
- escape(body).replace("\n", "
"))
+ markdown.markdown(escape(body))
+ .replace("\n", "
"))
else:
- html_content += emoji + escape(body).replace("\n", "
")
+ html_content += (emoji + markdown.markdown(escape(body))
+ .replace("\n", "
"))
# add non-emoji tags
if tags:
diff --git a/ntfy/exceptions.py b/ntfy/exceptions.py
new file mode 100644
index 0000000..8d749bb
--- /dev/null
+++ b/ntfy/exceptions.py
@@ -0,0 +1,8 @@
+class SubscriptionError(Exception):
+ """Raised when an error occurs while subscribing to a ntfy topic."""
+
+ def __init__(self, http_response: dict) -> None:
+ self._http_message = http_response
+ self.message = self._http_message.get("error")
+ self.code = self._http_message.get("code")
+ super().__init__(self.message)