Example #1
0
    def set_member_permissions(
            self,
            group_peer: Peer or AsyncTask,
            user_peer: Peer or AsyncTask,
            add_permissions: List[GroupPermission] = None,
            del_permissions: List[GroupPermission] = None) -> None:
        """add/del group's member permissions

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param user_peer: Peer or AsyncTask (in which located User)
        :param add_permissions: list of permissions to add
        :param del_permissions: list of permissions to delete
        :return: None
        """
        group_peer, user_peer = get_peer(group_peer), get_peer(user_peer)
        if del_permissions is None:
            del_permissions = []
        if add_permissions is None:
            add_permissions = []
        group_out_peer, user_out_peer = self.__get_out_peer(
            group_peer), self.__get_out_peer(user_peer)
        add_request = groups_pb2.RequestEditMemberPermissions(
            group_peer=group_out_peer,
            user_peer=user_out_peer,
            granted_permissions=[x for x in add_permissions])
        del_request = groups_pb2.RequestEditMemberPermissions(
            group_peer=group_out_peer,
            user_peer=user_out_peer,
            revoked_permissions=[x for x in del_permissions])

        self.internal.groups.EditMemberPermissions(add_request)
        self.internal.groups.EditMemberPermissions(del_request)
Example #2
0
    def transfer_ownership(self, group_peer: Peer or AsyncTask, user_peer: Peer
                           or AsyncTask) -> None:
        """change group's owner to user

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param user_peer: Peer or AsyncTask (in which located User)
        :return: None
        """
        group_peer, user_peer = get_peer(group_peer), get_peer(user_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestTransferOwnership(group_peer=out_peer,
                                                      new_owner=user_peer.id)
        self.internal.groups.TransferOwnership(request)
Example #3
0
    def set_default_group_permissions(
            self,
            group_peer: Peer or AsyncTask,
            add_permissions: List[GroupPermission] = None,
            del_permissions: List[GroupPermission] = None) -> None:
        """add/del default group permissions

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param add_permissions: list of permissions to add
        :param del_permissions: list of permissions to delete
        :return: None
        """
        group_peer = get_peer(group_peer)
        if del_permissions is None:
            del_permissions = []
        if add_permissions is None:
            add_permissions = []

        group_out_peer = self.__get_out_peer(group_peer)
        add_request = groups_pb2.RequestEditGroupBasePermissions(
            group_peer=group_out_peer,
            random_id=random.randint(0, 100000000),
            granted_permissions=[x for x in add_permissions])
        del_request = groups_pb2.RequestEditGroupBasePermissions(
            group_peer=group_out_peer,
            random_id=random.randint(0, 100000000),
            revoked_permissions=[x for x in del_permissions])

        self.internal.groups.EditGroupBasePermissions(add_request)
        self.internal.groups.EditGroupBasePermissions(del_request)
Example #4
0
    def load_members(self,
                     group_peer: Peer or AsyncTask,
                     limit: int = 0) -> List[User] or None:
        """Load Group members by peer

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param limit: count members
        :return: list of User's
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        if out_peer is None:
            return None

        request = groups_pb2.RequestLoadMembers(group=out_peer, limit=limit)
        members = self.internal.groups.LoadMembers(request).members
        request = sequence_and_updates_pb2.RequestGetReferencedEntitites(
            group_members=[
                sequence_and_updates_pb2.GroupMembersSubset(
                    group_peer=out_peer,
                    member_ids=[member.uid for member in members])
            ])
        return [
            User.from_api(x) for x in
            self.internal.updates.GetReferencedEntitites(request).users
        ]
Example #5
0
    def send_message(
            self,
            peer: Peer or AsyncTask,
            text: str,
            interactive_media_groups: List[InteractiveMediaGroup] = None,
            uid: int = None) -> UUID:
        """Send text message to peer.
        Message can contain interactive media groups (buttons, selects etc.).

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param text: message text (not null)
        :param interactive_media_groups: groups of interactive media components (buttons etc.)
        :param uid: send message only for user by id
        :return: UUID (message id)
        """
        peer = get_peer(peer)
        if text == '' or text is None:
            raise AttributeError('Text message must contain some text.')
        out_peer = self.manager.get_out_peer(peer)
        msg = messaging_pb2.MessageContent()
        msg.textMessage.text = text
        if interactive_media_groups is not None:
            for g in interactive_media_groups:
                media = msg.textMessage.media.add()
                g.render(media)
        request = messaging_pb2.RequestSendMessage(
            peer=out_peer,
            deduplication_id=random.randint(0, 100000000),
            message=msg,
            is_only_for_user=uid)
        return self.__send_message(request)
Example #6
0
    def forward(
            self,
            peer: Peer or AsyncTask,
            mids: List[UUID or AsyncTask],
            text: str = None,
            interactive_media_groups: List[InteractiveMediaGroup] = None
    ) -> UUID:
        """Forward messages to peer. Message can contain interactive media groups (buttons, selects etc.).

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param mids: list of UUIDs
        :param text: message text
        :param interactive_media_groups: groups of interactive media components (buttons etc.)
        :return: UUID (message id)
        """
        peer = get_peer(peer)
        mids = get_uuids(mids)
        if text is None:
            text = ''

        out_peer, msg = self.__get_out_peer_and_message(
            peer, text, interactive_media_groups)
        request = messaging_pb2.RequestSendMessage(
            peer=out_peer,
            deduplication_id=random.randint(0, 100000000),
            message=msg,
            forward=messaging_pb2.ReferencedMessages(mids=mids),
        )
        return self.__send_message(request)
Example #7
0
    def reply(
            self,
            peer: Peer or AsyncTask,
            mids: List[UUID or AsyncTask],
            text: str = None,
            interactive_media_groups: List[InteractiveMediaGroup] = None
    ) -> UUID:
        """Reply messages to peer. Message can contain interactive media groups (buttons, selects etc.).

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param mids: list of UUIDs
        :param text: message text
        :param interactive_media_groups: groups of interactive media components (buttons etc.)
        :return: UUID (message id)
        """
        peer = get_peer(peer)
        mids = get_uuids(mids)
        if text is None:
            text = ''

        out_peer = self.manager.get_out_peer(peer)
        msg = messaging_pb2.MessageContent()
        msg.textMessage.text = text
        if interactive_media_groups is not None:
            for g in interactive_media_groups:
                media = msg.textMessage.media.add()
                g.render(media)
        request = messaging_pb2.RequestSendMessage(
            peer=out_peer,
            deduplication_id=random.randint(0, 100000000),
            message=msg,
            reply=messaging_pb2.ReferencedMessages(mids=mids))
        return self.__send_message(request)
Example #8
0
    def send_image(self, peer: Peer or AsyncTask, file: str) -> UUID or None:
        """Send image as image (not as file) to peer.

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param file: path to image file
        :return: UUID (message id)
        """
        peer = get_peer(peer)

        if isinstance(file, str) and not is_image(file):
            raise IOError('File is not an image.')

        location = self.internal.uploading.upload_file(file).wait()
        if location is None:
            return None
        location = location.to_api()
        out_peer = self.manager.get_out_peer(peer)
        msg = messaging_pb2.MessageContent()

        msg.documentMessage.CopyFrom(content.get_image_content(file, location))

        request = messaging_pb2.RequestSendMessage(
            peer=out_peer,
            deduplication_id=random.randint(0, 100000000),
            message=msg)

        return self.__send_message(request)
Example #9
0
    def make_user_admin(self, group_peer: Peer or AsyncTask, user_peer: Peer
                        or AsyncTask,
                        permissions: List[GroupPermission]) -> None:
        """Set new user's permissions (old permissions will be revoke)

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param user_peer: Peer or AsyncTask (in which located User)
        :param permissions: permissions list (for admin)
        :return: None
        """
        group_peer, user_peer = get_peer(group_peer), get_peer(user_peer)
        group_out_peer, user_out_peer = self.__get_out_peer(
            group_peer), self.__get_out_peer(user_peer)
        request = groups_pb2.RequestMakeUserAdmin(group_peer=group_out_peer,
                                                  user_peer=user_out_peer,
                                                  permissions=permissions)
        self.internal.groups.MakeUserAdmin(request)
Example #10
0
    def get_group_member_permissions(self, group_peer: Peer or AsyncTask, user_peers: List[Peer or AsyncTask]) \
            -> List[Permissions]:
        """return group member's permissions

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param user_peers: Peer or AsyncTask (in which located User)
        :return: group member's permissions
        """
        group_peer, user_peers = get_peer(group_peer), [
            get_peer(x) for x in user_peers
        ]
        request = groups_pb2.RequestGetGroupMemberPermissions(
            group_id=group_peer.id, user_ids=[peer.id for peer in user_peers])
        return [
            Permissions.from_api(x) for x in
            self.internal.groups.GetGroupMemberPermissions(request).permissions
        ]
Example #11
0
    def invite_user(self, group_peer: Peer or AsyncTask, user_peer: Peer
                    or AsyncTask) -> None:
        """Invite user in Group

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param user_peer: Peer or AsyncTask (in which located User)
        :return: None
        """
        group_peer, user_peer = get_peer(group_peer), get_peer(user_peer)
        group_out_peer, user_out_peer = self.__get_out_peer(
            group_peer), self.__get_out_peer(user_peer)

        request = groups_pb2.RequestInviteUser(
            group_peer=group_out_peer,
            user=user_out_peer,
            rid=random.randint(0, 100000000),
        )
        self.internal.groups.InviteUser(request)
Example #12
0
    def revoke_invite_url(self, group_peer: Peer or AsyncTask) -> str:
        """revoke current invite url and return new group's invite url

        :return: invite url
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestRevokeInviteUrl(group_peer=out_peer)
        return self.internal.groups.RevokeInviteUrl(request).url
Example #13
0
    def join_group_by_peer(self, group_peer: Peer or AsyncTask) -> None:
        """join to group by group's peer (used for public groups)

        :param group_peer: Peer or AsyncTask (in which located Group)
        :return: None
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestJoinGroupByPeer(peer=out_peer)
        self.internal.groups.JoinGroupByPeer(request)
Example #14
0
    def get_group_invite_url(self, group_peer: Peer or AsyncTask) -> str:
        """return group's invite url

        :param group_peer: Peer or AsyncTask (in which located Group)
        :return: invite url
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestGetGroupInviteUrl(group_peer=out_peer)
        return self.internal.groups.GetGroupInviteUrl(request).url
Example #15
0
    def messages_read(self, peer: Peer or AsyncTask, date: int) -> None:
        """Marking a message and all previous as read

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param date: date of message
        :return: None
        """
        peer = get_peer(peer)
        peer = self.manager.get_out_peer(peer)
        request = messaging_pb2.RequestMessageRead(peer=peer, date=date)
        self.internal.messaging.MessageRead(request)
Example #16
0
    def leave_group(self, group_peer: Peer or AsyncTask) -> None:
        """leave from group

        :param group_peer: Peer or AsyncTask (in which located Group)
        :return: None
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestLeaveGroup(
            group_peer=out_peer,
            rid=random.randint(0, 100000000),
        )
        self.internal.groups.LeaveGroup(request)
Example #17
0
    def remove_group_avatar(self, group_peer: Peer or AsyncTask) -> None:
        """deleted group's avatar

        :param group_peer: Peer or AsyncTask (in which located User)
        :return: None
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestRemoveGroupAvatar(
            group_peer=out_peer,
            rid=random.randint(0, 100000000),
        )
        self.internal.groups.RemoveGroupAvatar(request)
Example #18
0
    def edit_group_about(self, group_peer: Peer or AsyncTask,
                         about: str) -> None:
        """change group's "about"

        :param group_peer: Peer or AsyncTask (in which located User)
        :param about: about text
        :return: None
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestEditGroupAbout(
            group_peer=out_peer,
            rid=random.randint(0, 100000000),
            about=wrappers_pb2.StringValue(value=about))
        self.internal.groups.EditGroupAbout(request)
Example #19
0
    def edit_group_title(self, group_peer: Peer or AsyncTask,
                         title: str) -> None:
        """change group's title

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param title: new title
        :return: None
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        request = groups_pb2.RequestEditGroupTitle(group_peer=out_peer,
                                                   rid=random.randint(
                                                       0, 100000000),
                                                   title=title)
        self.internal.groups.EditGroupTitle(request)
Example #20
0
    def edit_avatar(self, group_peer: Peer or AsyncTask,
                    file: str) -> Avatar or None:
        """change group's avatar

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param file: file path
        :return: Avatar
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        location = self.internal.uploading.upload_file(file).wait()
        if location is None:
            return None
        request = groups_pb2.RequestEditGroupAvatar(
            group_peer=out_peer,
            rid=random.randint(0, 100000000),
            file_location=location.to_api())
        return Avatar.from_api(
            self.internal.groups.EditGroupAvatar(request).avatar)
Example #21
0
    def send_media(self, peer: Peer or AsyncTask,
                   medias: List[MessageMedia]) -> UUID:
        """Send media to peer.

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param medias: medias (list of MessageMedias)
        :return: UUID (message id)
        """
        peer = get_peer(peer)
        medias = self.__get_medias(medias)
        out_peer = self.manager.get_out_peer(peer)
        text_message = messaging_pb2.TextMessage()
        for media in medias:
            text_message.media.append(media)
        msg = messaging_pb2.MessageContent(textMessage=text_message)
        request = messaging_pb2.RequestSendMessage(
            peer=out_peer,
            deduplication_id=random.randint(0, 100000000),
            message=msg)
        return self.__send_message(request)
Example #22
0
    def load_members(
        self,
        group_peer: Peer or AsyncTask,
        limit: int = 0,
        cursor: bytes = b"",
        cursor_flag: bool = False
    ) -> List[User] or List[User] and bytes or None:
        """Load Group members by peer

        :param group_peer: Peer or AsyncTask (in which located Group)
        :param limit: count members
        :param cursor: bytes object that specify to the user from whom to start (returned from this method)
        :param cursor_flag: returned cursor? (True/False)
        :return: list of User's
        """
        group_peer = get_peer(group_peer)
        out_peer = self.__get_out_peer(group_peer)
        if out_peer is None:
            return None

        request = groups_pb2.RequestLoadMembers(group=out_peer,
                                                limit=limit,
                                                next=BytesValue(value=cursor))
        response = self.internal.groups.LoadMembers(request)
        members = response.members
        cursor = response.cursor.value
        request = sequence_and_updates_pb2.RequestGetReferencedEntitites(
            group_members=[
                sequence_and_updates_pb2.GroupMembersSubset(
                    group_peer=out_peer,
                    member_ids=[member.uid for member in members])
            ])
        if cursor_flag:
            return [
                User.from_api(x) for x in
                self.internal.updates.GetReferencedEntitites(request).users
            ], cursor
        return [
            User.from_api(x) for x in
            self.internal.updates.GetReferencedEntitites(request).users
        ]
Example #23
0
    def load_message_history(
            self,
            peer: Peer or AsyncTask,
            date: int = 0,
            direction: ListLoadMode = ListLoadMode.LISTLOADMODE_BACKWARD,
            limit: int = 2) -> List[Message]:
        """Load and return messages by peer.

        :param peer: Peer or AsyncTask (in which located User or Group)
        :param date: date of message
        :param direction: ListLoadMode
        :param limit: messages count
        :return: list of Messages
        """
        peer = get_peer(peer)
        out_peer = self.manager.get_out_peer(peer)
        request = messaging_pb2.RequestLoadHistory(peer=out_peer,
                                                   date=date,
                                                   load_mode=direction,
                                                   limit=limit)
        return [
            Message.from_api(x)
            for x in self.internal.messaging.LoadHistory(request).history
        ]