Example #1
0
    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
Example #2
0
 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()
     }
Example #3
0
 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
     }
Example #4
0
    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()
        }