mirror of
https://github.com/stoatchat/python-client-sdk.git
synced 2026-07-25 00:15:23 -04:00
add edit self
This commit is contained in:
@@ -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})
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user