@@ -284,39 +284,59 @@ def __init__(self, *, state, channel, data, _http: http.SlashCommandRequest, int
284284 self ._http = _http
285285 self .__interaction_token = interaction_token
286286
287+ async def _slash_edit (self , ** fields ):
288+ """
289+ An internal function
290+ """
291+ _resp = {}
292+
293+ content = fields .get ("content" )
294+ if content :
295+ _resp ["content" ] = str (content )
296+
297+ embed = fields .get ("embed" )
298+ embeds = fields .get ("embeds" )
299+ file = fields .get ("file" )
300+ files = fields .get ("files" )
301+
302+ if embed and embeds :
303+ raise error .IncorrectFormat ("You can't use both `embed` and `embeds`!" )
304+ if file and files :
305+ raise error .IncorrectFormat ("You can't use both `file` and `files`!" )
306+ if file :
307+ files = [file ]
308+ if embed :
309+ embeds = [embed ]
310+ if embeds :
311+ if not isinstance (embeds , list ):
312+ raise error .IncorrectFormat ("Provide a list of embeds." )
313+ elif len (embeds ) > 10 :
314+ raise error .IncorrectFormat ("Do not provide more than 10 embeds." )
315+ _resp ["embeds" ] = [x .to_dict () for x in embeds ]
316+
317+ allowed_mentions = fields .get ("allowed_mentions" )
318+ _resp ["allowed_mentions" ] = allowed_mentions .to_dict () if allowed_mentions else \
319+ self ._state .allowed_mentions .to_dict () if self ._state .allowed_mentions else {}
320+
321+ await self ._http .edit (_resp , self .__interaction_token , self .id , files = files )
322+
323+ delete_after = fields .get ("delete_after" )
324+ if delete_after :
325+ await self .delete (delay = delete_after )
326+ if files :
327+ for file in files :
328+ file .close ()
329+
330+
287331 async def edit (self , ** fields ):
288332 """Refer :meth:`discord.Message.edit`."""
289- try :
290- await super ().edit (** fields )
291- except discord .Forbidden :
292- _resp = {}
293-
294- content = str (fields .get ("content" ))
295- if content :
296- _resp ["content" ] = str (content )
297-
298- embed = fields .get ("embed" )
299- embeds = fields .get ("embeds" )
300- if embed and embeds :
301- raise error .IncorrectFormat ("You can't use both `embed` and `embeds`!" )
302- if embed :
303- embeds = [embed ]
304- if embeds :
305- if not isinstance (embeds , list ):
306- raise error .IncorrectFormat ("Provide a list of embeds." )
307- elif len (embeds ) > 10 :
308- raise error .IncorrectFormat ("Do not provide more than 10 embeds." )
309- _resp ["embeds" ] = [x .to_dict () for x in embeds ]
310-
311- allowed_mentions = fields .get ("allowed_mentions" )
312- _resp ["allowed_mentions" ] = allowed_mentions .to_dict () if allowed_mentions else \
313- self ._state .allowed_mentions .to_dict () if self ._state .allowed_mentions else {}
314-
315- await self ._http .edit (_resp , self .__interaction_token , self .id )
316-
317- delete_after = fields .get ("delete_after" )
318- if delete_after :
319- await self .delete (delay = delete_after )
333+ if "file" in fields or "files" in fields :
334+ await self ._slash_edit (** fields )
335+ else :
336+ try :
337+ await super ().edit (** fields )
338+ except discord .Forbidden :
339+ await self ._slash_edit (** fields )
320340
321341 async def delete (self , * , delay = None ):
322342 """Refer :meth:`discord.Message.delete`."""
0 commit comments