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="", message="",
silent=disable_notification or None, 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(), random_id=self.rnd_id(),
noforwards=protect_content, noforwards=protect_content,
reply_markup=await reply_markup.write(self) if reply_markup else None 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 # You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from typing import Union from typing import Union, List, Optional
import pyrogram import pyrogram
from pyrogram import raw from pyrogram import raw, enums, types
from pyrogram import utils from pyrogram import utils
@ -31,7 +31,10 @@ class SendInlineBotResult:
result_id: str, result_id: str,
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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": ) -> "raw.base.Updates":
"""Send an inline bot result. """Send an inline bot result.
Bot results can be retrieved using :meth:`~pyrogram.Client.get_inline_bot_results` 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*): reply_to_message_id (``bool``, *optional*):
If the message is a reply, ID of the original message. 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: Returns:
:obj:`~pyrogram.raw.base.Updates`: Currently, on success, a raw result is returned. :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) 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( return await self.invoke(
raw.functions.messages.SendInlineBotResult( raw.functions.messages.SendInlineBotResult(
peer=await self.resolve_peer(chat_id), peer=await self.resolve_peer(chat_id),
@ -76,6 +91,11 @@ class SendInlineBotResult:
id=result_id, id=result_id,
random_id=self.rnd_id(), random_id=self.rnd_id(),
silent=disable_notification or None, 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, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -127,6 +129,12 @@ class SendAnimation:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -240,7 +250,14 @@ class SendAnimation:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

@ -47,6 +47,8 @@ class SendAudio:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -120,6 +122,12 @@ class SendAudio:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -227,7 +237,14 @@ class SendAudio:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

@ -20,8 +20,7 @@ from datetime import datetime
from typing import Union, List, Optional from typing import Union, List, Optional
import pyrogram import pyrogram
from pyrogram import raw, enums from pyrogram import raw, enums, types
from pyrogram import types
from pyrogram import utils from pyrogram import utils
@ -37,6 +36,8 @@ class SendCachedMedia:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
invert_media: bool = None, invert_media: bool = None,
@ -89,6 +90,12 @@ class SendCachedMedia:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. Date when the message will be automatically sent.
@ -110,6 +117,8 @@ class SendCachedMedia:
await app.send_cached_media("me", file_id) 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) peer = await self.resolve_peer(chat_id)
r = await self.invoke( r = await self.invoke(
raw.functions.messages.SendMedia( raw.functions.messages.SendMedia(
@ -117,7 +126,14 @@ class SendCachedMedia:
media=utils.get_input_media_from_file_id(file_id), media=utils.get_input_media_from_file_id(file_id),
silent=disable_notification or None, silent=disable_notification or None,
invert_media=invert_media, 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

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

View File

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

View File

@ -45,6 +45,8 @@ class SendDocument:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -112,6 +114,12 @@ class SendDocument:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -205,7 +215,14 @@ class SendDocument:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

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

View File

@ -20,12 +20,13 @@ import logging
import os import os
import re import re
from datetime import datetime from datetime import datetime
from typing import Union, List from typing import Union, List, Optional
import pyrogram import pyrogram
from pyrogram import raw from pyrogram import raw
from pyrogram import types from pyrogram import types
from pyrogram import utils from pyrogram import utils
from pyrogram import enums
from pyrogram.file_id import FileType from pyrogram.file_id import FileType
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -46,6 +47,9 @@ class SendMediaGroup:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_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, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
invert_media: bool = None, invert_media: bool = None,
@ -77,6 +81,16 @@ class SendMediaGroup:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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) peer = await self.resolve_peer(chat_id)
r = await self.invoke( r = await self.invoke(
raw.functions.messages.SendMultiMedia( raw.functions.messages.SendMultiMedia(
peer=peer, peer=peer,
multi_media=multi_media, multi_media=multi_media,
silent=disable_notification 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,
),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,
invert_media=invert_media invert_media=invert_media

View File

@ -36,6 +36,8 @@ class SendMessage:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -82,6 +84,12 @@ class SendMessage:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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() 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) peer = await self.resolve_peer(chat_id)
r = await self.invoke( r = await self.invoke(
@ -138,7 +147,14 @@ class SendMessage:
peer=peer, peer=peer,
no_webpage=disable_web_page_preview or None, no_webpage=disable_web_page_preview or None,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
reply_markup=await reply_markup.write(self) if reply_markup else None, 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, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -103,6 +105,12 @@ class SendPhoto:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. Date when the message will be automatically sent.
@ -181,6 +189,8 @@ class SendPhoto:
spoiler=has_spoiler spoiler=has_spoiler
) )
quote_text, quote_entities = (await utils.parse_text_entities(self, quote_text, parse_mode, quote_entities)).values()
while True: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -189,7 +199,14 @@ class SendPhoto:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

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

View File

@ -19,13 +19,14 @@
import os import os
import re import re
from datetime import datetime from datetime import datetime
from typing import Union, BinaryIO, Optional, Callable from typing import Union, BinaryIO, Optional, Callable, List
import pyrogram import pyrogram
from pyrogram import StopTransmission from pyrogram import StopTransmission
from pyrogram import raw from pyrogram import raw
from pyrogram import types from pyrogram import types
from pyrogram import utils from pyrogram import utils
from pyrogram import enums
from pyrogram.errors import FilePartMissing from pyrogram.errors import FilePartMissing
from pyrogram.file_id import FileType from pyrogram.file_id import FileType
@ -39,6 +40,9 @@ class SendSticker:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_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, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -81,6 +85,16 @@ class SendSticker:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -164,7 +180,14 @@ class SendSticker:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

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

View File

@ -50,6 +50,8 @@ class SendVideo:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -133,6 +135,12 @@ class SendVideo:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -246,7 +256,14 @@ class SendVideo:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

@ -18,13 +18,14 @@
import os import os
from datetime import datetime from datetime import datetime
from typing import Union, BinaryIO, Optional, Callable from typing import Union, BinaryIO, Optional, Callable, List
import pyrogram import pyrogram
from pyrogram import StopTransmission from pyrogram import StopTransmission
from pyrogram import raw from pyrogram import raw
from pyrogram import types from pyrogram import types
from pyrogram import utils from pyrogram import utils
from pyrogram import enums
from pyrogram.errors import FilePartMissing from pyrogram.errors import FilePartMissing
from pyrogram.file_id import FileType from pyrogram.file_id import FileType
@ -41,6 +42,9 @@ class SendVideoNote:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_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, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -95,6 +99,16 @@ class SendVideoNote:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -188,7 +204,14 @@ class SendVideoNote:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

@ -43,6 +43,8 @@ class SendVoice:
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
reply_to_story_id: int = None, reply_to_story_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup: Union[ reply_markup: Union[
@ -98,6 +100,11 @@ class SendVoice:
reply_to_story_id (``int``, *optional*): reply_to_story_id (``int``, *optional*):
Unique identifier for the target story. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. 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: while True:
try: try:
peer = await self.resolve_peer(chat_id) peer = await self.resolve_peer(chat_id)
@ -189,7 +198,14 @@ class SendVoice:
peer=peer, peer=peer,
media=media, media=media,
silent=disable_notification 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(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
noforwards=protect_content, noforwards=protect_content,

View File

@ -83,7 +83,9 @@ class ForwardStory:
random_id=self.rnd_id(), random_id=self.rnd_id(),
schedule_date=utils.datetime_to_timestamp(schedule_date), schedule_date=utils.datetime_to_timestamp(schedule_date),
message="", 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 *text.html* to get the marked up message text. In case there is no entity, the fields
will contain the same text as *text*. 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*): entities (List of :obj:`~pyrogram.types.MessageEntity`, *optional*):
For text messages, special entities like usernames, URLs, bot commands, etc. that appear in the text. 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 For messages with a caption, special entities like usernames, URLs, bot commands, etc. that appear
in the caption. 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*): audio (:obj:`~pyrogram.types.Audio`, *optional*):
Message is an audio file, information about the file. 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). 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. 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*): matches (List of regex Matches, *optional*):
A list containing all `Match Objects <https://docs.python.org/3/library/re.html#match-objects>`_ that match 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>`. 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_protected_content: bool = None,
has_media_spoiler: bool = None, has_media_spoiler: bool = None,
text: Str = None, text: Str = None,
quote_text: Str = None,
entities: List["types.MessageEntity"] = None, entities: List["types.MessageEntity"] = None,
caption_entities: List["types.MessageEntity"] = None, caption_entities: List["types.MessageEntity"] = None,
quote_entities: List["types.MessageEntity"] = None,
audio: "types.Audio" = None, audio: "types.Audio" = None,
document: "types.Document" = None, document: "types.Document" = None,
photo: "types.Photo" = None, photo: "types.Photo" = None,
@ -422,6 +436,7 @@ class Message(Object, Update):
forwards: int = None, forwards: int = None,
via_bot: "types.User" = None, via_bot: "types.User" = None,
outgoing: bool = None, outgoing: bool = None,
quote: bool = None,
matches: List[Match] = None, matches: List[Match] = None,
command: List[str] = None, command: List[str] = None,
forum_topic_created: "types.ForumTopicCreated" = None, forum_topic_created: "types.ForumTopicCreated" = None,
@ -478,8 +493,10 @@ class Message(Object, Update):
self.has_protected_content = has_protected_content self.has_protected_content = has_protected_content
self.has_media_spoiler = has_media_spoiler self.has_media_spoiler = has_media_spoiler
self.text = text self.text = text
self.quote_text = quote_text
self.entities = entities self.entities = entities
self.caption_entities = caption_entities self.caption_entities = caption_entities
self.quote_entities = quote_entities
self.audio = audio self.audio = audio
self.document = document self.document = document
self.photo = photo self.photo = photo
@ -513,6 +530,7 @@ class Message(Object, Update):
self.forwards = forwards self.forwards = forwards
self.via_bot = via_bot self.via_bot = via_bot
self.outgoing = outgoing self.outgoing = outgoing
self.quote = quote
self.matches = matches self.matches = matches
self.command = command self.command = command
self.reply_markup = reply_markup self.reply_markup = reply_markup
@ -971,6 +989,21 @@ class Message(Object, Update):
except Exception: except Exception:
pass pass
else: 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_message_id = message.reply_to.reply_to_msg_id
parsed_message.reply_to_top_message_id = message.reply_to.reply_to_top_id parsed_message.reply_to_top_message_id = message.reply_to.reply_to_top_id
else: else:
@ -1058,6 +1091,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
protect_content: bool = None, protect_content: bool = None,
reply_markup=None reply_markup=None
@ -1110,6 +1145,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. Date when the message will be automatically sent.
@ -1141,6 +1182,8 @@ class Message(Object, Update):
disable_notification=disable_notification, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
schedule_date=schedule_date, schedule_date=schedule_date,
protect_content=protect_content, protect_content=protect_content,
reply_markup=reply_markup reply_markup=reply_markup
@ -1169,6 +1212,8 @@ class Message(Object, Update):
] = None, ] = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
progress: Callable = None, progress: Callable = None,
progress_args: tuple = () progress_args: tuple = ()
) -> "Message": ) -> "Message":
@ -1238,6 +1283,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -1311,6 +1364,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -1383,6 +1438,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -1451,6 +1514,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -1504,6 +1569,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup reply_markup=reply_markup
) )
@ -1579,6 +1652,9 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -1631,6 +1707,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
reply_markup=reply_markup reply_markup=reply_markup
) )
@ -1672,6 +1761,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
schedule_date: datetime = None, schedule_date: datetime = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
@ -1745,6 +1836,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. Date when the message will be automatically sent.
@ -1800,6 +1901,8 @@ class Message(Object, Update):
disable_notification=disable_notification, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
schedule_date=schedule_date, schedule_date=schedule_date,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
@ -1887,7 +1990,10 @@ class Message(Object, Update):
quote: bool = None, quote: bool = None,
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: 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": ) -> "Message":
"""Bound method *reply_inline_bot_result* of :obj:`~pyrogram.types.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*): reply_to_message_id (``bool``, *optional*):
If the message is a reply, ID of the original message. 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: Returns:
On success, the sent Message is returned. On success, the sent Message is returned.
@ -1946,7 +2062,10 @@ class Message(Object, Update):
result_id=result_id, result_id=result_id,
disable_notification=disable_notification, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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( async def reply_location(
@ -1957,6 +2076,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2003,6 +2124,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup reply_markup=reply_markup
) )
@ -2035,7 +2164,10 @@ class Message(Object, Update):
quote: bool = None, quote: bool = None,
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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"]: ) -> List["types.Message"]:
"""Bound method *reply_media_group* of :obj:`~pyrogram.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*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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: Returns:
On success, a :obj:`~pyrogram.types.Messages` object is returned containing all the On success, a :obj:`~pyrogram.types.Messages` object is returned containing all the
single messages sent. single messages sent.
@ -2092,7 +2234,10 @@ class Message(Object, Update):
media=media, media=media,
disable_notification=disable_notification, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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( async def reply_photo(
@ -2107,6 +2252,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2172,6 +2319,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -2247,6 +2402,9 @@ class Message(Object, Update):
protect_content: bool = None, protect_content: bool = None,
message_thread_id: int = 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,
schedule_date: datetime = None, schedule_date: datetime = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
@ -2337,6 +2495,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): schedule_date (:py:obj:`~datetime.datetime`, *optional*):
Date when the message will be automatically sent. Date when the message will be automatically sent.
@ -2374,6 +2542,9 @@ class Message(Object, Update):
protect_content=protect_content, protect_content=protect_content,
message_thread_id=message_thread_id, 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,
schedule_date=schedule_date, schedule_date=schedule_date,
reply_markup=reply_markup reply_markup=reply_markup
) )
@ -2385,6 +2556,9 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2432,6 +2606,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -2495,6 +2682,9 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2556,6 +2746,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
reply_markup=reply_markup reply_markup=reply_markup
) )
@ -2603,6 +2806,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2686,6 +2891,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message. 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -2757,6 +2970,9 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = 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,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2816,6 +3032,16 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args
@ -2881,6 +3110,8 @@ class Message(Object, Update):
disable_notification: bool = None, disable_notification: bool = None,
message_thread_id: int = None, message_thread_id: int = None,
reply_to_message_id: int = None, reply_to_message_id: int = None,
quote_text: str = None,
quote_entities: List["types.MessageEntity"] = None,
reply_markup: Union[ reply_markup: Union[
"types.InlineKeyboardMarkup", "types.InlineKeyboardMarkup",
"types.ReplyKeyboardMarkup", "types.ReplyKeyboardMarkup",
@ -2941,6 +3172,12 @@ class Message(Object, Update):
reply_to_message_id (``int``, *optional*): reply_to_message_id (``int``, *optional*):
If the message is a reply, ID of the original message 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*): 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, 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. 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, disable_notification=disable_notification,
message_thread_id=message_thread_id, 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,
quote_entities=quote_entities,
reply_markup=reply_markup, reply_markup=reply_markup,
progress=progress, progress=progress,
progress_args=progress_args progress_args=progress_args

View File

@ -288,16 +288,22 @@ def get_peer_type(peer_id: int) -> str:
def get_reply_to( def get_reply_to(
reply_to_message_id: Optional[int] = None, reply_to_message_id: Optional[int] = None,
message_thread_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 reply_to_story_id: Optional[int] = None
) -> Optional[Union[raw.types.InputReplyToMessage, raw.types.InputReplyToStory]]: ) -> Optional[Union[raw.types.InputReplyToMessage, raw.types.InputReplyToStory]]:
if all((user_id, reply_to_story_id)): """Get InputReply for reply_to argument"""
return raw.types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) # type: ignore[arg-type] 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)): if any((reply_to_message_id, message_thread_id)):
return raw.types.InputReplyToMessage( return raw.types.InputReplyToMessage(
reply_to_msg_id=reply_to_message_id or message_thread_id, # type: ignore[arg-type] 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, 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 return None