# Buggy code
async def save(self, fp, *, seek_begin=True, use_cached=True):
    """|coro|

    Saves this attachment into a file-like object.

    Parameters
    -----------
    fp: Union[BinaryIO, str]
        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, 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.

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

    Returns
    --------
    int
        The number of bytes written.
    """
    url = self.proxy_url if use_cached else self.url
    data = await self._http.get_attachment(url)
    if isinstance(fp, str):
        with open(fp, "wb") as f:
            return f.write(data)
    else:
        written = fp.write(data)
        if seek_begin:
            fp.seek(0)
        return written


# Traceback (discord.errors.HTTPException)
Traceback (most recent call last):
File "/home/astrid/Projects/PluralKit/venv/lib/python3.6/site-packages/discord/client.py", line 227, in _run_event
await coro(*args, **kwargs)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/__init__.py", line 84, in on_message
did_run_command = await commands.command_dispatch(client, message, conn)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/commands/__init__.py", line 237, in command_dispatch
await run_command(ctx, command_root)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/commands/__init__.py", line 214, in run_command
await func(ctx)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/commands/__init__.py", line 195, in command_root
await import_commands.import_root(ctx)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/commands/import_commands.py", line 13, in import_root
await import_tupperbox(ctx)
File "/home/astrid/Projects/PluralKit/src/pluralkit/bot/commands/import_commands.py", line 33, in import_tupperbox
await message.attachments[0].save(s)
File "/home/astrid/Projects/PluralKit/venv/lib/python3.6/site-packages/discord/message.py", line 114, in save
data = await self._http.get_attachment(url)
File "/home/astrid/Projects/PluralKit/venv/lib/python3.6/site-packages/discord/http.py", line 228, in get_attachment
raise HTTPException(resp, 'failed to get attachment')
discord.errors.HTTPException: Unsupported Media Type (status code: 415): failed to get attachment

# Fixed code
async def save(self, fp, *, seek_begin=True, use_cached=False):
    """|coro|

    Saves this attachment into a file-like object.

    Parameters
    -----------
    fp: Union[BinaryIO, str]
        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, 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.

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

    Returns
    --------
    int
        The number of bytes written.
    """
    url = self.proxy_url if use_cached else self.url
    data = await self._http.get_attachment(url)
    if isinstance(fp, str):
        with open(fp, "wb") as f:
            return f.write(data)
    else:
        written = fp.write(data)
        if seek_begin:
            fp.seek(0)
        return written