code: async def save(self, fp, *, seek_begin=True, use_cached=False):
          
          url = self.proxy_url if use_cached else self.url
          data = await self._http.get_from_cdn(url)
          if isinstance(fp, io.IOBase) and fp.writable():
              written = fp.write(data)
              if seek_begin:
                  fp.seek(0)
              return written
          else:
              with open(fp, 'wb') as f:
                  return f.write(data)
docs: |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.