feat: add room_members method to list members
This commit is contained in:
parent
6f7ddbbc9e
commit
387d5a25bc
2 changed files with 26 additions and 1 deletions
|
@ -134,7 +134,7 @@ class AppService:
|
||||||
return None
|
return None
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
doc = await res.json()
|
doc = await res.json()
|
||||||
return User(**doc)
|
return User.parse(doc)
|
||||||
|
|
||||||
async def register_mxid(self, mxid: str) -> None:
|
async def register_mxid(self, mxid: str) -> None:
|
||||||
bare_mxid = fmt_mxid(mxid, full=False)
|
bare_mxid = fmt_mxid(mxid, full=False)
|
||||||
|
@ -213,6 +213,24 @@ class AppService:
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
self.logger.debug("joined room %s with %s : %s", room, mxid, await res.json())
|
self.logger.debug("joined room %s with %s : %s", room, mxid, await res.json())
|
||||||
|
|
||||||
|
async def room_members(self, room: str, mxid: str | None = None) -> dict[str, User]:
|
||||||
|
out : dict[str, User] = dict()
|
||||||
|
async with self._client.request(
|
||||||
|
method="GET",
|
||||||
|
url=f"{self.client_api}/rooms/{room}/joined_members",
|
||||||
|
headers=self.api_headers,
|
||||||
|
params={"user_id": mxid} if mxid else {}
|
||||||
|
) as res:
|
||||||
|
res.raise_for_status()
|
||||||
|
self.logger.debug("listed room %s users with %s", room, mxid)
|
||||||
|
doc = await res.json()
|
||||||
|
for mxid in doc["joined"]:
|
||||||
|
if not mxid: # wtf mypy??
|
||||||
|
self.logger.warn("empty mxid: %s", mxid)
|
||||||
|
continue
|
||||||
|
out[mxid] = User.parse(doc["joined"][mxid])
|
||||||
|
return out
|
||||||
|
|
||||||
async def send_message(self, room: str, text: str, mxid: str | None = None) -> str:
|
async def send_message(self, room: str, text: str, mxid: str | None = None) -> str:
|
||||||
async with self._client.request(
|
async with self._client.request(
|
||||||
method="PUT",
|
method="PUT",
|
||||||
|
|
|
@ -7,6 +7,13 @@ class User:
|
||||||
avatar_url: str = ""
|
avatar_url: str = ""
|
||||||
displayname: str = ""
|
displayname: str = ""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def parse(cls, obj: dict[str, Any]) -> 'User':
|
||||||
|
return cls(
|
||||||
|
avatar_url = obj.get("avatar_url") or "",
|
||||||
|
displayname = obj.get("displayname") or obj.get("display_name") or "",
|
||||||
|
)
|
||||||
|
|
||||||
class EventType(StrEnum):
|
class EventType(StrEnum):
|
||||||
MESSAGE = "m.room.message"
|
MESSAGE = "m.room.message"
|
||||||
MEMBER = "m.room.member"
|
MEMBER = "m.room.member"
|
||||||
|
|
Loading…
Reference in a new issue