22from enum import IntEnum
33from typing import Callable , List , Optional , Union
44
5- from .misc import MISSING , DictSerializerMixin , Overwrite , Snowflake
5+ from .misc import MISSING , DictSerializerMixin , File , Overwrite , Snowflake
66
77
88class ChannelType (IntEnum ):
@@ -199,7 +199,7 @@ async def send(
199199 content : Optional [str ] = MISSING ,
200200 * ,
201201 tts : Optional [bool ] = MISSING ,
202- # attachments : Optional[List[Any]] = None, # TODO: post-v4: Replace with own file type.
202+ files : Optional [Union [ File , List [File ]]] = MISSING ,
203203 embeds : Optional [Union ["Embed" , List ["Embed" ]]] = MISSING , # noqa
204204 allowed_mentions : Optional ["MessageInteraction" ] = MISSING , # noqa
205205 components : Optional [
@@ -220,6 +220,8 @@ async def send(
220220 :type content: Optional[str]
221221 :param tts?: Whether the message utilizes the text-to-speech Discord programme or not.
222222 :type tts: Optional[bool]
223+ :param files?: A file or list of files to be attached to the message.
224+ :type files: Optional[Union[File, List[File]]]
223225 :param embeds?: An embed, or list of embeds for the message.
224226 :type embeds: Optional[Union[Embed, List[Embed]]]
225227 :param allowed_mentions?: The message interactions/mention limits that the message can refer to.
@@ -251,18 +253,26 @@ async def send(
251253 else :
252254 _components = _build_components (components = components )
253255
254- # TODO: post-v4: Add attachments into Message obj.
256+ if not files or files is MISSING :
257+ _files = []
258+ elif isinstance (files , list ):
259+ _files = [file ._json_payload (id ) for id , file in enumerate (files )]
260+ else :
261+ _files = [files ._json_payload (0 )]
262+ files = [files ]
263+
255264 payload = Message (
256265 content = _content ,
257266 tts = _tts ,
258- # file=file,
259- # attachments=_attachments,
267+ attachments = _files ,
260268 embeds = _embeds ,
261269 allowed_mentions = _allowed_mentions ,
262270 components = _components ,
263271 )
264272
265- res = await self ._client .create_message (channel_id = int (self .id ), payload = payload ._json )
273+ res = await self ._client .create_message (
274+ channel_id = int (self .id ), payload = payload ._json , files = files
275+ )
266276 return Message (** res , _client = self ._client )
267277
268278 async def delete (self ) -> None :
0 commit comments