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)
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)
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)
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 ]
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)
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)
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)
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)
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)
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 ]
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)
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
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)
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
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)
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)
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)
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)
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)
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)
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)
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 ]
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 ]