async def save(self, fp, *, seek_begin=True, use_cached=False):
url = self.proxy_url if use_cached else self.url<EOL>data = await self._http.get_from_cdn(url)<EOL>if isinstance(fp, io.IOBase) and fp.writable():<EOL><INDENT>written = fp.write(data)<EOL>if seek_begin:<EOL><INDENT>fp.seek(<NUM_LIT:0>)<EOL><DEDENT>return written<EOL><DEDENT>else:<EOL><INDENT>with open(fp, '<STR_LIT:wb>') as f:<EOL><INDENT>return f.write(data)<EOL><DEDENT><DEDENT>
|coro|

        Saves this attachment into a file-like object.

        Parameters
        -----------
        fp: Union[BinaryIO, :class:`os.PathLike`]
            The file-like object to save this attachment to or the filename
            to use. If a filename is passed then a file is created with that
            filename and used instead.
        seek_begin: :class:`bool`
            Whether to seek to the beginning of the file after saving is
            successfully done.
        use_cached: :class:`bool`
            Whether to use :attr:`proxy_url` rather than :attr:`url` when downloading
            the attachment. This will allow attachments to be saved after deletion
            more often, compared to the regular URL which is generally deleted right
            after the message is deleted. Note that this can still fail to download
            deleted attachments if too much time has passed and it does not work
            on some type of attachments.

        Raises
        --------
        HTTPException
            Saving the attachment failed.
        NotFound
            The attachment was deleted.

        Returns
        --------
        :class:`int`
            The number of bytes written.