add edit self

This commit is contained in:
Zomatree
2022-03-30 19:00:02 +01:00
parent a0717b180d
commit bbb3f18f42
4 changed files with 88 additions and 9 deletions
+59
View File
@@ -13,6 +13,7 @@ from .invite import Invite
from .message import Message
from .state import State
from .websocket import WebsocketHandler
from .utils import Missing
try:
import ujson as json
@@ -285,3 +286,61 @@ class Client:
return message
raise LookupError
async def edit_self(self, **kwargs):
"""Edits the client's own user
Parameters
-----------
avatar: Optional[:class:`File`]
The avatar to change to, passing in ``None`` will remove the avatar
"""
if kwargs.get("avatar", Missing) == None:
del kwargs["avatar"]
remove = "Avatar"
else:
remove = None
await self.state.http.edit_self(remove, kwargs)
async def edit_status(self, **kwargs):
"""Edits the client's own status
Parameters
-----------
presence: :class:`PresenceType`
The presence to change to
text: Optional[:class:`str`]
The text to change the status to, passing in ``None`` will remove the status
"""
if kwargs.get("text", Missing) == None:
del kwargs["text"]
remove = "StatusText"
else:
remove = None
if presence := kwargs.get("presence"):
kwargs["presence"] = presence.value
await self.state.http.edit_self(remove, {"status": kwargs})
async def edit_profile(self, **kwargs):
"""Edits the client's own profile
Parameters
-----------
content: Optional[:class:`str`]
The new content for the profile, passing in ``None`` will remove the profile content
background: Optional[:class:`File`]
The new background for the profile, passing in ``None`` will remove the profile background
"""
if kwargs.get("content", Missing) == None:
del kwargs["content"]
remove = "ProfileContent"
elif kwargs.get("background", Missing) == None:
del kwargs["background"]
remove = "ProfileBackground"
else:
remove = None
await self.state.http.edit_self(remove, {"profile": kwargs})
+24
View File
@@ -6,6 +6,8 @@ from typing import (TYPE_CHECKING, Any, Coroutine, Literal, Optional, TypeVar,
import aiohttp
import ulid
from revolt.utils import Missing
from .errors import HTTPError, ServerError
from .file import File
@@ -388,3 +390,25 @@ class HttpClient:
values["remove"] = remove
return self.request("PATCH", f"/servers/{server_id}/roles/{role_id}", json=values)
async def edit_self(self, remove: Optional[str], values: dict[str, Any]):
if remove:
values["remove"] = remove
if avatar := values.get("avatar"):
asset = await self.upload_file(avatar, "avatars")
values["avatar"] = asset["id"]
if profile := values.get("profile"):
if background := profile.background():
asset = await self.upload_file(background, "backgrounds")
profile["background"] = asset["id"]
if not values.get("profile", Missing):
del values["profile"]
if not values.get("status", Missing):
del values["status"]
print(remove, values)
return await self.request("PATCH", "/users/@me", json=values)
+4 -4
View File
@@ -73,7 +73,7 @@ class State:
message = Message(payload, self)
if len(self.messages) >= self.max_messages:
self.messages.pop()
self.messages.appendleft(message)
return message
@@ -81,15 +81,15 @@ class State:
for msg in self.messages:
if msg.id == message_id:
return msg
raise KeyError
async def fetch_all_server_members(self):
for server_id in self.servers.keys():
data = await self.http.fetch_members(server_id)
for user in data["users"]:
self.add_user(user)
for member in data["members"]:
self.add_member(server_id, member)
+1 -5
View File
@@ -276,11 +276,7 @@ class WebsocketHandler:
user.profile = UserProfile(profile.content, None)
elif clear == "StatusText":
# user.status will never be None because they are trying to remove the text
if user.status.presence is None: # type: ignore
user.status = None
else:
user.status = Status(None, user.status.presence) # type: ignore
user.status = Status(None, user.status.presence if user.status else None)
elif clear == "Avatar":
user.original_avatar = None