From 530f3d45956e037d3d5bea0a02153887abfafe2f Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 17 Mar 2024 08:55:15 +0100 Subject: [PATCH] feat: add `banner` to `ClientUser.edit` (#2396) Signed-off-by: Brandon Signed-off-by: plun1331 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: plun1331 --- CHANGELOG.md | 5 +++++ discord/user.py | 23 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac49862f6b..ea978f2d25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/discord/user.py b/discord/user.py index 1f11574a1c..5cd0352df3 100644 --- a/discord/user.py +++ b/discord/user.py @@ -422,7 +422,11 @@ 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| @@ -430,16 +434,19 @@ async def edit( .. 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. + .. versionchanged:: 2.6 + The ``banner`` keyword-only parameter was added. + Parameters ---------- username: :class:`str` @@ -447,6 +454,9 @@ async def edit( 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 ------- @@ -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: @@ -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)