pyrofork: Add blockquote expandable parser

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2024-06-01 14:04:45 +07:00
parent 4cec859126
commit c4362ad535
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5
4 changed files with 34 additions and 2 deletions

View file

@ -69,6 +69,9 @@ class MessageEntityType(AutoName):
BLOCKQUOTE = raw.types.MessageEntityBlockquote
"Blockquote text"
EXPANDABLE_BLOCKQUOTE = raw.types.MessageEntityBlockquote
"collapsed-by-default block quotation"
TEXT_LINK = raw.types.MessageEntityTextUrl
"For clickable text URLs"

View file

@ -58,6 +58,7 @@ class Parser(HTMLParser):
entity = raw.types.MessageEntityStrike
elif tag == "blockquote":
entity = raw.types.MessageEntityBlockquote
extra["collapsed"] = bool("expandable" in attrs.keys())
elif tag == "code":
entity = raw.types.MessageEntityCode
elif tag == "pre":
@ -178,6 +179,10 @@ class HTML:
language = getattr(entity, "language", "") or ""
start_tag = f'<{name} language="{language}">' if language else f"<{name}>"
end_tag = f"</{name}>"
elif entity_type == MessageEntityType.EXPANDABLE_BLOCKQUOTE:
name = "blockquote"
start_tag = f"<{name} expandable>"
end_tag = f"</{name}>"
elif entity_type in (
MessageEntityType.CODE,
MessageEntityType.BLOCKQUOTE,

View file

@ -35,6 +35,7 @@ SPOILER_DELIM = "||"
CODE_DELIM = "`"
PRE_DELIM = "```"
BLOCKQUOTE_DELIM = ">"
BLOCKQUOTE_EXPANDABLE_DELIM = "**>"
MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
d="|".join(
@ -78,6 +79,14 @@ class Markdown:
result.append(line.strip())
else:
result.append(line[1:].strip())
elif line.startswith(BLOCKQUOTE_EXPANDABLE_DELIM):
if not in_blockquote:
line = re.sub(r'^\*\*> ', OPENING_TAG.format("blockquote expandable"), line)
line = re.sub(r'^\*\*>', OPENING_TAG.format("blockquote expandable"), line)
in_blockquote = True
result.append(line.strip())
else:
result.append(line[3:].strip())
else:
if in_blockquote:
line = CLOSING_TAG.format("blockquote") + line
@ -174,6 +183,9 @@ class Markdown:
start_tag = f"{PRE_DELIM}{language}\n"
end_tag = f"\n{PRE_DELIM}"
elif entity_type == MessageEntityType.BLOCKQUOTE:
if entity.collapsed:
start_tag = BLOCKQUOTE_EXPANDABLE_DELIM + " "
else:
start_tag = BLOCKQUOTE_DELIM + " "
end_tag = ""
blockquote_text = text[start:end]

View file

@ -52,6 +52,9 @@ class MessageEntity(Object):
custom_emoji_id (``int``, *optional*):
For :obj:`~pyrogram.enums.MessageEntityType.CUSTOM_EMOJI` only, unique identifier of the custom emoji.
Use :meth:`~pyrogram.Client.get_custom_emoji_stickers` to get full information about the sticker.
collapsed (``bool``, *optional*):
For :obj:`~pyrogram.enums.MessageEntityType.BLOCKQUOTE` only, whether the blockquote expandable.
"""
def __init__(
@ -64,7 +67,8 @@ class MessageEntity(Object):
url: str = None,
user: "types.User" = None,
language: str = None,
custom_emoji_id: int = None
custom_emoji_id: int = None,
collapsed: bool = None
):
super().__init__(client)
@ -75,6 +79,7 @@ class MessageEntity(Object):
self.user = user
self.language = language
self.custom_emoji_id = custom_emoji_id
self.collapsed = collapsed
@staticmethod
def _parse(client, entity: "raw.base.MessageEntity", users: dict) -> Optional["MessageEntity"]:
@ -95,6 +100,7 @@ class MessageEntity(Object):
user=types.User._parse(client, users.get(user_id, None)),
language=getattr(entity, "language", None),
custom_emoji_id=getattr(entity, "document_id", None),
collapsed=getattr(entity, "collapsed", None),
client=client
)
@ -117,6 +123,12 @@ class MessageEntity(Object):
if self.custom_emoji_id is not None:
args["document_id"] = self.custom_emoji_id
if self.type not in [
enums.MessageEntityType.BLOCKQUOTE,
enums.MessageEntityType.EXPANDABLE_BLOCKQUOTE
]:
args.pop("collapsed")
entity = self.type.value
if entity is raw.types.MessageEntityMentionName: