Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit e8bd639

Browse files
committed
Add media spoiler support for other relevant methods
- send_media_group() - edit_message_media() - edit_inline_media()
1 parent 50d87bf commit e8bd639

3 files changed

Lines changed: 91 additions & 67 deletions

File tree

pyrogram/methods/messages/edit_inline_media.py

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
import os
20-
import re
21-
import io
2219
import asyncio
2320
import io
21+
import os
22+
import re
2423

2524
import pyrogram
2625
from pyrogram import raw
@@ -80,8 +79,6 @@ async def edit_inline_media(
8079
caption = media.caption
8180
parse_mode = media.parse_mode
8281

83-
is_photo = isinstance(media, types.InputMediaPhoto)
84-
8582
is_bytes_io = isinstance(media.media, io.BytesIO)
8683
is_uploaded_file = is_bytes_io or os.path.isfile(media.media)
8784

@@ -99,15 +96,16 @@ async def edit_inline_media(
9996
else:
10097
filename_attribute = []
10198

102-
103-
if is_photo:
99+
if isinstance(media, types.InputMediaPhoto):
104100
if is_uploaded_file:
105101
media = raw.types.InputMediaUploadedPhoto(
106-
file=await self.save_file(media.media)
102+
file=await self.save_file(media.media),
103+
spoiler=media.has_spoiler
107104
)
108105
elif is_external_url:
109106
media = raw.types.InputMediaPhotoExternal(
110-
url=media.media
107+
url=media.media,
108+
spoiler=media.has_spoiler
111109
)
112110
else:
113111
media = utils.get_input_media_from_file_id(media.media, FileType.PHOTO)
@@ -117,18 +115,20 @@ async def edit_inline_media(
117115
mime_type=(None if is_bytes_io else self.guess_mime_type(media.media)) or "video/mp4",
118116
thumb=await self.save_file(media.thumb),
119117
file=await self.save_file(media.media),
118+
spoiler=media.has_spoiler,
120119
attributes=[
121-
raw.types.DocumentAttributeVideo(
122-
supports_streaming=media.supports_streaming or None,
123-
duration=media.duration,
124-
w=media.width,
125-
h=media.height
126-
)
127-
] + filename_attribute
120+
raw.types.DocumentAttributeVideo(
121+
supports_streaming=media.supports_streaming or None,
122+
duration=media.duration,
123+
w=media.width,
124+
h=media.height
125+
)
126+
] + filename_attribute
128127
)
129128
elif is_external_url:
130129
media = raw.types.InputMediaDocumentExternal(
131-
url=media.media
130+
url=media.media,
131+
spoiler=media.has_spoiler
132132
)
133133
else:
134134
media = utils.get_input_media_from_file_id(media.media, FileType.VIDEO)
@@ -139,12 +139,12 @@ async def edit_inline_media(
139139
thumb=await self.save_file(media.thumb),
140140
file=await self.save_file(media.media),
141141
attributes=[
142-
raw.types.DocumentAttributeAudio(
143-
duration=media.duration,
144-
performer=media.performer,
145-
title=media.title
146-
)
147-
] + filename_attribute
142+
raw.types.DocumentAttributeAudio(
143+
duration=media.duration,
144+
performer=media.performer,
145+
title=media.title
146+
)
147+
] + filename_attribute
148148
)
149149
elif is_external_url:
150150
media = raw.types.InputMediaDocumentExternal(
@@ -158,20 +158,22 @@ async def edit_inline_media(
158158
mime_type=(None if is_bytes_io else self.guess_mime_type(media.media)) or "video/mp4",
159159
thumb=await self.save_file(media.thumb),
160160
file=await self.save_file(media.media),
161+
spoiler=media.has_spoiler,
161162
attributes=[
162-
raw.types.DocumentAttributeVideo(
163-
supports_streaming=True,
164-
duration=media.duration,
165-
w=media.width,
166-
h=media.height
167-
),
168-
raw.types.DocumentAttributeAnimated()
169-
] + filename_attribute,
163+
raw.types.DocumentAttributeVideo(
164+
supports_streaming=True,
165+
duration=media.duration,
166+
w=media.width,
167+
h=media.height
168+
),
169+
raw.types.DocumentAttributeAnimated()
170+
] + filename_attribute,
170171
nosound_video=True
171172
)
172173
elif is_external_url:
173174
media = raw.types.InputMediaDocumentExternal(
174-
url=media.media
175+
url=media.media,
176+
spoiler=media.has_spoiler
175177
)
176178
else:
177179
media = utils.get_input_media_from_file_id(media.media, FileType.ANIMATION)
@@ -196,7 +198,6 @@ async def edit_inline_media(
196198

197199
session = await get_session(self, dc_id)
198200

199-
200201
if is_uploaded_file:
201202
uploaded_media = await self.invoke(
202203
raw.functions.messages.UploadMedia(
@@ -210,13 +211,15 @@ async def edit_inline_media(
210211
id=uploaded_media.photo.id,
211212
access_hash=uploaded_media.photo.access_hash,
212213
file_reference=uploaded_media.photo.file_reference
213-
)
214-
) if is_photo else raw.types.InputMediaDocument(
214+
),
215+
spoiler=getattr(media, "has_spoiler", None)
216+
) if isinstance(media, types.InputMediaPhoto) else raw.types.InputMediaDocument(
215217
id=raw.types.InputDocument(
216218
id=uploaded_media.document.id,
217219
access_hash=uploaded_media.document.access_hash,
218-
file_reference=uploaded_media.document.file_reference
219-
)
220+
file_reference=uploaded_media.document.file_reference
221+
),
222+
spoiler=getattr(media, "has_spoiler", None)
220223
)
221224
else:
222225
actual_media = media

pyrogram/methods/messages/edit_message_media.py

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19+
import io
1920
import os
2021
import re
21-
import io
2222
from typing import Union
2323

2424
import pyrogram
@@ -93,36 +93,40 @@ async def edit_message_media(
9393

9494
if isinstance(media, types.InputMediaPhoto):
9595
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
96-
media = await self.invoke(
96+
uploaded_media = await self.invoke(
9797
raw.functions.messages.UploadMedia(
9898
peer=await self.resolve_peer(chat_id),
9999
media=raw.types.InputMediaUploadedPhoto(
100-
file=await self.save_file(media.media)
100+
file=await self.save_file(media.media),
101+
spoiler=media.has_spoiler
101102
)
102103
)
103104
)
104105

105106
media = raw.types.InputMediaPhoto(
106107
id=raw.types.InputPhoto(
107-
id=media.photo.id,
108-
access_hash=media.photo.access_hash,
109-
file_reference=media.photo.file_reference
110-
)
108+
id=uploaded_media.photo.id,
109+
access_hash=uploaded_media.photo.access_hash,
110+
file_reference=uploaded_media.photo.file_reference
111+
),
112+
spoiler=media.has_spoiler
111113
)
112114
elif re.match("^https?://", media.media):
113115
media = raw.types.InputMediaPhotoExternal(
114-
url=media.media
116+
url=media.media,
117+
spoiler=media.has_spoiler
115118
)
116119
else:
117120
media = utils.get_input_media_from_file_id(media.media, FileType.PHOTO)
118121
elif isinstance(media, types.InputMediaVideo):
119122
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
120-
media = await self.invoke(
123+
uploaded_media = await self.invoke(
121124
raw.functions.messages.UploadMedia(
122125
peer=await self.resolve_peer(chat_id),
123126
media=raw.types.InputMediaUploadedDocument(
124127
mime_type=self.guess_mime_type(media.media) or "video/mp4",
125128
thumb=await self.save_file(media.thumb),
129+
spoiler=media.has_spoiler,
126130
file=await self.save_file(media.media),
127131
attributes=[
128132
raw.types.DocumentAttributeVideo(
@@ -141,14 +145,16 @@ async def edit_message_media(
141145

142146
media = raw.types.InputMediaDocument(
143147
id=raw.types.InputDocument(
144-
id=media.document.id,
145-
access_hash=media.document.access_hash,
146-
file_reference=media.document.file_reference
147-
)
148+
id=uploaded_media.document.id,
149+
access_hash=uploaded_media.document.access_hash,
150+
file_reference=uploaded_media.document.file_reference
151+
),
152+
spoiler=media.has_spoiler
148153
)
149154
elif re.match("^https?://", media.media):
150155
media = raw.types.InputMediaDocumentExternal(
151-
url=media.media
156+
url=media.media,
157+
spoiler=media.has_spoiler
152158
)
153159
else:
154160
media = utils.get_input_media_from_file_id(media.media, FileType.VIDEO)
@@ -190,12 +196,13 @@ async def edit_message_media(
190196
media = utils.get_input_media_from_file_id(media.media, FileType.AUDIO)
191197
elif isinstance(media, types.InputMediaAnimation):
192198
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
193-
media = await self.invoke(
199+
uploaded_media = await self.invoke(
194200
raw.functions.messages.UploadMedia(
195201
peer=await self.resolve_peer(chat_id),
196202
media=raw.types.InputMediaUploadedDocument(
197203
mime_type=self.guess_mime_type(media.media) or "video/mp4",
198204
thumb=await self.save_file(media.thumb),
205+
spoiler=media.has_spoiler,
199206
file=await self.save_file(media.media),
200207
attributes=[
201208
raw.types.DocumentAttributeVideo(
@@ -215,14 +222,16 @@ async def edit_message_media(
215222

216223
media = raw.types.InputMediaDocument(
217224
id=raw.types.InputDocument(
218-
id=media.document.id,
219-
access_hash=media.document.access_hash,
220-
file_reference=media.document.file_reference
221-
)
225+
id=uploaded_media.document.id,
226+
access_hash=uploaded_media.document.access_hash,
227+
file_reference=uploaded_media.document.file_reference
228+
),
229+
spoiler=media.has_spoiler
222230
)
223231
elif re.match("^https?://", media.media):
224232
media = raw.types.InputMediaDocumentExternal(
225-
url=media.media
233+
url=media.media,
234+
spoiler=media.has_spoiler
226235
)
227236
else:
228237
media = utils.get_input_media_from_file_id(media.media, FileType.ANIMATION)

pyrogram/methods/messages/send_media_group.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ async def send_media_group(
100100
raw.functions.messages.UploadMedia(
101101
peer=await self.resolve_peer(chat_id),
102102
media=raw.types.InputMediaUploadedPhoto(
103-
file=await self.save_file(i.media)
103+
file=await self.save_file(i.media),
104+
spoiler=i.has_spoiler
104105
)
105106
)
106107
)
@@ -110,14 +111,16 @@ async def send_media_group(
110111
id=media.photo.id,
111112
access_hash=media.photo.access_hash,
112113
file_reference=media.photo.file_reference
113-
)
114+
),
115+
spoiler=i.has_spoiler
114116
)
115117
elif re.match("^https?://", i.media):
116118
media = await self.invoke(
117119
raw.functions.messages.UploadMedia(
118120
peer=await self.resolve_peer(chat_id),
119121
media=raw.types.InputMediaPhotoExternal(
120-
url=i.media
122+
url=i.media,
123+
spoiler=i.has_spoiler
121124
)
122125
)
123126
)
@@ -127,7 +130,8 @@ async def send_media_group(
127130
id=media.photo.id,
128131
access_hash=media.photo.access_hash,
129132
file_reference=media.photo.file_reference
130-
)
133+
),
134+
spoiler=i.has_spoiler
131135
)
132136
else:
133137
media = utils.get_input_media_from_file_id(i.media, FileType.PHOTO)
@@ -136,7 +140,8 @@ async def send_media_group(
136140
raw.functions.messages.UploadMedia(
137141
peer=await self.resolve_peer(chat_id),
138142
media=raw.types.InputMediaUploadedPhoto(
139-
file=await self.save_file(i.media)
143+
file=await self.save_file(i.media),
144+
spoiler=i.has_spoiler
140145
)
141146
)
142147
)
@@ -146,7 +151,8 @@ async def send_media_group(
146151
id=media.photo.id,
147152
access_hash=media.photo.access_hash,
148153
file_reference=media.photo.file_reference
149-
)
154+
),
155+
spoiler=i.has_spoiler
150156
)
151157
elif isinstance(i, types.InputMediaVideo):
152158
if isinstance(i.media, str):
@@ -157,6 +163,7 @@ async def send_media_group(
157163
media=raw.types.InputMediaUploadedDocument(
158164
file=await self.save_file(i.media),
159165
thumb=await self.save_file(i.thumb),
166+
spoiler=i.has_spoiler,
160167
mime_type=self.guess_mime_type(i.media) or "video/mp4",
161168
attributes=[
162169
raw.types.DocumentAttributeVideo(
@@ -176,14 +183,16 @@ async def send_media_group(
176183
id=media.document.id,
177184
access_hash=media.document.access_hash,
178185
file_reference=media.document.file_reference
179-
)
186+
),
187+
spoiler=i.has_spoiler
180188
)
181189
elif re.match("^https?://", i.media):
182190
media = await self.invoke(
183191
raw.functions.messages.UploadMedia(
184192
peer=await self.resolve_peer(chat_id),
185193
media=raw.types.InputMediaDocumentExternal(
186-
url=i.media
194+
url=i.media,
195+
spoiler=i.has_spoiler
187196
)
188197
)
189198
)
@@ -193,7 +202,8 @@ async def send_media_group(
193202
id=media.document.id,
194203
access_hash=media.document.access_hash,
195204
file_reference=media.document.file_reference
196-
)
205+
),
206+
spoiler=i.has_spoiler
197207
)
198208
else:
199209
media = utils.get_input_media_from_file_id(i.media, FileType.VIDEO)
@@ -204,6 +214,7 @@ async def send_media_group(
204214
media=raw.types.InputMediaUploadedDocument(
205215
file=await self.save_file(i.media),
206216
thumb=await self.save_file(i.thumb),
217+
spoiler=i.has_spoiler,
207218
mime_type=self.guess_mime_type(getattr(i.media, "name", "video.mp4")) or "video/mp4",
208219
attributes=[
209220
raw.types.DocumentAttributeVideo(
@@ -223,7 +234,8 @@ async def send_media_group(
223234
id=media.document.id,
224235
access_hash=media.document.access_hash,
225236
file_reference=media.document.file_reference
226-
)
237+
),
238+
spoiler=i.has_spoiler
227239
)
228240
elif isinstance(i, types.InputMediaAudio):
229241
if isinstance(i.media, str):

0 commit comments

Comments
 (0)