Add quote support

This commit is contained in:
KurimuzonAkuma 2023-10-30 13:35:16 +03:00 committed by GitHub
parent 7fa1c0ccf4
commit be473d4601
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 620 additions and 45 deletions

View File

@ -90,7 +90,10 @@ class SendGame:
),
message="",
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id
),
random_id=self.rnd_id(),
noforwards=protect_content,
reply_markup=await reply_markup.write(self) if reply_markup else None

View File

@ -16,10 +16,10 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from typing import Union
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw
from pyrogram import raw, enums, types
from pyrogram import utils
@ -31,7 +31,10 @@ class SendInlineBotResult:
result_id: str,
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None
) -> "raw.base.Updates":
"""Send an inline bot result.
Bot results can be retrieved using :meth:`~pyrogram.Client.get_inline_bot_results`
@ -61,6 +64,16 @@ class SendInlineBotResult:
reply_to_message_id (``bool``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
Returns:
:obj:`~pyrogram.raw.base.Updates`: Currently, on success, a raw result is returned.
@ -69,6 +82,8 @@ class SendInlineBotResult:
await app.send_inline_bot_result(chat_id, query_id, result_id)
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
return await self.invoke(
raw.functions.messages.SendInlineBotResult(
peer=await self.resolve_peer(chat_id),
@ -76,6 +91,11 @@ class SendInlineBotResult:
id=result_id,
random_id=self.rnd_id(),
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id)
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
quote_text=quote_text,
quote_entities=quote_entities
)
)
)

View File

@ -49,6 +49,8 @@ class SendAnimation:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -127,6 +129,12 @@ class SendAnimation:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -232,6 +240,8 @@ class SendAnimation:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -240,7 +250,14 @@ class SendAnimation:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -47,6 +47,8 @@ class SendAudio:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -120,6 +122,12 @@ class SendAudio:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -219,6 +227,8 @@ class SendAudio:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -227,7 +237,14 @@ class SendAudio:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -20,8 +20,7 @@ from datetime import datetime
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw, enums
from pyrogram import types
from pyrogram import raw, enums, types
from pyrogram import utils
@ -37,6 +36,8 @@ class SendCachedMedia:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
invert_media: bool = None,
@ -89,6 +90,12 @@ class SendCachedMedia:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -110,6 +117,8 @@ class SendCachedMedia:
await app.send_cached_media("me", file_id)
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
peer = await self.resolve_peer(chat_id)
r = await self.invoke(
raw.functions.messages.SendMedia(
@ -117,7 +126,14 @@ class SendCachedMedia:
media=utils.get_input_media_from_file_id(file_id),
silent=disable_notification or None,
invert_media=invert_media,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -17,10 +17,12 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime
from typing import Union
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw, utils
from pyrogram import raw
from pyrogram import utils
from pyrogram import enums
from pyrogram import types
@ -35,6 +37,9 @@ class SendContact:
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -77,6 +82,16 @@ class SendContact:
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -95,6 +110,8 @@ class SendContact:
await app.send_contact("me", "+1-123-456-7890", "Name")
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
r = await self.invoke(
raw.functions.messages.SendMedia(
peer=await self.resolve_peer(chat_id),
@ -106,7 +123,12 @@ class SendContact:
),
message="",
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -17,11 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime
from typing import Union, Optional
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw, utils
from pyrogram import types
from pyrogram import raw, enums, types
from pyrogram import utils
class SendDice:
@ -33,6 +33,9 @@ class SendDice:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -73,6 +76,16 @@ class SendDice:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -98,13 +111,22 @@ class SendDice:
# Send a basketball
await app.send_dice(chat_id, "🏀")
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
peer = await self.resolve_peer(chat_id)
r = await self.invoke(
raw.functions.messages.SendMedia(
peer=peer,
media=raw.types.InputMediaDice(emoticon=emoji),
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -45,6 +45,8 @@ class SendDocument:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -112,6 +114,12 @@ class SendDocument:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -197,6 +205,8 @@ class SendDocument:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -205,7 +215,14 @@ class SendDocument:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -17,11 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime
from typing import Union
from typing import Optional, List, Union
import pyrogram
from pyrogram import raw, utils
from pyrogram import types
from pyrogram import raw, enums, types
from pyrogram import utils
class SendLocation:
@ -33,6 +33,9 @@ class SendLocation:
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -69,6 +72,16 @@ class SendLocation:
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -87,6 +100,8 @@ class SendLocation:
app.send_location("me", latitude, longitude)
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
r = await self.invoke(
raw.functions.messages.SendMedia(
peer=await self.resolve_peer(chat_id),
@ -98,7 +113,12 @@ class SendLocation:
),
message="",
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -20,12 +20,13 @@ import logging
import os
import re
from datetime import datetime
from typing import Union, List
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw
from pyrogram import types
from pyrogram import utils
from pyrogram import enums
from pyrogram.file_id import FileType
log = logging.getLogger(__name__)
@ -46,6 +47,9 @@ class SendMediaGroup:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
invert_media: bool = None,
@ -77,6 +81,16 @@ class SendMediaGroup:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -403,13 +417,22 @@ class SendMediaGroup:
)
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
peer = await self.resolve_peer(chat_id)
r = await self.invoke(
raw.functions.messages.SendMultiMedia(
peer=peer,
multi_media=multi_media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,
invert_media=invert_media

View File

@ -36,6 +36,8 @@ class SendMessage:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -82,6 +84,12 @@ class SendMessage:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -131,6 +139,7 @@ class SendMessage:
"""
message, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values()
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
peer = await self.resolve_peer(chat_id)
r = await self.invoke(
@ -138,7 +147,14 @@ class SendMessage:
peer=peer,
no_webpage=disable_web_page_preview or None,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
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,

View File

@ -43,6 +43,8 @@ class SendPhoto:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -103,6 +105,12 @@ class SendPhoto:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -181,6 +189,8 @@ class SendPhoto:
spoiler=has_spoiler
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -189,7 +199,14 @@ class SendPhoto:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -17,7 +17,7 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime
from typing import Union, List
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw, utils
@ -44,6 +44,9 @@ class SendPoll:
protect_content: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
@ -122,6 +125,16 @@ class SendPoll:
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -140,6 +153,7 @@ class SendPoll:
solution, solution_entities = (await utils.parse_text_entities(
self, explanation, explanation_parse_mode, explanation_entities
)).values()
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
r = await self.invoke(
raw.functions.messages.SendMedia(
@ -165,7 +179,12 @@ class SendPoll:
),
message="",
silent=disable_notification,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -19,13 +19,14 @@
import os
import re
from datetime import datetime
from typing import Union, BinaryIO, Optional, Callable
from typing import Union, BinaryIO, Optional, Callable, List
import pyrogram
from pyrogram import StopTransmission
from pyrogram import raw
from pyrogram import types
from pyrogram import utils
from pyrogram import enums
from pyrogram.errors import FilePartMissing
from pyrogram.file_id import FileType
@ -39,6 +40,9 @@ class SendSticker:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -81,6 +85,16 @@ class SendSticker:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -156,6 +170,8 @@ class SendSticker:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -164,7 +180,14 @@ class SendSticker:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -17,11 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime
from typing import Union
from typing import Union, List, Optional
import pyrogram
from pyrogram import raw, utils
from pyrogram import types
from pyrogram import types, enums
class SendVenue:
@ -37,6 +37,9 @@ class SendVenue:
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -86,6 +89,16 @@ class SendVenue:
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -106,6 +119,8 @@ class SendVenue:
"me", latitude, longitude,
"Venue title", "Venue address")
"""
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
r = await self.invoke(
raw.functions.messages.SendMedia(
peer=await self.resolve_peer(chat_id),
@ -122,7 +137,12 @@ class SendVenue:
),
message="",
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -50,6 +50,8 @@ class SendVideo:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -133,6 +135,12 @@ class SendVideo:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -238,6 +246,8 @@ class SendVideo:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -246,7 +256,14 @@ class SendVideo:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -18,13 +18,14 @@
import os
from datetime import datetime
from typing import Union, BinaryIO, Optional, Callable
from typing import Union, BinaryIO, Optional, Callable, List
import pyrogram
from pyrogram import StopTransmission
from pyrogram import raw
from pyrogram import types
from pyrogram import utils
from pyrogram import enums
from pyrogram.errors import FilePartMissing
from pyrogram.file_id import FileType
@ -41,6 +42,9 @@ class SendVideoNote:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -95,6 +99,16 @@ class SendVideoNote:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -180,6 +194,8 @@ class SendVideoNote:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -188,7 +204,14 @@ class SendVideoNote:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -43,6 +43,8 @@ class SendVoice:
message_thread_id: int = None,
reply_to_message_id: int = None,
reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup: Union[
@ -98,6 +100,11 @@ class SendVoice:
reply_to_story_id (``int``, *optional*):
Unique identifier for the target story.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -181,6 +188,8 @@ class SendVoice:
]
)
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True:
try:
peer = await self.resolve_peer(chat_id)
@ -189,7 +198,14 @@ class SendVoice:
peer=peer,
media=media,
silent=disable_notification or None,
reply_to=utils.get_reply_to(reply_to_message_id, message_thread_id, peer, reply_to_story_id),
reply_to=utils.get_reply_to(
reply_to_message_id=reply_to_message_id,
message_thread_id=message_thread_id,
reply_to_peer=peer,
reply_to_story_id=reply_to_story_id,
quote_text=quote_text,
quote_entities=quote_entities,
),
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content,

View File

@ -83,7 +83,9 @@ class ForwardStory:
random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date),
message="",
reply_to=utils.get_reply_to(message_thread_id=message_thread_id),
reply_to=utils.get_reply_to(
message_thread_id=message_thread_id
),
)
)

View File

@ -167,6 +167,12 @@ class Message(Object, Update):
*text.html* to get the marked up message text. In case there is no entity, the fields
will contain the same text as *text*.
quote_text (``str``, *optional*):
For quote messages, the actual UTF-8 text of the message, 0-4096 characters.
If the quote contains entities (bold, italic, ...) you can access *text.markdown* or
*text.html* to get the marked up message text. In case there is no entity, the fields
will contain the same text as *text*.
entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*):
For text messages, special entities like usernames, URLs, bot commands, etc. that appear in the text.
@ -174,6 +180,9 @@ class Message(Object, Update):
For messages with a caption, special entities like usernames, URLs, bot commands, etc. that appear
in the caption.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*):
For quote messages, special entities like usernames, URLs, bot commands, etc. that appear in the text.
audio (:obj:`~pyrogram.types.Audio`, *optional*):
Message is an audio file, information about the file.
@ -295,6 +304,9 @@ class Message(Object, Update):
Messages sent from yourself to other chats are outgoing (*outgoing* is True).
An exception is made for your own personal chat; messages sent there will be incoming.
quote (``bool``, *optional*):
The message contains a quote.
matches (List of regex Matches, *optional*):
A list containing all `Match Objects <https://docs.python.org/3/library/re.html#match-objects>`_ that match
the text of this message. Only applicable when using :obj:`Filters.regex <pyrogram.Filters.regex>`.
@ -387,8 +399,10 @@ class Message(Object, Update):
has_protected_content: bool = None,
has_media_spoiler: bool = None,
text: Str = None,
quote_text: Str = None,
entities: List["types.MessageEntity"] = None,
caption_entities: List["types.MessageEntity"] = None,
quote_entities: List["types.MessageEntity"] = None,
audio: "types.Audio" = None,
document: "types.Document" = None,
photo: "types.Photo" = None,
@ -422,6 +436,7 @@ class Message(Object, Update):
forwards: int = None,
via_bot: "types.User" = None,
outgoing: bool = None,
quote: bool = None,
matches: List[Match] = None,
command: List[str] = None,
forum_topic_created: "types.ForumTopicCreated" = None,
@ -478,8 +493,10 @@ class Message(Object, Update):
self.has_protected_content = has_protected_content
self.has_media_spoiler = has_media_spoiler
self.text = text
self.quote_text = quote_text
self.entities = entities
self.caption_entities = caption_entities
self.quote_entities = quote_entities
self.audio = audio
self.document = document
self.photo = photo
@ -513,6 +530,7 @@ class Message(Object, Update):
self.forwards = forwards
self.via_bot = via_bot
self.outgoing = outgoing
self.quote = quote
self.matches = matches
self.command = command
self.reply_markup = reply_markup
@ -971,6 +989,21 @@ class Message(Object, Update):
except Exception:
pass
else:
if message.reply_to.quote:
quote_entities = [types.MessageEntity._parse(client, entity, users) for entity in message.reply_to.quote_entities]
quote_entities = types.List(filter(lambda x: x is not None, quote_entities))
parsed_message.quote = message.reply_to.quote
parsed_message.quote_text = (
Str(message.reply_to.quote_text).init(quote_entities) or None
if media is None or web_page is not None
else None
)
parsed_message.quote_entities = (
quote_entities or None
if media is None or web_page is not None
else None
)
parsed_message.reply_to_message_id = message.reply_to.reply_to_msg_id
parsed_message.reply_to_top_message_id = message.reply_to.reply_to_top_id
else:
@ -1058,6 +1091,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
protect_content: bool = None,
reply_markup=None
@ -1110,6 +1145,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -1141,6 +1182,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
schedule_date=schedule_date,
protect_content=protect_content,
reply_markup=reply_markup
@ -1169,6 +1212,8 @@ class Message(Object, Update):
] = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
progress: Callable = None,
progress_args: tuple = ()
) -> "Message":
@ -1238,6 +1283,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -1292,6 +1343,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -1311,6 +1364,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -1383,6 +1438,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -1436,6 +1497,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -1451,6 +1514,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -1504,6 +1569,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -1529,6 +1600,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup
)
@ -1579,6 +1652,9 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -1631,6 +1707,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -1656,6 +1742,9 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities,
reply_markup=reply_markup
)
@ -1672,6 +1761,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
@ -1745,6 +1836,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -1800,6 +1901,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
schedule_date=schedule_date,
reply_markup=reply_markup,
progress=progress,
@ -1887,7 +1990,10 @@ class Message(Object, Update):
quote: bool = None,
disable_notification: bool = None,
message_thread_id: bool = None,
reply_to_message_id: int = None
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None
) -> "Message":
"""Bound method *reply_inline_bot_result* of :obj:`~pyrogram.types.Message`.
@ -1928,6 +2034,16 @@ class Message(Object, Update):
reply_to_message_id (``bool``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
Returns:
On success, the sent Message is returned.
@ -1946,7 +2062,10 @@ class Message(Object, Update):
result_id=result_id,
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities
)
async def reply_location(
@ -1957,6 +2076,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2003,6 +2124,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2026,6 +2153,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup
)
@ -2035,7 +2164,10 @@ class Message(Object, Update):
quote: bool = None,
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None
) -> List["types.Message"]:
"""Bound method *reply_media_group* of :obj:`~pyrogram.types.Message`.
@ -2074,6 +2206,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
Returns:
On success, a :obj:`~pyrogram.types.Messages` object is returned containing all the
single messages sent.
@ -2092,7 +2234,10 @@ class Message(Object, Update):
media=media,
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities
)
async def reply_photo(
@ -2107,6 +2252,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2172,6 +2319,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2223,6 +2376,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -2247,6 +2402,9 @@ class Message(Object, Update):
protect_content: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
@ -2337,6 +2495,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent.
@ -2374,6 +2542,9 @@ class Message(Object, Update):
protect_content=protect_content,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities,
schedule_date=schedule_date,
reply_markup=reply_markup
)
@ -2385,6 +2556,9 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2432,6 +2606,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2478,6 +2662,9 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -2495,6 +2682,9 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2556,6 +2746,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2583,6 +2783,9 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities,
reply_markup=reply_markup
)
@ -2603,6 +2806,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2686,6 +2891,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message.
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2742,6 +2953,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -2757,6 +2970,9 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
parse_mode: Optional["enums.ParseMode"] = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2816,6 +3032,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote 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.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2865,6 +3091,9 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
parse_mode=parse_mode,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args
@ -2881,6 +3110,8 @@ class Message(Object, Update):
disable_notification: bool = None,
message_thread_id: int = None,
reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[
"types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup",
@ -2941,6 +3172,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message
quote_text (``str``):
Text of the quote to be sent.
quote_entities (List of :obj:`~pyrogram.types.MessageEntity`):
List of special entities that appear in quote text, which can be specified instead of *parse_mode*.
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.
@ -2991,6 +3228,8 @@ class Message(Object, Update):
disable_notification=disable_notification,
message_thread_id=message_thread_id,
reply_to_message_id=reply_to_message_id,
quote_text=quote_text,
quote_entities=quote_entities,
reply_markup=reply_markup,
progress=progress,
progress_args=progress_args

View File

@ -288,16 +288,22 @@ def get_peer_type(peer_id: int) -> str:
def get_reply_to(
reply_to_message_id: Optional[int] = None,
message_thread_id: Optional[int] = None,
user_id: Optional[raw.types.InputUser] = None,
reply_to_peer: Optional[raw.base.InputPeer] = None,
quote_text: Optional[str] = None,
quote_entities: Optional[List[raw.base.MessageEntity]] = None,
reply_to_story_id: Optional[int] = None
) -> Optional[Union[raw.types.InputReplyToMessage, raw.types.InputReplyToStory]]:
if all((user_id, reply_to_story_id)):
return raw.types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) # type: ignore[arg-type]
"""Get InputReply for reply_to argument"""
if all((reply_to_peer, reply_to_story_id)):
return raw.types.InputReplyToStory(user_id=reply_to_peer, story_id=reply_to_story_id) # type: ignore[arg-type]
if any((reply_to_message_id, message_thread_id)):
return raw.types.InputReplyToMessage(
reply_to_msg_id=reply_to_message_id or message_thread_id, # type: ignore[arg-type]
top_msg_id=message_thread_id if reply_to_message_id else None,
reply_to_peer_id=reply_to_peer,
quote_text=quote_text,
quote_entities=quote_entities,
)
return None