async def send(self, content=None, *, tts=False, embed=None, file=None, files=None, delete_after=None, nonce=None):
channel = await self._get_channel()<EOL>state = self._state<EOL>content = str(content) if content is not None else None<EOL>if embed is not None:<EOL><INDENT>embed = embed.to_dict()<EOL><DEDENT>if file is not None and files is not None:<EOL><INDENT>raise InvalidArgument('<STR_LIT>')<EOL><DEDENT>if file is not None:<EOL><INDENT>if not isinstance(file, File):<EOL><INDENT>raise InvalidArgument('<STR_LIT>')<EOL><DEDENT>try:<EOL><INDENT>data = await state.http.send_files(channel.id, files=[file],<EOL>content=content, tts=tts, embed=embed, nonce=nonce)<EOL><DEDENT>finally:<EOL><INDENT>file.close()<EOL><DEDENT><DEDENT>elif files is not None:<EOL><INDENT>if len(files) > <NUM_LIT:10>:<EOL><INDENT>raise InvalidArgument('<STR_LIT>')<EOL><DEDENT>elif not all(isinstance(file, File) for file in files):<EOL><INDENT>raise InvalidArgument('<STR_LIT>')<EOL><DEDENT>try:<EOL><INDENT>data = await state.http.send_files(channel.id, files=files, content=content, tts=tts,<EOL>embed=embed, nonce=nonce)<EOL><DEDENT>finally:<EOL><INDENT>for f in files:<EOL><INDENT>f.close()<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, nonce=nonce)<EOL><DEDENT>ret = state.create_message(channel=channel, data=data)<EOL>if delete_after is not None:<EOL><INDENT>await ret.delete(delay=delete_after)<EOL><DEDENT>return ret<EOL>
|coro|

        Sends a message to the destination with the content given.

        The content must be a type that can convert to a string through ``str(content)``.
        If the content is set to ``None`` (the default), then the ``embed`` parameter must
        be provided.

        To upload a single file, the ``file`` parameter should be used with a
        single :class:`.File` object. To upload multiple files, the ``files``
        parameter should be used with a :class:`list` of :class:`.File` objects.
        **Specifying both parameters will lead to an exception**.

        If the ``embed`` parameter is provided, it must be of type :class:`.Embed` and
        it must be a rich embed type.

        Parameters
        ------------
        content
            The content of the message to send.
        tts: :class:`bool`
            Indicates if the message should be sent using text-to-speech.
        embed: :class:`.Embed`
            The rich embed for the content.
        file: :class:`.File`
            The file to upload.
        files: List[:class:`.File`]
            A list of files to upload. Must be a maximum of 10.
        nonce: :class:`int`
            The nonce to use for sending this message. If the message was successfully sent,
            then the message will have a nonce with this value.
        delete_after: :class:`float`
            If provided, the number of seconds to wait in the background
            before deleting the message we just sent. If the deletion fails,
            then it is silently ignored.

        Raises
        --------
        :exc:`.HTTPException`
            Sending the message failed.
        :exc:`.Forbidden`
            You do not have the proper permissions to send the message.
        :exc:`.InvalidArgument`
            The ``files`` list is not of the appropriate size or
            you specified both ``file`` and ``files``.

        Returns
        ---------
        :class:`.Message`
            The message that was sent.