mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2025-12-29 12:04:51 +00:00
Make url parameter optional for send_web_page
Signed-off-by: wulan17 <wulan17@komodos.id>
This commit is contained in:
parent
757b081eeb
commit
96917949a9
2 changed files with 28 additions and 6 deletions
|
|
@ -28,7 +28,7 @@ class SendWebPage:
|
|||
async def send_web_page(
|
||||
self: "pyrogram.Client",
|
||||
chat_id: Union[int, str],
|
||||
url: str,
|
||||
url: str = None,
|
||||
text: str = "",
|
||||
parse_mode: Optional["enums.ParseMode"] = None,
|
||||
entities: List["types.MessageEntity"] = None,
|
||||
|
|
@ -53,7 +53,7 @@ class SendWebPage:
|
|||
"types.ForceReply"
|
||||
] = None
|
||||
) -> "types.Message":
|
||||
"""Send text Web Page Preview.
|
||||
"""Send Web Page Preview.
|
||||
|
||||
.. include:: /_includes/usable-by/users-bots.rst
|
||||
|
||||
|
|
@ -64,12 +64,13 @@ class SendWebPage:
|
|||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||
You can also use chat public link in form of *t.me/<username>* (str).
|
||||
|
||||
url (``str``):
|
||||
Link that will be previewed.
|
||||
|
||||
text (``str``, *optional*):
|
||||
Text of the message to be sent.
|
||||
|
||||
url (``str``, *optional*):
|
||||
Link that will be previewed.
|
||||
If url not specified, the first URL found in the text will be used.
|
||||
|
||||
parse_mode (:obj:`~pyrogram.enums.ParseMode`, *optional*):
|
||||
By default, texts are parsed using both Markdown and HTML styles.
|
||||
You can combine both syntaxes together.
|
||||
|
|
@ -131,7 +132,7 @@ class SendWebPage:
|
|||
instructions to remove reply keyboard or to force a reply from the user.
|
||||
|
||||
Returns:
|
||||
:obj:`~pyrogram.types.Message`: On success, the sent text message is returned.
|
||||
:obj:`~pyrogram.types.Message`: On success, the sent message is returned.
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
|
@ -141,6 +142,18 @@ class SendWebPage:
|
|||
"""
|
||||
|
||||
message, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values()
|
||||
if not url:
|
||||
if entities:
|
||||
for entity in entities:
|
||||
if isinstance(entity, enums.MessageEntityType.URL):
|
||||
url = entity.url
|
||||
break
|
||||
|
||||
if not url:
|
||||
url = utils.get_first_url(message)
|
||||
|
||||
if not url:
|
||||
raise ValueError("URL not specified")
|
||||
|
||||
reply_to = await utils.get_reply_to(
|
||||
client=self,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import asyncio
|
|||
import base64
|
||||
import functools
|
||||
import hashlib
|
||||
import re
|
||||
import os
|
||||
import struct
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
|
|
@ -529,3 +530,11 @@ async def get_reply_to(
|
|||
story_id=reply_to_story_id
|
||||
)
|
||||
return reply_to
|
||||
|
||||
def get_first_url(text):
|
||||
text = re.sub(r"^\s*(<[\w<>=\s\"]*>)\s*", r"\1", text)
|
||||
text = re.sub(r"\s*(</[\w</>]*>)\s*$", r"\1", text)
|
||||
|
||||
matches = re.findall(r"(https?):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])", text)
|
||||
|
||||
return f"{matches[0][0]}://{matches[0][1]}{matches[0][2]}" if matches else None
|
||||
|
|
|
|||
Loading…
Reference in a new issue