Skip to content

Commit a2263ad

Browse files
committed
Make send_media_group return the new Messages object
1 parent 6109129 commit a2263ad

File tree

1 file changed

+76
-34
lines changed

1 file changed

+76
-34
lines changed

pyrogram/client/methods/messages/send_media_group.py

Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,30 @@
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

1919
import binascii
20+
import logging
2021
import mimetypes
2122
import os
2223
import struct
24+
import time
2325
from typing import Union, List
2426

2527
import pyrogram
2628
from pyrogram.api import functions, types
27-
from pyrogram.api.errors import FileIdInvalid
29+
from pyrogram.api.errors import FileIdInvalid, FloodWait
2830
from pyrogram.client.ext import BaseClient, utils
2931

32+
log = logging.getLogger(__name__)
33+
3034

3135
class SendMediaGroup(BaseClient):
3236
# TODO: Add progress parameter
33-
# TODO: Return new Message object
3437
# TODO: Figure out how to send albums using URLs
3538
def send_media_group(self,
3639
chat_id: Union[int, str],
3740
media: List[Union["pyrogram.InputMediaPhoto", "pyrogram.InputMediaVideo"]],
3841
disable_notification: bool = None,
3942
reply_to_message_id: int = None):
4043
"""Use this method to send a group of photos or videos as an album.
41-
On success, an Update containing the sent Messages is returned.
4244
4345
Args:
4446
chat_id (``int`` | ``str``):
@@ -57,6 +59,13 @@ def send_media_group(self,
5759
5860
reply_to_message_id (``int``, *optional*):
5961
If the message is a reply, ID of the original message.
62+
63+
Returns:
64+
On success, a :obj:`Messages <pyrogram.Messages>` object is returned containing all the
65+
single messages sent.
66+
67+
Raises:
68+
:class:`Error <pyrogram.Error>` in case of a Telegram RPC error.
6069
"""
6170
multi_media = []
6271

@@ -65,14 +74,21 @@ def send_media_group(self,
6574

6675
if isinstance(i, pyrogram.InputMediaPhoto):
6776
if os.path.exists(i.media):
68-
media = self.send(
69-
functions.messages.UploadMedia(
70-
peer=self.resolve_peer(chat_id),
71-
media=types.InputMediaUploadedPhoto(
72-
file=self.save_file(i.media)
77+
while True:
78+
try:
79+
media = self.send(
80+
functions.messages.UploadMedia(
81+
peer=self.resolve_peer(chat_id),
82+
media=types.InputMediaUploadedPhoto(
83+
file=self.save_file(i.media)
84+
)
85+
)
7386
)
74-
)
75-
)
87+
except FloodWait as e:
88+
log.warning("Sleeping for {}s".format(e.x))
89+
time.sleep(e.x)
90+
else:
91+
break
7692

7793
media = types.InputMediaPhoto(
7894
id=types.InputPhoto(
@@ -106,25 +122,32 @@ def send_media_group(self,
106122
)
107123
elif isinstance(i, pyrogram.InputMediaVideo):
108124
if os.path.exists(i.media):
109-
media = self.send(
110-
functions.messages.UploadMedia(
111-
peer=self.resolve_peer(chat_id),
112-
media=types.InputMediaUploadedDocument(
113-
file=self.save_file(i.media),
114-
thumb=None if i.thumb is None else self.save_file(i.thumb),
115-
mime_type=mimetypes.types_map[".mp4"],
116-
attributes=[
117-
types.DocumentAttributeVideo(
118-
supports_streaming=i.supports_streaming or None,
119-
duration=i.duration,
120-
w=i.width,
121-
h=i.height
122-
),
123-
types.DocumentAttributeFilename(os.path.basename(i.media))
124-
]
125+
while True:
126+
try:
127+
media = self.send(
128+
functions.messages.UploadMedia(
129+
peer=self.resolve_peer(chat_id),
130+
media=types.InputMediaUploadedDocument(
131+
file=self.save_file(i.media),
132+
thumb=None if i.thumb is None else self.save_file(i.thumb),
133+
mime_type=mimetypes.types_map[".mp4"],
134+
attributes=[
135+
types.DocumentAttributeVideo(
136+
supports_streaming=i.supports_streaming or None,
137+
duration=i.duration,
138+
w=i.width,
139+
h=i.height
140+
),
141+
types.DocumentAttributeFilename(os.path.basename(i.media))
142+
]
143+
)
144+
)
125145
)
126-
)
127-
)
146+
except FloodWait as e:
147+
log.warning("Sleeping for {}s".format(e.x))
148+
time.sleep(e.x)
149+
else:
150+
break
128151

129152
media = types.InputMediaDocument(
130153
id=types.InputDocument(
@@ -165,11 +188,30 @@ def send_media_group(self,
165188
)
166189
)
167190

168-
return self.send(
169-
functions.messages.SendMultiMedia(
170-
peer=self.resolve_peer(chat_id),
171-
multi_media=multi_media,
172-
silent=disable_notification or None,
173-
reply_to_msg_id=reply_to_message_id
191+
while True:
192+
try:
193+
r = self.send(
194+
functions.messages.SendMultiMedia(
195+
peer=self.resolve_peer(chat_id),
196+
multi_media=multi_media,
197+
silent=disable_notification or None,
198+
reply_to_msg_id=reply_to_message_id
199+
)
200+
)
201+
except FloodWait as e:
202+
log.warning("Sleeping for {}s".format(e.x))
203+
time.sleep(e.x)
204+
else:
205+
break
206+
207+
return pyrogram.Messages._parse(
208+
self,
209+
types.messages.Messages(
210+
messages=[m.message for m in filter(
211+
lambda u: isinstance(u, (types.UpdateNewMessage, types.UpdateNewChannelMessage)),
212+
r.updates
213+
)],
214+
users=r.users,
215+
chats=r.chats
174216
)
175217
)

0 commit comments

Comments
 (0)