async def get_profile(self, user_id: str) -> Member: """ Get the combined profile information for a user. See also: `API reference <https://matrix.org/docs/spec/client_server/r0.4.0.html#get-matrix-client-r0-profile-userid>`__ Args: user_id: The ID of the user whose profile to get. Returns: The profile information of the given user. """ content = await self.api.request(Method.GET, Path.profile[user_id]) try: return Member.deserialize(content) except SerializerError as e: raise MatrixResponseError("Invalid member in response") from e
def deserialize(self, data: Dict[str, Any]) -> None: self.members = { room_id: { user_id: Member.deserialize(member) for user_id, member in members.items() } for room_id, members in data["members"].items() } self.full_member_list = data["full_member_list"] self.power_levels = { room_id: PowerLevelStateEventContent.deserialize(content) for room_id, content in data["power_levels"].items() } self.encryption = { room_id: (RoomEncryptionStateEventContent.deserialize(content) if content is not None else None) for room_id, content in data["encryption"].items() }
async def get_member_profiles( self, room_id: RoomID, memberships: tuple[Membership, ...] = (Membership.JOIN, Membership.INVITE), ) -> dict[UserID, Member]: membership_values = [membership.value for membership in memberships] if self.db.scheme in (Scheme.POSTGRES, Scheme.COCKROACH): q = ( "SELECT user_id, membership, displayname, avatar_url FROM mx_user_profile " "WHERE room_id=$1 AND membership=ANY($2)") res = await self.db.fetch(q, room_id, membership_values) else: membership_placeholders = ("?," * len(memberships)).rstrip(",") q = ( "SELECT user_id, membership, displayname, avatar_url FROM mx_user_profile " f"WHERE room_id=? AND membership IN ({membership_placeholders})" ) res = await self.db.fetch(q, room_id, *membership_values) return { profile["user_id"]: Member.deserialize(profile) for profile in res }
def deserialize(self, data: SerializedStateStore) -> None: """ Parse a previously serialized dict into this state store. Args: data: A dict returned by :meth:`serialize`. """ self.members = { room_id: { user_id: Member.deserialize(member) for user_id, member in members.items() } for room_id, members in data["members"].items() } self.full_member_list = data["full_member_list"] self.power_levels = { room_id: PowerLevelStateEventContent.deserialize(content) for room_id, content in data["power_levels"].items() } self.encryption = { room_id: (RoomEncryptionStateEventContent.deserialize(content) if content is not None else None) for room_id, content in data["encryption"].items() }