-
-
Notifications
You must be signed in to change notification settings - Fork 86
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: wulan17 <[email protected]>
- Loading branch information
Showing
3 changed files
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# Pyrofork - Telegram MTProto API Client Library for Python | ||
# Copyright (C) 2022-present Mayuri-Chan <https://github.com/Mayuri-Chan> | ||
# | ||
# This file is part of Pyrofork. | ||
# | ||
# Pyrofork is free software: you can redistribute it and/or modify | ||
# it under the terms of the GNU Lesser General Public License as published | ||
# by the Free Software Foundation, either version 3 of the License, or | ||
# (at your option) any later version. | ||
# | ||
# Pyrofork is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU Lesser General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU Lesser General Public License | ||
# along with Pyrofork. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
import re | ||
from datetime import datetime | ||
from typing import Union, List, Optional | ||
|
||
import pyrogram | ||
from pyrogram import raw, utils, enums | ||
from pyrogram import types | ||
|
||
class SendWebPage: | ||
async def send_web_page( | ||
self: "pyrogram.Client", | ||
chat_id: Union[int, str], | ||
url: str, | ||
text: str = "", | ||
parse_mode: Optional["enums.ParseMode"] = None, | ||
entities: List["types.MessageEntity"] = None, | ||
disable_web_page_preview: bool = None, | ||
large_media: bool = None, | ||
invert_media: bool = None, | ||
disable_notification: bool = None, | ||
message_thread_id: int = None, | ||
reply_to_message_id: int = None, | ||
reply_to_story_id: int = None, | ||
quote_text: str = None, | ||
schedule_date: datetime = None, | ||
protect_content: bool = None, | ||
reply_markup: Union[ | ||
"types.InlineKeyboardMarkup", | ||
"types.ReplyKeyboardMarkup", | ||
"types.ReplyKeyboardRemove", | ||
"types.ForceReply" | ||
] = None | ||
) -> "types.Message": | ||
"""Send text Web Page Preview. | ||
.. include:: /_includes/usable-by/users-bots.rst | ||
Parameters: | ||
chat_id (``int`` | ``str``): | ||
Unique identifier (int) or username (str) of the target chat. | ||
For your personal cloud (Saved Messages) you can simply use "me" or "self". | ||
For a contact that exists in your Telegram address book you can use his phone number (str). | ||
url (``str``): | ||
Link that will be previewed. | ||
text (``str``, *optional*): | ||
Text of the message to be sent. | ||
parse_mode (:obj:`~pyrogram.enums.ParseMode`, *optional*): | ||
By default, texts are parsed using both Markdown and HTML styles. | ||
You can combine both syntaxes together. | ||
entities (List of :obj:`~pyrogram.types.MessageEntity`): | ||
List of special entities that appear in message text, which can be specified instead of *parse_mode*. | ||
large_media (``bool``, *optional*): | ||
Make web page preview image larger. | ||
invert_media (``bool``, *optional*): | ||
Move web page preview to above the message. | ||
disable_notification (``bool``, *optional*): | ||
Sends the message silently. | ||
Users will receive a notification with no sound. | ||
message_thread_id (``int``, *optional*): | ||
Unique identifier for the target message thread (topic) of the forum. | ||
for forum supergroups only. | ||
reply_to_message_id (``int``, *optional*): | ||
If the message is a reply, ID of the original message. | ||
reply_to_story_id (``int``, *optional*): | ||
Unique identifier for the target story. | ||
quote_text (``str``, *optional*): | ||
Text to quote. | ||
for reply_to_message only. | ||
schedule_date (:py:obj:`~datetime.datetime`, *optional*): | ||
Date when the message will be automatically sent. | ||
protect_content (``bool``, *optional*): | ||
Protects the contents of the sent message from forwarding and saving. | ||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardMarkup` | :obj:`~pyrogram.types.ReplyKeyboardRemove` | :obj:`~pyrogram.types.ForceReply`, *optional*): | ||
Additional interface options. An object for an inline keyboard, custom reply keyboard, | ||
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. | ||
Example: | ||
.. code-block:: python | ||
await app.send_web_page("me", "https://github.com/Mayuri-Chan/pyrofork") | ||
""" | ||
|
||
message, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values() | ||
|
||
reply_to = None | ||
if reply_to_message_id or message_thread_id: | ||
reply_to = types.InputReplyToMessage(reply_to_message_id=reply_to_message_id, message_thread_id=message_thread_id, quote_text=quote_text) | ||
if reply_to_story_id: | ||
user_id = await self.resolve_peer(chat_id) | ||
reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) | ||
|
||
media = raw.types.InputMediaWebPage( | ||
url=url, | ||
force_large_media=large_media, | ||
force_small_media=not large_media | ||
) | ||
r = await self.invoke( | ||
raw.functions.messages.SendMedia( | ||
peer=await self.resolve_peer(chat_id), | ||
silent=disable_notification or None, | ||
reply_to=reply_to, | ||
random_id=self.rnd_id(), | ||
schedule_date=utils.datetime_to_timestamp(schedule_date), | ||
reply_markup=await reply_markup.write(self) if reply_markup else None, | ||
message=message, | ||
media=media, | ||
invert_media=invert_media, | ||
entities=entities, | ||
noforwards=protect_content | ||
) | ||
) | ||
|
||
return types.Message( | ||
id=r.id, | ||
chat=types.Chat( | ||
id=peer_id, | ||
type=enums.ChatType.PRIVATE, | ||
client=self | ||
), | ||
text=message, | ||
date=utils.timestamp_to_datetime(r.date), | ||
outgoing=r.out, | ||
reply_markup=reply_markup, | ||
entities=[ | ||
types.MessageEntity._parse(None, entity, {}) | ||
for entity in entities | ||
] if entities else None, | ||
client=self | ||
) |