diff --git a/pyrogram/parser/markdown.py b/pyrogram/parser/markdown.py
index 4daf27ce..4c5a5f2e 100644
--- a/pyrogram/parser/markdown.py
+++ b/pyrogram/parser/markdown.py
@@ -37,7 +37,7 @@ PRE_DELIM = "```"
BLOCKQUOTE_DELIM = ">"
BLOCKQUOTE_EXPANDABLE_DELIM = "**>"
-MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
+MARKDOWN_RE = re.compile(r"({d})|(!?)\[(.+?)\]\((.+?)\)".format(
d="|".join(
["".join(i) for i in [
[rf"\{j}" for j in i]
@@ -56,6 +56,7 @@ MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
OPENING_TAG = "<{}>"
CLOSING_TAG = "{}>"
URL_MARKUP = '{}'
+EMOJI_MARKUP = '{}'
FIXED_WIDTH_DELIMS = [CODE_DELIM, PRE_DELIM]
CODE_TAG_RE = re.compile(r".*?")
@@ -117,7 +118,7 @@ class Markdown:
for i, match in enumerate(re.finditer(MARKDOWN_RE, text)):
start, _ = match.span()
- delim, text_url, url = match.groups()
+ delim, is_emoji, text_url, url = match.groups()
full = match.group(0)
if delim in FIXED_WIDTH_DELIMS:
@@ -126,10 +127,16 @@ class Markdown:
if is_fixed_width and delim not in FIXED_WIDTH_DELIMS:
continue
- if text_url:
+ if not is_emoji and text_url:
text = utils.replace_once(text, full, URL_MARKUP.format(url, text_url), start)
continue
+ if is_emoji:
+ emoji = text_url
+ emoji_id = url.lstrip("tg://emoji?id=")
+ text = utils.replace_once(text, full, EMOJI_MARKUP.format(emoji_id, emoji), start)
+ continue
+
if delim == BOLD_DELIM:
tag = "b"
elif delim == ITALIC_DELIM:
@@ -221,6 +228,10 @@ class Markdown:
user = entity.user
start_tag = "["
end_tag = f"](tg://user?id={user.id})"
+ elif entity_type == MessageEntityType.CUSTOM_EMOJI:
+ emoji_id = entity.custom_emoji_id
+ start_tag = ""
else:
continue