Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add banner to ClientUser.edit #2396

Merged
merged 9 commits into from Mar 17, 2024
5 changes: 5 additions & 0 deletions CHANGELOG.md
Expand Up @@ -10,6 +10,11 @@ possible (see our [Version Guarantees] for more info).

These changes are available on the `master` branch, but have not yet been released.

### Added

- Added `banner` parameter to `ClientUser.edit`.
([#2396](https://github.com/Pycord-Development/pycord/pull/2396))

### Fixed

- Fixed the type-hinting of `Member.move_to` and `Member.edit` to reflect actual
Expand Down
23 changes: 19 additions & 4 deletions discord/user.py
Expand Up @@ -422,31 +422,41 @@ def _update(self, data: UserPayload) -> None:

# TODO: Username might not be able to edit anymore.
async def edit(
self, *, username: str = MISSING, avatar: bytes = MISSING
self,
*,
username: str = MISSING,
avatar: bytes = MISSING,
banner: bytes = MISSING,
) -> ClientUser:
"""|coro|

Edits the current profile of the client.

.. note::

To upload an avatar, a :term:`py:bytes-like object` must be passed in that
To upload an avatar or banner, a :term:`py:bytes-like object` must be passed in that
represents the image being uploaded. If this is done through a file
then the file must be opened via ``open('some_filename', 'rb')`` and
the :term:`py:bytes-like object` is given through the use of ``fp.read()``.

The only image formats supported for uploading is JPEG and PNG.
The only image formats supported for uploading are JPEG, PNG, and GIF.

.. versionchanged:: 2.0
The edit is no longer in-place, instead the newly edited client user is returned.
Braandn marked this conversation as resolved.
Show resolved Hide resolved

.. versionchanged:: 2.6
The ``banner`` keyword-only parameter was added.

Parameters
----------
username: :class:`str`
The new username you wish to change to.
avatar: :class:`bytes`
A :term:`py:bytes-like object` representing the image to upload.
Could be ``None`` to denote no avatar.
banner: :class:`bytes`
A :term:`py:bytes-like object` representing the image to upload.
Could be ``None`` to denote no banner.

Returns
-------
Expand All @@ -458,7 +468,7 @@ async def edit(
HTTPException
Editing your profile failed.
InvalidArgument
Wrong image format passed for ``avatar``.
Wrong image format passed for ``avatar`` or ``banner``.
"""
payload: dict[str, Any] = {}
if username is not MISSING:
Expand All @@ -469,6 +479,11 @@ async def edit(
elif avatar is not MISSING:
payload["avatar"] = _bytes_to_base64_data(avatar)

if banner is None:
payload["banner"] = None
elif banner is not MISSING:
payload["banner"] = _bytes_to_base64_data(banner)

data: UserPayload = await self._state.http.edit_profile(payload)
return ClientUser(state=self._state, data=data)

Expand Down