@@ -103,8 +103,25 @@ async def edit_message_media(
103103 if caption is not None :
104104 message , entities = (await utils .parse_text_entities (self , caption , parse_mode , caption_entities )).values ()
105105
106+ is_bytes_io = isinstance (media .media , io .BytesIO )
107+ is_uploaded_file = is_bytes_io or os .path .isfile (media .media )
108+
109+ is_external_url = not is_uploaded_file and re .match ("^https?://" , media .media )
110+
111+ if is_bytes_io and not hasattr (media .media , "name" ):
112+ media .media .name = "media"
113+
114+ if is_uploaded_file :
115+ filename_attribute = [
116+ raw .types .DocumentAttributeFilename (
117+ file_name = file_name or (media .media .name if is_bytes_io else os .path .basename (media .media ))
118+ )
119+ ]
120+ else :
121+ filename_attribute = []
122+
106123 if isinstance (media , types .InputMediaPhoto ):
107- if isinstance ( media . media , io . BytesIO ) or os . path . isfile ( media . media ) :
124+ if is_uploaded_file :
108125 uploaded_media = await self .invoke (
109126 raw .functions .messages .UploadMedia (
110127 business_connection_id = None , # TODO
@@ -124,15 +141,15 @@ async def edit_message_media(
124141 ),
125142 spoiler = media .has_spoiler
126143 )
127- elif re . match ( "^https?://" , media . media ) :
144+ elif is_external_url :
128145 media = raw .types .InputMediaPhotoExternal (
129146 url = media .media ,
130147 spoiler = media .has_spoiler
131148 )
132149 else :
133150 media = utils .get_input_media_from_file_id (media .media , FileType .PHOTO , has_spoiler = media .has_spoiler )
134151 elif isinstance (media , types .InputMediaVideo ):
135- if isinstance ( media . media , io . BytesIO ) or os . path . isfile ( media . media ) :
152+ if is_uploaded_file :
136153 uploaded_media = await self .invoke (
137154 raw .functions .messages .UploadMedia (
138155 business_connection_id = None , # TODO
@@ -149,10 +166,7 @@ async def edit_message_media(
149166 w = media .width ,
150167 h = media .height
151168 ),
152- raw .types .DocumentAttributeFilename (
153- file_name = file_name or os .path .basename (media .media )
154- )
155- ],
169+ ] + filename_attribute ,
156170 nosound_video = not media .disable_content_type_detection ,
157171 force_file = media .disable_content_type_detection or None ,
158172 )
@@ -167,15 +181,15 @@ async def edit_message_media(
167181 ),
168182 spoiler = media .has_spoiler
169183 )
170- elif re . match ( "^https?://" , media . media ) :
184+ elif is_external_url :
171185 media = raw .types .InputMediaDocumentExternal (
172186 url = media .media ,
173187 spoiler = media .has_spoiler
174188 )
175189 else :
176- media = utils .get_input_media_from_file_id (media .media , FileType .VIDEO )
190+ media = utils .get_input_media_from_file_id (media .media , FileType .VIDEO , has_spoiler = media . has_spoiler )
177191 elif isinstance (media , types .InputMediaAudio ):
178- if isinstance ( media . media , io . BytesIO ) or os . path . isfile ( media . media ) :
192+ if is_uploaded_file :
179193 media = await self .invoke (
180194 raw .functions .messages .UploadMedia (
181195 business_connection_id = None , # TODO
@@ -190,10 +204,7 @@ async def edit_message_media(
190204 performer = media .performer ,
191205 title = media .title
192206 ),
193- raw .types .DocumentAttributeFilename (
194- file_name = file_name or os .path .basename (media .media )
195- )
196- ]
207+ ] + filename_attribute ,
197208 )
198209 )
199210 )
@@ -205,14 +216,14 @@ async def edit_message_media(
205216 file_reference = media .document .file_reference
206217 )
207218 )
208- elif re . match ( "^https?://" , media . media ) :
219+ elif is_external_url :
209220 media = raw .types .InputMediaDocumentExternal (
210221 url = media .media
211222 )
212223 else :
213224 media = utils .get_input_media_from_file_id (media .media , FileType .AUDIO )
214225 elif isinstance (media , types .InputMediaAnimation ):
215- if isinstance ( media . media , io . BytesIO ) or os . path . isfile ( media . media ) :
226+ if is_uploaded_file :
216227 uploaded_media = await self .invoke (
217228 raw .functions .messages .UploadMedia (
218229 business_connection_id = None , # TODO
@@ -229,11 +240,8 @@ async def edit_message_media(
229240 w = media .width ,
230241 h = media .height
231242 ),
232- raw .types .DocumentAttributeFilename (
233- file_name = file_name or os .path .basename (media .media )
234- ),
235- raw .types .DocumentAttributeAnimated ()
236- ]
243+ raw .types .DocumentAttributeAnimated (),
244+ ] + filename_attribute ,
237245 )
238246 )
239247 )
@@ -246,15 +254,15 @@ async def edit_message_media(
246254 ),
247255 spoiler = media .has_spoiler
248256 )
249- elif re . match ( "^https?://" , media . media ) :
257+ elif is_external_url :
250258 media = raw .types .InputMediaDocumentExternal (
251259 url = media .media ,
252260 spoiler = media .has_spoiler
253261 )
254262 else :
255- media = utils .get_input_media_from_file_id (media .media , FileType .ANIMATION )
263+ media = utils .get_input_media_from_file_id (media .media , FileType .ANIMATION , has_spoiler = media . has_spoiler )
256264 elif isinstance (media , types .InputMediaDocument ):
257- if isinstance ( media . media , io . BytesIO ) or os . path . isfile ( media . media ) :
265+ if is_uploaded_file :
258266 media = await self .invoke (
259267 raw .functions .messages .UploadMedia (
260268 business_connection_id = None , # TODO
@@ -263,12 +271,8 @@ async def edit_message_media(
263271 mime_type = self .guess_mime_type (media .media ) or "application/zip" ,
264272 thumb = await self .save_file (media .thumb ),
265273 file = await self .save_file (media .media ),
266- attributes = [
267- raw .types .DocumentAttributeFilename (
268- file_name = file_name or os .path .basename (media .media )
269- )
270- ],
271- # force_file= #TODO
274+ attributes = filename_attribute ,
275+ force_file = True
272276 )
273277 )
274278 )
@@ -280,7 +284,7 @@ async def edit_message_media(
280284 file_reference = media .document .file_reference
281285 )
282286 )
283- elif re . match ( "^https?://" , media . media ) :
287+ elif is_external_url :
284288 media = raw .types .InputMediaDocumentExternal (
285289 url = media .media
286290 )
0 commit comments