Remove as_copy from forward_messages (superseded by copy_message)
This commit is contained in:
parent
7325daf870
commit
c606f836d4
@ -30,8 +30,6 @@ class ForwardMessages(Scaffold):
|
|||||||
from_chat_id: Union[int, str],
|
from_chat_id: Union[int, str],
|
||||||
message_ids: Union[int, Iterable[int]],
|
message_ids: Union[int, Iterable[int]],
|
||||||
disable_notification: bool = None,
|
disable_notification: bool = None,
|
||||||
as_copy: bool = False,
|
|
||||||
remove_caption: bool = False,
|
|
||||||
schedule_date: int = None
|
schedule_date: int = None
|
||||||
) -> List["types.Message"]:
|
) -> List["types.Message"]:
|
||||||
"""Forward messages of any kind.
|
"""Forward messages of any kind.
|
||||||
@ -47,7 +45,7 @@ class ForwardMessages(Scaffold):
|
|||||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||||
For a contact that exists in your Telegram address book you can use his phone number (str).
|
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||||
|
|
||||||
message_ids (``iterable``):
|
message_ids (``int`` | List of ``int``):
|
||||||
A list of Message identifiers in the chat specified in *from_chat_id* or a single message id.
|
A list of Message identifiers in the chat specified in *from_chat_id* or a single message id.
|
||||||
Iterators and Generators are also accepted.
|
Iterators and Generators are also accepted.
|
||||||
|
|
||||||
@ -55,16 +53,6 @@ class ForwardMessages(Scaffold):
|
|||||||
Sends the message silently.
|
Sends the message silently.
|
||||||
Users will receive a notification with no sound.
|
Users will receive a notification with no sound.
|
||||||
|
|
||||||
as_copy (``bool``, *optional*):
|
|
||||||
Pass True to forward messages without the forward header (i.e.: send a copy of the message content so
|
|
||||||
that it appears as originally sent by you).
|
|
||||||
Defaults to False.
|
|
||||||
|
|
||||||
remove_caption (``bool``, *optional*):
|
|
||||||
If set to True and *as_copy* is enabled as well, media captions are not preserved when copying the
|
|
||||||
message. Has no effect if *as_copy* is not enabled.
|
|
||||||
Defaults to False.
|
|
||||||
|
|
||||||
schedule_date (``int``, *optional*):
|
schedule_date (``int``, *optional*):
|
||||||
Date when the message will be automatically sent. Unix time.
|
Date when the message will be automatically sent. Unix time.
|
||||||
|
|
||||||
@ -90,50 +78,31 @@ class ForwardMessages(Scaffold):
|
|||||||
is_iterable = not isinstance(message_ids, int)
|
is_iterable = not isinstance(message_ids, int)
|
||||||
message_ids = list(message_ids) if is_iterable else [message_ids]
|
message_ids = list(message_ids) if is_iterable else [message_ids]
|
||||||
|
|
||||||
if as_copy:
|
r = await self.send(
|
||||||
forwarded_messages = []
|
raw.functions.messages.ForwardMessages(
|
||||||
|
to_peer=await self.resolve_peer(chat_id),
|
||||||
for chunk in [message_ids[i:i + 200] for i in range(0, len(message_ids), 200)]:
|
from_peer=await self.resolve_peer(from_chat_id),
|
||||||
messages = await self.get_messages(chat_id=from_chat_id, message_ids=chunk)
|
id=message_ids,
|
||||||
|
silent=disable_notification or None,
|
||||||
for message in messages:
|
random_id=[self.rnd_id() for _ in message_ids],
|
||||||
forwarded_messages.append(
|
schedule_date=schedule_date
|
||||||
await message.forward(
|
|
||||||
chat_id,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
as_copy=True,
|
|
||||||
remove_caption=remove_caption,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return types.List(forwarded_messages) if is_iterable else forwarded_messages[0]
|
|
||||||
else:
|
|
||||||
r = await self.send(
|
|
||||||
raw.functions.messages.ForwardMessages(
|
|
||||||
to_peer=await self.resolve_peer(chat_id),
|
|
||||||
from_peer=await self.resolve_peer(from_chat_id),
|
|
||||||
id=message_ids,
|
|
||||||
silent=disable_notification or None,
|
|
||||||
random_id=[self.rnd_id() for _ in message_ids],
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
forwarded_messages = []
|
forwarded_messages = []
|
||||||
|
|
||||||
users = {i.id: i for i in r.users}
|
users = {i.id: i for i in r.users}
|
||||||
chats = {i.id: i for i in r.chats}
|
chats = {i.id: i for i in r.chats}
|
||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (raw.types.UpdateNewMessage,
|
if isinstance(i, (raw.types.UpdateNewMessage,
|
||||||
raw.types.UpdateNewChannelMessage,
|
raw.types.UpdateNewChannelMessage,
|
||||||
raw.types.UpdateNewScheduledMessage)):
|
raw.types.UpdateNewScheduledMessage)):
|
||||||
forwarded_messages.append(
|
forwarded_messages.append(
|
||||||
await types.Message._parse(
|
await types.Message._parse(
|
||||||
self, i.message,
|
self, i.message,
|
||||||
users, chats
|
users, chats
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return types.List(forwarded_messages) if is_iterable else forwarded_messages[0]
|
return types.List(forwarded_messages) if is_iterable else forwarded_messages[0]
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from functools import partial
|
|
||||||
from typing import List, Match, Union, BinaryIO
|
from typing import List, Match, Union, BinaryIO
|
||||||
|
|
||||||
import pyrogram
|
import pyrogram
|
||||||
@ -2706,8 +2705,6 @@ class Message(Object, Update):
|
|||||||
self,
|
self,
|
||||||
chat_id: int or str,
|
chat_id: int or str,
|
||||||
disable_notification: bool = None,
|
disable_notification: bool = None,
|
||||||
as_copy: bool = False,
|
|
||||||
remove_caption: bool = False,
|
|
||||||
schedule_date: int = None
|
schedule_date: int = None
|
||||||
) -> Union["types.Message", List["types.Message"]]:
|
) -> Union["types.Message", List["types.Message"]]:
|
||||||
"""Bound method *forward* of :obj:`~pyrogram.types.Message`.
|
"""Bound method *forward* of :obj:`~pyrogram.types.Message`.
|
||||||
@ -2737,15 +2734,6 @@ class Message(Object, Update):
|
|||||||
Sends the message silently.
|
Sends the message silently.
|
||||||
Users will receive a notification with no sound.
|
Users will receive a notification with no sound.
|
||||||
|
|
||||||
as_copy (``bool``, *optional*):
|
|
||||||
Pass True to forward messages without the forward header (i.e.: send a copy of the message content).
|
|
||||||
Defaults to False.
|
|
||||||
|
|
||||||
remove_caption (``bool``, *optional*):
|
|
||||||
If set to True and *as_copy* is enabled as well, media captions are not preserved when copying the
|
|
||||||
message. Has no effect if *as_copy* is not enabled.
|
|
||||||
Defaults to False.
|
|
||||||
|
|
||||||
schedule_date (``int``, *optional*):
|
schedule_date (``int``, *optional*):
|
||||||
Date when the message will be automatically sent. Unix time.
|
Date when the message will be automatically sent. Unix time.
|
||||||
|
|
||||||
@ -2755,109 +2743,13 @@ class Message(Object, Update):
|
|||||||
Raises:
|
Raises:
|
||||||
RPCError: In case of a Telegram RPC error.
|
RPCError: In case of a Telegram RPC error.
|
||||||
"""
|
"""
|
||||||
if as_copy:
|
return await self._client.forward_messages(
|
||||||
if self.service:
|
chat_id=chat_id,
|
||||||
log.warning(f"Service messages cannot be copied. "
|
from_chat_id=self.chat.id,
|
||||||
f"chat_id: {self.chat.id}, message_id: {self.message_id}")
|
message_ids=self.message_id,
|
||||||
elif self.game and not await self._client.storage.is_bot():
|
disable_notification=disable_notification,
|
||||||
log.warning(f"Users cannot send messages with Game media type. "
|
schedule_date=schedule_date
|
||||||
f"chat_id: {self.chat.id}, message_id: {self.message_id}")
|
)
|
||||||
elif self.text:
|
|
||||||
return await self._client.send_message(
|
|
||||||
chat_id,
|
|
||||||
text=self.text.html,
|
|
||||||
parse_mode="html",
|
|
||||||
disable_web_page_preview=not self.web_page,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
elif self.media:
|
|
||||||
caption = self.caption.html if self.caption and not remove_caption else ""
|
|
||||||
|
|
||||||
send_media = partial(
|
|
||||||
self._client.send_cached_media,
|
|
||||||
chat_id=chat_id,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.photo:
|
|
||||||
file_id = self.photo.file_id
|
|
||||||
elif self.audio:
|
|
||||||
file_id = self.audio.file_id
|
|
||||||
elif self.document:
|
|
||||||
file_id = self.document.file_id
|
|
||||||
elif self.video:
|
|
||||||
file_id = self.video.file_id
|
|
||||||
elif self.animation:
|
|
||||||
file_id = self.animation.file_id
|
|
||||||
elif self.voice:
|
|
||||||
file_id = self.voice.file_id
|
|
||||||
elif self.sticker:
|
|
||||||
file_id = self.sticker.file_id
|
|
||||||
elif self.video_note:
|
|
||||||
file_id = self.video_note.file_id
|
|
||||||
elif self.contact:
|
|
||||||
return await self._client.send_contact(
|
|
||||||
chat_id,
|
|
||||||
phone_number=self.contact.phone_number,
|
|
||||||
first_name=self.contact.first_name,
|
|
||||||
last_name=self.contact.last_name,
|
|
||||||
vcard=self.contact.vcard,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
elif self.location:
|
|
||||||
return await self._client.send_location(
|
|
||||||
chat_id,
|
|
||||||
latitude=self.location.latitude,
|
|
||||||
longitude=self.location.longitude,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
elif self.venue:
|
|
||||||
return await self._client.send_venue(
|
|
||||||
chat_id,
|
|
||||||
latitude=self.venue.location.latitude,
|
|
||||||
longitude=self.venue.location.longitude,
|
|
||||||
title=self.venue.title,
|
|
||||||
address=self.venue.address,
|
|
||||||
foursquare_id=self.venue.foursquare_id,
|
|
||||||
foursquare_type=self.venue.foursquare_type,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
elif self.poll:
|
|
||||||
return await self._client.send_poll(
|
|
||||||
chat_id,
|
|
||||||
question=self.poll.question,
|
|
||||||
options=[opt.text for opt in self.poll.options],
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
elif self.game:
|
|
||||||
return await self._client.send_game(
|
|
||||||
chat_id,
|
|
||||||
game_short_name=self.game.short_name,
|
|
||||||
disable_notification=disable_notification
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
raise ValueError("Unknown media type")
|
|
||||||
|
|
||||||
if self.sticker or self.video_note: # Sticker and VideoNote should have no caption
|
|
||||||
return await send_media(file_id=file_id)
|
|
||||||
else:
|
|
||||||
return await send_media(file_id=file_id, caption=caption, parse_mode="html")
|
|
||||||
else:
|
|
||||||
raise ValueError("Can't copy this message")
|
|
||||||
else:
|
|
||||||
return await self._client.forward_messages(
|
|
||||||
chat_id=chat_id,
|
|
||||||
from_chat_id=self.chat.id,
|
|
||||||
message_ids=self.message_id,
|
|
||||||
disable_notification=disable_notification,
|
|
||||||
schedule_date=schedule_date
|
|
||||||
)
|
|
||||||
|
|
||||||
async def delete(self, revoke: bool = True):
|
async def delete(self, revoke: bool = True):
|
||||||
"""Bound method *delete* of :obj:`~pyrogram.types.Message`.
|
"""Bound method *delete* of :obj:`~pyrogram.types.Message`.
|
||||||
|
Loading…
Reference in New Issue
Block a user