From d40e1e47fdb882b25fcf3cc06c7fd7a750a3286f Mon Sep 17 00:00:00 2001
From: wenxu12345 <44203734@qq.com>
Date: Thu, 23 Dec 2021 18:29:39 +0800
Subject: [PATCH] notification

---
 internal/rpc/group/group.go  |   4 +-
 internal/rpc/msg/send_msg.go |  43 +++--
 pkg/proto/group/group.pb.go  | 267 +++++++++++++++---------------
 pkg/proto/group/group.proto  |  47 +++---
 pkg/proto/sdk_ws/ws.pb.go    | 303 ++++++++++++++++++-----------------
 pkg/proto/sdk_ws/ws.proto    |   1 +
 6 files changed, 343 insertions(+), 322 deletions(-)

diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go
index 6d85ccf83..6ac49ac72 100644
--- a/internal/rpc/group/group.go
+++ b/internal/rpc/group/group.go
@@ -1,7 +1,7 @@
 package group
 
 import (
-	"Open_IM/internal/rpc/chat"
+	chat "Open_IM/internal/rpc/msg"
 	"Open_IM/pkg/common/config"
 	"Open_IM/pkg/common/constant"
 	"Open_IM/pkg/common/db"
@@ -132,7 +132,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
 		resp.ErrMsg = constant.ErrCreateGroup.ErrMsg
 		return resp, nil
 	}
-	chat.GroupCreatedNotification(req)
+	chat.GroupCreatedNotification(req, groupId)
 	utils.CopyStructFields(resp.GroupInfo, group)
 	log.NewInfo(req.OperationID, "rpc CreateGroup return ", resp.String())
 	return resp, nil
diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go
index de52d7022..26e49bfa8 100644
--- a/internal/rpc/msg/send_msg.go
+++ b/internal/rpc/msg/send_msg.go
@@ -4,9 +4,10 @@ import (
 	"Open_IM/pkg/common/config"
 	"Open_IM/pkg/common/constant"
 	"Open_IM/pkg/common/db"
-	immysql "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
+	imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
 	http2 "Open_IM/pkg/common/http"
 	"Open_IM/pkg/common/log"
+	"Open_IM/pkg/common/token_verify"
 	"Open_IM/pkg/grpc-etcdv3/getcdv3"
 	pbChat "Open_IM/pkg/proto/chat"
 	pbGroup "Open_IM/pkg/proto/group"
@@ -306,26 +307,50 @@ func Notification(n *NotificationMsg, onlineUserOnly bool) {
 //  GroupMemberFullInfo Creator = 2;
 //  repeated GroupMemberFullInfo MemberList = 3;
 //  uint64 OperationTime = 4;
-//}
-func GroupCreatedNotification(operationID string, creator *immysql.User, group *immysql.Group, memberList []immysql.GroupMember) {
+//} creator->group
+func GroupCreatedNotification(req *pbGroup.CreateGroupReq, groupID string) {
 	var n NotificationMsg
-	n.SendID = creator.UserID
-	n.RecvID = group.GroupID
+	n.SendID = req.OpUserID
+	n.RecvID = groupID
 	n.ContentType = constant.CreateGroupTip
 	n.SessionType = constant.GroupChatType
 	n.MsgFrom = constant.SysMsgType
-	n.OperationID = operationID
+	n.OperationID = req.OperationID
 
 	var groupCreated open_im_sdk.GroupCreatedTips
 	groupCreated.Group = &open_im_sdk.GroupInfo{}
+
+	if token_verify.IsMangerUserID(req.OpUserID) {
+		u, err := imdb.FindUserByUID(req.OpUserID)
+		if err != nil || u == nil {
+			return
+		}
+		utils.CopyStructFields(groupCreated.Creator, u)
+		groupCreated.Creator.AppMangerLevel = 1
+	} else {
+		u, err := imdb.FindGroupMemberInfoByGroupIdAndUserId(groupID, req.OpUserID)
+		if err != nil || u == nil {
+			return
+		}
+		utils.CopyStructFields(groupCreated.Creator, u)
+	}
+
+	group, err := imdb.FindGroupInfoByGroupId(groupID)
+	if err != nil || group == nil {
+		return
+	}
 	utils.CopyStructFields(groupCreated.Group, group)
 	groupCreated.Creator = &open_im_sdk.GroupMemberFullInfo{}
-	utils.CopyStructFields(groupCreated.Creator, creator)
-	for _, v := range memberList {
+
+	for _, v := range req.InitMemberList {
 		var groupMemberInfo open_im_sdk.GroupMemberFullInfo
-		utils.CopyStructFields(&groupMemberInfo, v)
+		member, err := imdb.GetMemberInfoById(groupID, v.UserID)
+		if err != nil {
+			utils.CopyStructFields(&groupMemberInfo, member)
+		}
 		groupCreated.MemberList = append(groupCreated.MemberList, &groupMemberInfo)
 	}
+
 	var tips open_im_sdk.TipsComm
 	tips.Detail, _ = json.Marshal(groupCreated)
 	tips.DefaultTips = config.Config.Notification.GroupCreated.DefaultTips.Tips
diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go
index b18a09367..caa26e0e5 100644
--- a/pkg/proto/group/group.pb.go
+++ b/pkg/proto/group/group.pb.go
@@ -36,7 +36,7 @@ func (m *CommonResp) Reset()         { *m = CommonResp{} }
 func (m *CommonResp) String() string { return proto.CompactTextString(m) }
 func (*CommonResp) ProtoMessage()    {}
 func (*CommonResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{0}
+	return fileDescriptor_group_2ff972788727c811, []int{0}
 }
 func (m *CommonResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@@ -82,7 +82,7 @@ func (m *GroupAddMemberInfo) Reset()         { *m = GroupAddMemberInfo{} }
 func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) }
 func (*GroupAddMemberInfo) ProtoMessage()    {}
 func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{1}
+	return fileDescriptor_group_2ff972788727c811, []int{1}
 }
 func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b)
@@ -135,7 +135,7 @@ func (m *CreateGroupReq) Reset()         { *m = CreateGroupReq{} }
 func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
 func (*CreateGroupReq) ProtoMessage()    {}
 func (*CreateGroupReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{2}
+	return fileDescriptor_group_2ff972788727c811, []int{2}
 }
 func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
@@ -231,7 +231,7 @@ func (m *CreateGroupResp) Reset()         { *m = CreateGroupResp{} }
 func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
 func (*CreateGroupResp) ProtoMessage()    {}
 func (*CreateGroupResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{3}
+	return fileDescriptor_group_2ff972788727c811, []int{3}
 }
 func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
@@ -285,7 +285,7 @@ func (m *GetGroupsInfoReq) Reset()         { *m = GetGroupsInfoReq{} }
 func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
 func (*GetGroupsInfoReq) ProtoMessage()    {}
 func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{4}
+	return fileDescriptor_group_2ff972788727c811, []int{4}
 }
 func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
@@ -339,7 +339,7 @@ func (m *GetGroupsInfoResp) Reset()         { *m = GetGroupsInfoResp{} }
 func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
 func (*GetGroupsInfoResp) ProtoMessage()    {}
 func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{5}
+	return fileDescriptor_group_2ff972788727c811, []int{5}
 }
 func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
@@ -394,7 +394,7 @@ func (m *SetGroupInfoReq) Reset()         { *m = SetGroupInfoReq{} }
 func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
 func (*SetGroupInfoReq) ProtoMessage()    {}
 func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{6}
+	return fileDescriptor_group_2ff972788727c811, []int{6}
 }
 func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
@@ -456,7 +456,7 @@ func (m *GetGroupApplicationListReq) Reset()         { *m = GetGroupApplicationL
 func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
 func (*GetGroupApplicationListReq) ProtoMessage()    {}
 func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{7}
+	return fileDescriptor_group_2ff972788727c811, []int{7}
 }
 func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
@@ -523,7 +523,7 @@ func (m *GetGroupApplicationList_Data_User) Reset()         { *m = GetGroupAppli
 func (m *GetGroupApplicationList_Data_User) String() string { return proto.CompactTextString(m) }
 func (*GetGroupApplicationList_Data_User) ProtoMessage()    {}
 func (*GetGroupApplicationList_Data_User) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{8}
+	return fileDescriptor_group_2ff972788727c811, []int{8}
 }
 func (m *GetGroupApplicationList_Data_User) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupApplicationList_Data_User.Unmarshal(m, b)
@@ -667,7 +667,7 @@ func (m *GetGroupApplicationListData) Reset()         { *m = GetGroupApplication
 func (m *GetGroupApplicationListData) String() string { return proto.CompactTextString(m) }
 func (*GetGroupApplicationListData) ProtoMessage()    {}
 func (*GetGroupApplicationListData) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{9}
+	return fileDescriptor_group_2ff972788727c811, []int{9}
 }
 func (m *GetGroupApplicationListData) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupApplicationListData.Unmarshal(m, b)
@@ -714,7 +714,7 @@ func (m *GetGroupApplicationListResp) Reset()         { *m = GetGroupApplication
 func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
 func (*GetGroupApplicationListResp) ProtoMessage()    {}
 func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{10}
+	return fileDescriptor_group_2ff972788727c811, []int{10}
 }
 func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
@@ -770,7 +770,7 @@ func (m *TransferGroupOwnerReq) Reset()         { *m = TransferGroupOwnerReq{} }
 func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
 func (*TransferGroupOwnerReq) ProtoMessage()    {}
 func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{11}
+	return fileDescriptor_group_2ff972788727c811, []int{11}
 }
 func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
@@ -840,7 +840,7 @@ func (m *JoinGroupReq) Reset()         { *m = JoinGroupReq{} }
 func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
 func (*JoinGroupReq) ProtoMessage()    {}
 func (*JoinGroupReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{12}
+	return fileDescriptor_group_2ff972788727c811, []int{12}
 }
 func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
@@ -915,7 +915,7 @@ func (m *GroupApplicationResponseReq) Reset()         { *m = GroupApplicationRes
 func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
 func (*GroupApplicationResponseReq) ProtoMessage()    {}
 func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{13}
+	return fileDescriptor_group_2ff972788727c811, []int{13}
 }
 func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
@@ -1006,7 +1006,7 @@ func (m *SetOwnerGroupNickNameReq) Reset()         { *m = SetOwnerGroupNickNameR
 func (m *SetOwnerGroupNickNameReq) String() string { return proto.CompactTextString(m) }
 func (*SetOwnerGroupNickNameReq) ProtoMessage()    {}
 func (*SetOwnerGroupNickNameReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{14}
+	return fileDescriptor_group_2ff972788727c811, []int{14}
 }
 func (m *SetOwnerGroupNickNameReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SetOwnerGroupNickNameReq.Unmarshal(m, b)
@@ -1075,7 +1075,7 @@ func (m *QuitGroupReq) Reset()         { *m = QuitGroupReq{} }
 func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
 func (*QuitGroupReq) ProtoMessage()    {}
 func (*QuitGroupReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{15}
+	return fileDescriptor_group_2ff972788727c811, []int{15}
 }
 func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
@@ -1138,7 +1138,7 @@ func (m *GetGroupMemberListReq) Reset()         { *m = GetGroupMemberListReq{} }
 func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
 func (*GetGroupMemberListReq) ProtoMessage()    {}
 func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{16}
+	return fileDescriptor_group_2ff972788727c811, []int{16}
 }
 func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
@@ -1207,7 +1207,7 @@ func (m *GetGroupMemberListResp) Reset()         { *m = GetGroupMemberListResp{}
 func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
 func (*GetGroupMemberListResp) ProtoMessage()    {}
 func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{17}
+	return fileDescriptor_group_2ff972788727c811, []int{17}
 }
 func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
@@ -1269,7 +1269,7 @@ func (m *GetGroupMembersInfoReq) Reset()         { *m = GetGroupMembersInfoReq{}
 func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
 func (*GetGroupMembersInfoReq) ProtoMessage()    {}
 func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{18}
+	return fileDescriptor_group_2ff972788727c811, []int{18}
 }
 func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
@@ -1330,7 +1330,7 @@ func (m *GetGroupMembersInfoResp) Reset()         { *m = GetGroupMembersInfoResp
 func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
 func (*GetGroupMembersInfoResp) ProtoMessage()    {}
 func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{19}
+	return fileDescriptor_group_2ff972788727c811, []int{19}
 }
 func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
@@ -1386,7 +1386,7 @@ func (m *KickGroupMemberReq) Reset()         { *m = KickGroupMemberReq{} }
 func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
 func (*KickGroupMemberReq) ProtoMessage()    {}
 func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{20}
+	return fileDescriptor_group_2ff972788727c811, []int{20}
 }
 func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
@@ -1453,7 +1453,7 @@ func (m *Id2Result) Reset()         { *m = Id2Result{} }
 func (m *Id2Result) String() string { return proto.CompactTextString(m) }
 func (*Id2Result) ProtoMessage()    {}
 func (*Id2Result) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{21}
+	return fileDescriptor_group_2ff972788727c811, []int{21}
 }
 func (m *Id2Result) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Id2Result.Unmarshal(m, b)
@@ -1500,7 +1500,7 @@ func (m *KickGroupMemberResp) Reset()         { *m = KickGroupMemberResp{} }
 func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
 func (*KickGroupMemberResp) ProtoMessage()    {}
 func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{22}
+	return fileDescriptor_group_2ff972788727c811, []int{22}
 }
 func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
@@ -1554,7 +1554,7 @@ func (m *GetJoinedGroupListReq) Reset()         { *m = GetJoinedGroupListReq{} }
 func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
 func (*GetJoinedGroupListReq) ProtoMessage()    {}
 func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{23}
+	return fileDescriptor_group_2ff972788727c811, []int{23}
 }
 func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
@@ -1608,7 +1608,7 @@ func (m *GetJoinedGroupListResp) Reset()         { *m = GetJoinedGroupListResp{}
 func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
 func (*GetJoinedGroupListResp) ProtoMessage()    {}
 func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{24}
+	return fileDescriptor_group_2ff972788727c811, []int{24}
 }
 func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
@@ -1664,7 +1664,7 @@ func (m *InviteUserToGroupReq) Reset()         { *m = InviteUserToGroupReq{} }
 func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
 func (*InviteUserToGroupReq) ProtoMessage()    {}
 func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{25}
+	return fileDescriptor_group_2ff972788727c811, []int{25}
 }
 func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
@@ -1732,7 +1732,7 @@ func (m *InviteUserToGroupResp) Reset()         { *m = InviteUserToGroupResp{} }
 func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
 func (*InviteUserToGroupResp) ProtoMessage()    {}
 func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{26}
+	return fileDescriptor_group_2ff972788727c811, []int{26}
 }
 func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
@@ -1775,9 +1775,8 @@ func (m *InviteUserToGroupResp) GetId2ResultList() []*Id2Result {
 
 type GetGroupAllMemberReq struct {
 	GroupID              string   `protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"`
-	FromUserID           string   `protobuf:"bytes,2,opt,name=FromUserID" json:"FromUserID,omitempty"`
+	OpUserID             string   `protobuf:"bytes,2,opt,name=OpUserID" json:"OpUserID,omitempty"`
 	OperationID          string   `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
-	OpUserID             string   `protobuf:"bytes,4,opt,name=OpUserID" json:"OpUserID,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -1787,7 +1786,7 @@ func (m *GetGroupAllMemberReq) Reset()         { *m = GetGroupAllMemberReq{} }
 func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
 func (*GetGroupAllMemberReq) ProtoMessage()    {}
 func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{27}
+	return fileDescriptor_group_2ff972788727c811, []int{27}
 }
 func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
@@ -1814,9 +1813,9 @@ func (m *GetGroupAllMemberReq) GetGroupID() string {
 	return ""
 }
 
-func (m *GetGroupAllMemberReq) GetFromUserID() string {
+func (m *GetGroupAllMemberReq) GetOpUserID() string {
 	if m != nil {
-		return m.FromUserID
+		return m.OpUserID
 	}
 	return ""
 }
@@ -1828,13 +1827,6 @@ func (m *GetGroupAllMemberReq) GetOperationID() string {
 	return ""
 }
 
-func (m *GetGroupAllMemberReq) GetOpUserID() string {
-	if m != nil {
-		return m.OpUserID
-	}
-	return ""
-}
-
 type GetGroupAllMemberResp struct {
 	ErrCode              int32                         `protobuf:"varint,1,opt,name=ErrCode" json:"ErrCode,omitempty"`
 	ErrMsg               string                        `protobuf:"bytes,2,opt,name=ErrMsg" json:"ErrMsg,omitempty"`
@@ -1848,7 +1840,7 @@ func (m *GetGroupAllMemberResp) Reset()         { *m = GetGroupAllMemberResp{} }
 func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
 func (*GetGroupAllMemberResp) ProtoMessage()    {}
 func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_group_23d97c4cd172f0ff, []int{28}
+	return fileDescriptor_group_2ff972788727c811, []int{28}
 }
 func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
@@ -2424,102 +2416,101 @@ var _Group_serviceDesc = grpc.ServiceDesc{
 	Metadata: "group/group.proto",
 }
 
-func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_23d97c4cd172f0ff) }
-
-var fileDescriptor_group_23d97c4cd172f0ff = []byte{
-	// 1492 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcb, 0x6f, 0x1c, 0x45,
-	0x13, 0xd7, 0xec, 0xc3, 0xf1, 0x96, 0x1f, 0x6b, 0x77, 0x62, 0x67, 0xbe, 0x89, 0xbf, 0xc8, 0x19,
-	0xa1, 0xc8, 0x8a, 0x90, 0x2d, 0x39, 0x08, 0x09, 0x25, 0x42, 0x71, 0xfc, 0x48, 0x16, 0xb0, 0xad,
-	0x8c, 0x37, 0x17, 0x2e, 0x66, 0xb2, 0xd3, 0x59, 0x0d, 0x3b, 0x3b, 0x33, 0x3b, 0x3d, 0x8b, 0x13,
-	0x2e, 0x80, 0x90, 0xe0, 0x80, 0x80, 0x5c, 0x39, 0x72, 0x80, 0x23, 0xe2, 0xc0, 0x9d, 0x03, 0xff,
-	0x18, 0xea, 0xc7, 0xcc, 0xf6, 0xf4, 0x3c, 0x76, 0x65, 0x4b, 0xe4, 0xb2, 0xda, 0xae, 0xaa, 0xee,
-	0x7a, 0x74, 0xd5, 0xaf, 0x6a, 0x1a, 0x56, 0xfb, 0x51, 0x30, 0x0e, 0x77, 0xd8, 0xef, 0x76, 0x18,
-	0x05, 0x71, 0x80, 0x9a, 0x6c, 0x61, 0xdc, 0x39, 0x0d, 0xb1, 0x7f, 0xde, 0x39, 0xde, 0x09, 0x07,
-	0xfd, 0x1d, 0xc6, 0xd9, 0x21, 0xce, 0xe0, 0xfc, 0x82, 0xec, 0x5c, 0x10, 0x2e, 0x69, 0x7e, 0x08,
-	0xb0, 0x1f, 0x0c, 0x87, 0x81, 0x6f, 0x61, 0x12, 0x22, 0x1d, 0xae, 0x1d, 0x46, 0xd1, 0x7e, 0xe0,
-	0x60, 0x5d, 0xdb, 0xd4, 0xb6, 0x9a, 0x56, 0xb2, 0x44, 0xeb, 0x30, 0x77, 0x18, 0x45, 0xc7, 0xa4,
-	0xaf, 0xd7, 0x36, 0xb5, 0xad, 0x96, 0x25, 0x56, 0xe6, 0x23, 0x40, 0x4f, 0xa8, 0xae, 0x3d, 0xc7,
-	0x39, 0xc6, 0xc3, 0x17, 0x38, 0xea, 0xf8, 0x2f, 0x03, 0x2a, 0xfd, 0x9c, 0xe0, 0xa8, 0x73, 0xc0,
-	0x8e, 0x69, 0x59, 0x62, 0x85, 0x10, 0x34, 0xac, 0xc0, 0xc3, 0xec, 0x8c, 0xa6, 0xc5, 0xfe, 0x9b,
-	0xff, 0xd4, 0x60, 0x79, 0x3f, 0xc2, 0x76, 0x8c, 0xd9, 0x41, 0x16, 0x1e, 0xa1, 0x3d, 0x58, 0xee,
-	0xf8, 0x6e, 0xcc, 0x0f, 0xfc, 0xc4, 0x25, 0xb1, 0xae, 0x6d, 0xd6, 0xb7, 0x16, 0x76, 0xff, 0xb7,
-	0xcd, 0x9d, 0xcc, 0x6b, 0xb4, 0x94, 0x0d, 0x68, 0x03, 0x5a, 0x4c, 0xea, 0xc4, 0x1e, 0x62, 0x61,
-	0xf2, 0x84, 0x80, 0x4c, 0x58, 0xec, 0xf8, 0x71, 0x14, 0x38, 0xe3, 0x5e, 0xec, 0x06, 0xbe, 0x5e,
-	0x67, 0x02, 0x19, 0x1a, 0x95, 0x39, 0x09, 0x62, 0xf7, 0xa5, 0xdb, 0xb3, 0x99, 0x4c, 0x83, 0xcb,
-	0xc8, 0x34, 0x1a, 0xaf, 0x23, 0xbb, 0x87, 0x9f, 0x47, 0x9e, 0xde, 0x64, 0xec, 0x64, 0x89, 0x56,
-	0xa0, 0x7e, 0xf8, 0x2a, 0xd6, 0xe7, 0x18, 0x95, 0xfe, 0x45, 0x9b, 0xb0, 0x70, 0x1a, 0xe2, 0x88,
-	0x6d, 0xec, 0x1c, 0xe8, 0xd7, 0x18, 0x47, 0x26, 0x21, 0x03, 0xe6, 0x4f, 0x43, 0x11, 0xb7, 0x79,
-	0xc6, 0x4e, 0xd7, 0xe8, 0x36, 0xc0, 0x51, 0x14, 0x0c, 0x05, 0xb7, 0xc5, 0xb8, 0x12, 0xc5, 0x7c,
-	0x0d, 0xed, 0x4c, 0x10, 0x2f, 0x73, 0x99, 0xe8, 0x3d, 0x11, 0x34, 0x1a, 0x51, 0x16, 0x93, 0x85,
-	0xdd, 0xf5, 0xed, 0x80, 0xe6, 0x90, 0x3b, 0x3c, 0x27, 0xce, 0x60, 0x3b, 0xe5, 0x5a, 0x13, 0x41,
-	0x33, 0x82, 0x95, 0x27, 0x38, 0x66, 0x6b, 0xc2, 0x78, 0x78, 0x44, 0x9d, 0xe5, 0x02, 0x07, 0xe9,
-	0xf5, 0xb5, 0x2c, 0x99, 0xa4, 0x86, 0xa3, 0x56, 0x1d, 0x8e, 0x7a, 0x36, 0x1c, 0xe6, 0xb7, 0x1a,
-	0xac, 0x2a, 0x4a, 0x2f, 0xe5, 0xf1, 0x43, 0x58, 0x4a, 0x1d, 0x61, 0x96, 0xd6, 0x59, 0xa2, 0x95,
-	0x79, 0x9d, 0x15, 0x36, 0x7f, 0xd3, 0xa0, 0x7d, 0x26, 0xac, 0x48, 0x3c, 0xcf, 0xc4, 0x50, 0x9b,
-	0x31, 0x86, 0x19, 0x5f, 0x6b, 0x95, 0x57, 0x5f, 0x57, 0xaf, 0x5e, 0x8d, 0x64, 0x23, 0x17, 0x49,
-	0xf3, 0x4b, 0x30, 0x92, 0x60, 0xed, 0x85, 0xa1, 0x27, 0xb2, 0x97, 0xba, 0x40, 0x2d, 0x96, 0x75,
-	0x6b, 0x8a, 0xee, 0xe9, 0xb7, 0x34, 0xc5, 0x3a, 0xf3, 0x97, 0x06, 0xdc, 0x29, 0x51, 0x7e, 0x7e,
-	0x60, 0xc7, 0xf6, 0x39, 0x95, 0x43, 0xcb, 0x50, 0x4b, 0xb5, 0xd7, 0x3a, 0x07, 0xf4, 0x26, 0x45,
-	0xb2, 0x08, 0x9d, 0xc9, 0x72, 0x6a, 0x34, 0x0c, 0x98, 0xef, 0x06, 0x82, 0xcb, 0x43, 0x91, 0xae,
-	0x29, 0xfc, 0x1c, 0x79, 0x76, 0x9f, 0xd5, 0x6a, 0xd3, 0x62, 0xff, 0xe9, 0x79, 0x16, 0x1e, 0x8d,
-	0x31, 0x89, 0x69, 0x76, 0xf0, 0x7a, 0x95, 0x28, 0x94, 0xff, 0xd4, 0xf6, 0x1d, 0x0f, 0x3b, 0x94,
-	0xcf, 0xab, 0x56, 0xa2, 0x50, 0x4b, 0xf7, 0x1c, 0xa7, 0xeb, 0x0e, 0x31, 0xab, 0xd9, 0xba, 0x95,
-	0x2c, 0xd1, 0x3d, 0x58, 0x49, 0xec, 0x3a, 0x71, 0x7b, 0x03, 0x9f, 0x22, 0x11, 0x2f, 0xdc, 0x1c,
-	0x1d, 0xdd, 0x85, 0x65, 0x6e, 0x65, 0x2a, 0x09, 0x4c, 0x52, 0xa1, 0xa2, 0x2d, 0x68, 0x27, 0x7b,
-	0x13, 0xe0, 0x59, 0x60, 0x82, 0x2a, 0x19, 0xbd, 0x03, 0x4b, 0x7c, 0x6f, 0x22, 0xb7, 0xc8, 0xe4,
-	0xb2, 0x44, 0x7a, 0xbf, 0xc2, 0x17, 0x4a, 0xd5, 0x97, 0xf8, 0xfd, 0x4a, 0x24, 0x1a, 0xb3, 0xee,
-	0xeb, 0x10, 0xeb, 0xcb, 0x3c, 0x66, 0xf4, 0x3f, 0x85, 0x46, 0x2e, 0x72, 0x16, 0xdb, 0xf1, 0x98,
-	0xe8, 0x6d, 0xc6, 0xcb, 0xd0, 0x26, 0x32, 0x16, 0x26, 0x63, 0x2f, 0xd6, 0x57, 0x64, 0x19, 0x4e,
-	0x33, 0x47, 0x70, 0xab, 0x24, 0x35, 0x68, 0x66, 0xa0, 0x1b, 0xd0, 0xdc, 0x0f, 0xc6, 0x7e, 0x2c,
-	0x8a, 0x99, 0x2f, 0xd0, 0x43, 0x68, 0x30, 0x5b, 0x6b, 0xac, 0x52, 0xb7, 0x92, 0x96, 0x30, 0x2d,
-	0xc5, 0x2c, 0xb6, 0xcb, 0xfc, 0x5e, 0x2b, 0xd5, 0x79, 0x49, 0x08, 0x79, 0x1f, 0x1a, 0x54, 0x89,
-	0xc0, 0x4b, 0xb3, 0xda, 0x1e, 0x2a, 0x69, 0x31, 0x79, 0xf3, 0x6f, 0x0d, 0xd6, 0xba, 0x91, 0xed,
-	0x93, 0x97, 0x38, 0x62, 0xa2, 0xa7, 0x17, 0x3e, 0x8e, 0x68, 0x41, 0x4a, 0xc9, 0xaf, 0x65, 0x93,
-	0xff, 0x2e, 0x2c, 0x9f, 0x7a, 0x0e, 0x13, 0xcc, 0x80, 0x85, 0x42, 0xa5, 0x72, 0x27, 0xf8, 0x42,
-	0x96, 0xe3, 0x85, 0xa2, 0x50, 0xa7, 0x43, 0x47, 0x06, 0x1c, 0x9a, 0x0a, 0x08, 0xff, 0xae, 0xc1,
-	0xe2, 0x47, 0x81, 0xeb, 0xa7, 0x7d, 0xbb, 0xdc, 0x70, 0x5e, 0x65, 0xc7, 0x98, 0x10, 0xbb, 0x9f,
-	0xf4, 0x63, 0x89, 0x72, 0x75, 0x8c, 0xab, 0x34, 0xf4, 0xe7, 0x1a, 0xdc, 0x52, 0x6f, 0x83, 0xde,
-	0x76, 0xe0, 0x13, 0x2c, 0xba, 0x95, 0x7c, 0xba, 0x56, 0x7d, 0xba, 0x8a, 0xcf, 0x92, 0xd7, 0xf5,
-	0x2a, 0xac, 0x6a, 0x54, 0x62, 0xd5, 0x35, 0x05, 0xab, 0x24, 0x5c, 0x81, 0x2c, 0xae, 0x64, 0x11,
-	0x69, 0x31, 0x87, 0x48, 0x6a, 0xe5, 0xb5, 0x0b, 0x2a, 0xef, 0x0f, 0x0d, 0xf4, 0x33, 0x1c, 0xb3,
-	0x5c, 0xe0, 0x63, 0x91, 0xdb, 0x1b, 0xd0, 0xd1, 0xa8, 0xfa, 0x1a, 0x0d, 0x98, 0x4f, 0x01, 0x4a,
-	0x84, 0x21, 0x85, 0x26, 0x25, 0x88, 0xf5, 0x69, 0xad, 0xa2, 0x30, 0x1c, 0xa5, 0x57, 0xf8, 0x9d,
-	0x06, 0x8b, 0xcf, 0xc6, 0x6e, 0x3c, 0x43, 0xae, 0x5d, 0xb9, 0x67, 0x65, 0x0c, 0x69, 0x28, 0x86,
-	0xfc, 0xaa, 0xc1, 0x5a, 0x52, 0xdc, 0x93, 0x79, 0x73, 0x6a, 0xd8, 0x4a, 0xb3, 0x67, 0x7a, 0xd8,
-	0xd6, 0x61, 0xee, 0xc8, 0xf5, 0x62, 0x1c, 0x31, 0x5b, 0x9a, 0x96, 0x58, 0x51, 0x7d, 0x27, 0xf8,
-	0x55, 0x7c, 0x86, 0x47, 0xa2, 0xa1, 0x25, 0x4b, 0x5a, 0x98, 0xeb, 0x45, 0x36, 0x5e, 0x0a, 0xdf,
-	0x1e, 0x01, 0x0c, 0x27, 0x83, 0x38, 0x9f, 0x8f, 0x36, 0xf3, 0x13, 0x0d, 0xd7, 0x73, 0x34, 0xf6,
-	0x3c, 0x36, 0xdb, 0x48, 0x7b, 0xa8, 0x4e, 0x5f, 0x18, 0xca, 0x3d, 0x48, 0x96, 0xe6, 0x9b, 0x9c,
-	0xa1, 0xe9, 0x04, 0x59, 0x89, 0x25, 0x92, 0x41, 0x35, 0x36, 0x5a, 0xca, 0xea, 0x2a, 0xe6, 0xc6,
-	0x19, 0x66, 0xa5, 0x1f, 0x35, 0xb8, 0x59, 0x68, 0xd2, 0xdb, 0x09, 0x9e, 0xf9, 0xa7, 0x06, 0xe8,
-	0x63, 0xb7, 0x37, 0x90, 0xe4, 0xaa, 0xc3, 0x73, 0x0f, 0x56, 0xa8, 0x3c, 0x6f, 0xdf, 0x62, 0xfe,
-	0xe6, 0x41, 0xca, 0xd1, 0xa9, 0xd9, 0x16, 0xb6, 0x49, 0xfa, 0x05, 0x24, 0x56, 0x6a, 0x98, 0x9a,
-	0xd5, 0x80, 0x38, 0xa7, 0x94, 0xc8, 0x03, 0x68, 0x75, 0x9c, 0x5d, 0x8e, 0x34, 0xa5, 0x9f, 0x82,
-	0x4c, 0x35, 0xc3, 0x27, 0xfe, 0x31, 0x28, 0x56, 0xe6, 0x57, 0x70, 0x3d, 0xe7, 0xee, 0x25, 0xfb,
-	0xf2, 0x52, 0x6a, 0x85, 0x14, 0xfd, 0x15, 0xd1, 0xa0, 0x53, 0x9e, 0x95, 0x15, 0x33, 0xc7, 0xac,
-	0xbe, 0x69, 0x5f, 0xc3, 0x0e, 0xb3, 0x22, 0xa9, 0xef, 0x2c, 0x6a, 0x68, 0x45, 0x3d, 0x2a, 0xc8,
-	0xe3, 0x4e, 0x30, 0xe3, 0x17, 0xcd, 0xd7, 0xbc, 0x14, 0x72, 0x7a, 0xaf, 0xf4, 0x21, 0x37, 0xc3,
-	0x27, 0xcd, 0x44, 0xd0, 0xfc, 0x4b, 0x83, 0x1b, 0x1d, 0xff, 0x0b, 0x37, 0xc6, 0xd4, 0xa6, 0x6e,
-	0x90, 0x62, 0xed, 0x74, 0x44, 0x2d, 0xef, 0x81, 0x93, 0x14, 0x6b, 0x64, 0x52, 0xec, 0x5d, 0x58,
-	0xe5, 0xba, 0xe4, 0x3c, 0x6d, 0xb2, 0x3c, 0xcd, 0x33, 0x2a, 0xd3, 0xed, 0x1b, 0x0d, 0xd6, 0x0a,
-	0xcc, 0xfe, 0x4f, 0x93, 0xe6, 0x27, 0x0d, 0x6e, 0xa4, 0x23, 0x9f, 0xe7, 0xcd, 0x52, 0xa7, 0xd9,
-	0x74, 0xaa, 0x4d, 0x1b, 0x79, 0xea, 0xd5, 0x35, 0xa8, 0xb6, 0xa9, 0x1f, 0xa4, 0x36, 0x25, 0x19,
-	0xf4, 0x76, 0x40, 0x6c, 0xf7, 0xcd, 0x3c, 0xf0, 0x27, 0x29, 0xf4, 0x10, 0x16, 0x7a, 0x93, 0x77,
-	0x0a, 0xb4, 0x26, 0x02, 0x9b, 0x7d, 0x00, 0x32, 0xd6, 0x8b, 0xc8, 0x24, 0x44, 0xf7, 0xa1, 0xf5,
-	0x79, 0x32, 0x70, 0xa2, 0xeb, 0x42, 0x48, 0x1e, 0x41, 0x8d, 0xd5, 0x64, 0xe7, 0xe4, 0x51, 0xeb,
-	0x3e, 0xb4, 0x46, 0xc9, 0xe4, 0x90, 0x6e, 0x92, 0x67, 0x89, 0xa2, 0x4d, 0x8f, 0x61, 0xa9, 0x2f,
-	0xbf, 0x2f, 0xa0, 0x9b, 0xca, 0x60, 0x9f, 0x34, 0x2a, 0x43, 0x2f, 0x66, 0x90, 0x10, 0x7d, 0x00,
-	0x8b, 0x44, 0x7a, 0x1d, 0x40, 0x89, 0x57, 0xca, 0x93, 0x41, 0x91, 0xfa, 0xcf, 0xe0, 0x66, 0xbf,
-	0xf8, 0x0b, 0x02, 0xdd, 0xa9, 0xfe, 0xc2, 0xa0, 0x07, 0x9a, 0xd3, 0x44, 0x48, 0x88, 0x0e, 0x01,
-	0xc5, 0xb9, 0xaf, 0x0f, 0xb4, 0x21, 0x76, 0x16, 0x7e, 0x98, 0x14, 0x19, 0xfa, 0x0c, 0xf4, 0x7e,
-	0xc9, 0x64, 0x8d, 0xcc, 0xcc, 0x73, 0x5d, 0xe1, 0xe8, 0x5d, 0x7c, 0x24, 0xea, 0xe7, 0x86, 0x97,
-	0xd4, 0xb2, 0xc2, 0xd9, 0xcb, 0xf8, 0x7f, 0x05, 0x97, 0x84, 0xa8, 0x0b, 0xd7, 0xfb, 0xf9, 0x9e,
-	0x8e, 0x8a, 0x77, 0xa5, 0x37, 0x7b, 0xbb, 0x8a, 0x4d, 0x42, 0xf4, 0x14, 0xda, 0x83, 0x6c, 0xab,
-	0x42, 0xc9, 0x0b, 0x65, 0xbe, 0x63, 0x1b, 0x46, 0x19, 0x2b, 0x75, 0x59, 0xc1, 0x7e, 0xd9, 0xe5,
-	0x7c, 0x3b, 0x92, 0x5d, 0x2e, 0x6a, 0x1a, 0x27, 0xb0, 0xea, 0xaa, 0xa0, 0x88, 0x6e, 0x25, 0x38,
-	0x56, 0x80, 0xf2, 0xc6, 0x46, 0x39, 0x93, 0x9f, 0xd7, 0x57, 0xf1, 0x24, 0x3d, 0xaf, 0x08, 0xfa,
-	0x8c, 0x8d, 0x72, 0x26, 0x09, 0x1f, 0xb7, 0x3f, 0x5d, 0xda, 0xe6, 0x6f, 0xd6, 0x0f, 0xd8, 0xef,
-	0x8b, 0x39, 0xf6, 0x20, 0x7d, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xd5, 0x63, 0xdb,
-	0xcf, 0x16, 0x00, 0x00,
+func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_2ff972788727c811) }
+
+var fileDescriptor_group_2ff972788727c811 = []byte{
+	// 1480 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcd, 0x6f, 0xdc, 0x44,
+	0x14, 0x97, 0xf7, 0x23, 0xcd, 0xbe, 0x7c, 0x6c, 0x32, 0x6d, 0x52, 0xe3, 0x86, 0x2a, 0xb5, 0x50,
+	0x15, 0x55, 0x28, 0x91, 0x52, 0x84, 0x84, 0x5a, 0xa1, 0xa6, 0xf9, 0x68, 0x17, 0x48, 0xa2, 0x3a,
+	0xdb, 0x0b, 0x97, 0xe0, 0xae, 0xa7, 0x2b, 0xb3, 0x5e, 0xdb, 0xeb, 0xf1, 0x92, 0x96, 0x0b, 0x20,
+	0x24, 0x38, 0x20, 0x44, 0xaf, 0x1c, 0x39, 0xc0, 0x11, 0x71, 0xe0, 0xce, 0x81, 0x7f, 0x0c, 0xcd,
+	0x87, 0xbd, 0xe3, 0xf1, 0xc7, 0xae, 0x12, 0x89, 0x5e, 0x56, 0x3b, 0xef, 0xbd, 0x99, 0xf7, 0x31,
+	0xef, 0xfd, 0xde, 0x1b, 0xc3, 0x6a, 0x3f, 0x0a, 0xc6, 0xe1, 0x0e, 0xfb, 0xdd, 0x0e, 0xa3, 0x20,
+	0x0e, 0x50, 0x93, 0x2d, 0x8c, 0x3b, 0xa7, 0x21, 0xf6, 0xcf, 0x3b, 0xc7, 0x3b, 0xe1, 0xa0, 0xbf,
+	0xc3, 0x38, 0x3b, 0xc4, 0x19, 0x9c, 0x5f, 0x90, 0x9d, 0x0b, 0xc2, 0x25, 0xcd, 0x8f, 0x01, 0xf6,
+	0x83, 0xe1, 0x30, 0xf0, 0x2d, 0x4c, 0x42, 0xa4, 0xc3, 0xb5, 0xc3, 0x28, 0xda, 0x0f, 0x1c, 0xac,
+	0x6b, 0x9b, 0xda, 0x56, 0xd3, 0x4a, 0x96, 0x68, 0x1d, 0xe6, 0x0e, 0xa3, 0xe8, 0x98, 0xf4, 0xf5,
+	0xda, 0xa6, 0xb6, 0xd5, 0xb2, 0xc4, 0xca, 0x7c, 0x04, 0xe8, 0x09, 0xd5, 0xb5, 0xe7, 0x38, 0xc7,
+	0x78, 0xf8, 0x02, 0x47, 0x1d, 0xff, 0x65, 0x40, 0xa5, 0x9f, 0x13, 0x1c, 0x75, 0x0e, 0xd8, 0x31,
+	0x2d, 0x4b, 0xac, 0x10, 0x82, 0x86, 0x15, 0x78, 0x98, 0x9d, 0xd1, 0xb4, 0xd8, 0x7f, 0xf3, 0xdf,
+	0x1a, 0x2c, 0xef, 0x47, 0xd8, 0x8e, 0x31, 0x3b, 0xc8, 0xc2, 0x23, 0xb4, 0x07, 0xcb, 0x1d, 0xdf,
+	0x8d, 0xf9, 0x81, 0x9f, 0xb9, 0x24, 0xd6, 0xb5, 0xcd, 0xfa, 0xd6, 0xc2, 0xee, 0x3b, 0xdb, 0xdc,
+	0xc9, 0xbc, 0x46, 0x4b, 0xd9, 0x80, 0x36, 0xa0, 0xc5, 0xa4, 0x4e, 0xec, 0x21, 0x16, 0x26, 0x4f,
+	0x08, 0xc8, 0x84, 0xc5, 0x8e, 0x1f, 0x47, 0x81, 0x33, 0xee, 0xc5, 0x6e, 0xe0, 0xeb, 0x75, 0x26,
+	0x90, 0xa1, 0x51, 0x99, 0x93, 0x20, 0x76, 0x5f, 0xba, 0x3d, 0x9b, 0xc9, 0x34, 0xb8, 0x8c, 0x4c,
+	0xa3, 0xf1, 0x3a, 0xb2, 0x7b, 0xf8, 0x79, 0xe4, 0xe9, 0x4d, 0xc6, 0x4e, 0x96, 0x68, 0x05, 0xea,
+	0x87, 0xaf, 0x62, 0x7d, 0x8e, 0x51, 0xe9, 0x5f, 0xb4, 0x09, 0x0b, 0xa7, 0x21, 0x8e, 0xd8, 0xc6,
+	0xce, 0x81, 0x7e, 0x8d, 0x71, 0x64, 0x12, 0x32, 0x60, 0xfe, 0x34, 0x14, 0x71, 0x9b, 0x67, 0xec,
+	0x74, 0x8d, 0x6e, 0x03, 0x1c, 0x45, 0xc1, 0x50, 0x70, 0x5b, 0x8c, 0x2b, 0x51, 0xcc, 0xd7, 0xd0,
+	0xce, 0x04, 0xf1, 0x32, 0x97, 0x89, 0x3e, 0x10, 0x41, 0xa3, 0x11, 0x65, 0x31, 0x59, 0xd8, 0x5d,
+	0xdf, 0x0e, 0x68, 0x0e, 0xb9, 0xc3, 0x73, 0xe2, 0x0c, 0xb6, 0x53, 0xae, 0x35, 0x11, 0x34, 0x23,
+	0x58, 0x79, 0x82, 0x63, 0xb6, 0x26, 0x8c, 0x87, 0x47, 0xd4, 0x59, 0x2e, 0x70, 0x90, 0x5e, 0x5f,
+	0xcb, 0x92, 0x49, 0x6a, 0x38, 0x6a, 0xd5, 0xe1, 0xa8, 0x67, 0xc3, 0x61, 0x7e, 0xaf, 0xc1, 0xaa,
+	0xa2, 0xf4, 0x52, 0x1e, 0x3f, 0x84, 0xa5, 0xd4, 0x11, 0x66, 0x69, 0x9d, 0x25, 0x5a, 0x99, 0xd7,
+	0x59, 0x61, 0xf3, 0x77, 0x0d, 0xda, 0x67, 0xc2, 0x8a, 0xc4, 0xf3, 0x4c, 0x0c, 0xb5, 0x19, 0x63,
+	0x98, 0xf1, 0xb5, 0x56, 0x79, 0xf5, 0x75, 0xf5, 0xea, 0xd5, 0x48, 0x36, 0x72, 0x91, 0x34, 0xbf,
+	0x06, 0x23, 0x09, 0xd6, 0x5e, 0x18, 0x7a, 0x22, 0x7b, 0xa9, 0x0b, 0xd4, 0x62, 0x59, 0xb7, 0xa6,
+	0xe8, 0x9e, 0x7e, 0x4b, 0x53, 0xac, 0x33, 0x7f, 0x6d, 0xc0, 0x9d, 0x12, 0xe5, 0xe7, 0x07, 0x76,
+	0x6c, 0x9f, 0x53, 0x39, 0xb4, 0x0c, 0xb5, 0x54, 0x7b, 0xad, 0x73, 0x40, 0x6f, 0x52, 0x24, 0x8b,
+	0xd0, 0x99, 0x2c, 0xa7, 0x46, 0xc3, 0x80, 0xf9, 0x6e, 0x20, 0xb8, 0x3c, 0x14, 0xe9, 0x9a, 0xc2,
+	0xcf, 0x91, 0x67, 0xf7, 0x59, 0xad, 0x36, 0x2d, 0xf6, 0x9f, 0x9e, 0x67, 0xe1, 0xd1, 0x18, 0x93,
+	0x98, 0x66, 0x07, 0xaf, 0x57, 0x89, 0x42, 0xf9, 0x4f, 0x6d, 0xdf, 0xf1, 0xb0, 0x43, 0xf9, 0xbc,
+	0x6a, 0x25, 0x0a, 0xb5, 0x74, 0xcf, 0x71, 0xba, 0xee, 0x10, 0xb3, 0x9a, 0xad, 0x5b, 0xc9, 0x12,
+	0xdd, 0x83, 0x95, 0xc4, 0xae, 0x13, 0xb7, 0x37, 0xf0, 0x29, 0x12, 0xf1, 0xc2, 0xcd, 0xd1, 0xd1,
+	0x5d, 0x58, 0xe6, 0x56, 0xa6, 0x92, 0xc0, 0x24, 0x15, 0x2a, 0xda, 0x82, 0x76, 0xb2, 0x37, 0x01,
+	0x9e, 0x05, 0x26, 0xa8, 0x92, 0xd1, 0x7b, 0xb0, 0xc4, 0xf7, 0x26, 0x72, 0x8b, 0x4c, 0x2e, 0x4b,
+	0xa4, 0xf7, 0x2b, 0x7c, 0xa1, 0x54, 0x7d, 0x89, 0xdf, 0xaf, 0x44, 0xa2, 0x31, 0xeb, 0xbe, 0x0e,
+	0xb1, 0xbe, 0xcc, 0x63, 0x46, 0xff, 0x53, 0x68, 0xe4, 0x22, 0x67, 0xb1, 0x1d, 0x8f, 0x89, 0xde,
+	0x66, 0xbc, 0x0c, 0x6d, 0x22, 0x63, 0x61, 0x32, 0xf6, 0x62, 0x7d, 0x45, 0x96, 0xe1, 0x34, 0x73,
+	0x04, 0xb7, 0x4a, 0x52, 0x83, 0x66, 0x06, 0xba, 0x01, 0xcd, 0xfd, 0x60, 0xec, 0xc7, 0xa2, 0x98,
+	0xf9, 0x02, 0x3d, 0x84, 0x06, 0xb3, 0xb5, 0xc6, 0x2a, 0x75, 0x2b, 0x69, 0x09, 0xd3, 0x52, 0xcc,
+	0x62, 0xbb, 0xcc, 0x1f, 0xb5, 0x52, 0x9d, 0x97, 0x84, 0x90, 0x0f, 0xa1, 0x41, 0x95, 0x08, 0xbc,
+	0x34, 0xab, 0xed, 0xa1, 0x92, 0x16, 0x93, 0x37, 0xff, 0xd1, 0x60, 0xad, 0x1b, 0xd9, 0x3e, 0x79,
+	0x89, 0x23, 0x26, 0x7a, 0x7a, 0xe1, 0xe3, 0x88, 0x16, 0xa4, 0x94, 0xfc, 0x5a, 0x36, 0xf9, 0xef,
+	0xc2, 0xf2, 0xa9, 0xe7, 0x30, 0xc1, 0x0c, 0x58, 0x28, 0x54, 0x2a, 0x77, 0x82, 0x2f, 0x64, 0x39,
+	0x5e, 0x28, 0x0a, 0x75, 0x3a, 0x74, 0x64, 0xc0, 0xa1, 0xa9, 0x80, 0xf0, 0x1f, 0x1a, 0x2c, 0x7e,
+	0x12, 0xb8, 0x7e, 0xda, 0xb7, 0xcb, 0x0d, 0xe7, 0x55, 0x76, 0x8c, 0x09, 0xb1, 0xfb, 0x49, 0x3f,
+	0x96, 0x28, 0x57, 0xc7, 0xb8, 0x4a, 0x43, 0x7f, 0xa9, 0xc1, 0x2d, 0xf5, 0x36, 0xe8, 0x6d, 0x07,
+	0x3e, 0xc1, 0xa2, 0x5b, 0xc9, 0xa7, 0x6b, 0xd5, 0xa7, 0xab, 0xf8, 0x2c, 0x79, 0x5d, 0xaf, 0xc2,
+	0xaa, 0x46, 0x25, 0x56, 0x5d, 0x53, 0xb0, 0x4a, 0xc2, 0x15, 0xc8, 0xe2, 0x4a, 0x16, 0x91, 0x16,
+	0x73, 0x88, 0xa4, 0x56, 0x5e, 0xbb, 0xa0, 0xf2, 0xfe, 0xd4, 0x40, 0x3f, 0xc3, 0x31, 0xcb, 0x05,
+	0x3e, 0x16, 0xb9, 0xbd, 0x01, 0x1d, 0x8d, 0xaa, 0xaf, 0xd1, 0x80, 0xf9, 0x14, 0xa0, 0x44, 0x18,
+	0x52, 0x68, 0x52, 0x82, 0x58, 0x9f, 0xd6, 0x2a, 0x0a, 0xc3, 0x51, 0x7a, 0x85, 0x3f, 0x68, 0xb0,
+	0xf8, 0x6c, 0xec, 0xc6, 0x33, 0xe4, 0xda, 0x95, 0x7b, 0x56, 0xc6, 0x90, 0x86, 0x62, 0xc8, 0x6f,
+	0x1a, 0xac, 0x25, 0xc5, 0x3d, 0x99, 0x37, 0xa7, 0x86, 0xad, 0x34, 0x7b, 0xa6, 0x87, 0x6d, 0x1d,
+	0xe6, 0x8e, 0x5c, 0x2f, 0xc6, 0x11, 0xb3, 0xa5, 0x69, 0x89, 0x15, 0xd5, 0x77, 0x82, 0x5f, 0xc5,
+	0x67, 0x78, 0x24, 0x1a, 0x5a, 0xb2, 0xa4, 0x85, 0xb9, 0x5e, 0x64, 0xe3, 0xa5, 0xf0, 0xed, 0x11,
+	0xc0, 0x70, 0x32, 0x88, 0xf3, 0xf9, 0x68, 0x33, 0x3f, 0xd1, 0x70, 0x3d, 0x47, 0x63, 0xcf, 0x63,
+	0xb3, 0x8d, 0xb4, 0x87, 0xea, 0xf4, 0x85, 0xa1, 0xdc, 0x83, 0x64, 0x69, 0xbe, 0xc9, 0x19, 0x9a,
+	0x4e, 0x90, 0x95, 0x58, 0x22, 0x19, 0x54, 0x63, 0xa3, 0xa5, 0xac, 0xae, 0x62, 0x6e, 0x9c, 0x61,
+	0x56, 0xfa, 0x59, 0x83, 0x9b, 0x85, 0x26, 0xbd, 0x9d, 0xe0, 0x99, 0x7f, 0x69, 0x80, 0x3e, 0x75,
+	0x7b, 0x03, 0x49, 0xae, 0x3a, 0x3c, 0xf7, 0x60, 0x85, 0xca, 0xf3, 0xf6, 0x2d, 0xe6, 0x6f, 0x1e,
+	0xa4, 0x1c, 0x9d, 0x9a, 0x6d, 0x61, 0x9b, 0xa4, 0x2f, 0x20, 0xb1, 0x52, 0xc3, 0xd4, 0xac, 0x06,
+	0xc4, 0x39, 0xa5, 0x44, 0x1e, 0x40, 0xab, 0xe3, 0xec, 0x72, 0xa4, 0x29, 0x7d, 0x0a, 0x32, 0xd5,
+	0x0c, 0x9f, 0xf8, 0x63, 0x50, 0xac, 0xcc, 0x6f, 0xe0, 0x7a, 0xce, 0xdd, 0x4b, 0xf6, 0xe5, 0xa5,
+	0xd4, 0x0a, 0x29, 0xfa, 0x2b, 0xa2, 0x41, 0xa7, 0x3c, 0x2b, 0x2b, 0x66, 0x8e, 0x59, 0x7d, 0xd3,
+	0xbe, 0x86, 0x1d, 0x66, 0x45, 0x52, 0xdf, 0x59, 0xd4, 0xd0, 0x8a, 0x7a, 0x54, 0x90, 0xc7, 0x9d,
+	0x60, 0xc6, 0x17, 0xcd, 0xb7, 0xbc, 0x14, 0x72, 0x7a, 0xaf, 0xf4, 0x90, 0x9b, 0xe1, 0x49, 0x33,
+	0x11, 0x34, 0xff, 0xd6, 0xe0, 0x46, 0xc7, 0xff, 0xca, 0x8d, 0x31, 0xb5, 0xa9, 0x1b, 0xa4, 0x58,
+	0x3b, 0x1d, 0x51, 0xcb, 0x7b, 0xe0, 0x24, 0xc5, 0x1a, 0x99, 0x14, 0x7b, 0x1f, 0x56, 0xb9, 0x2e,
+	0x39, 0x4f, 0x9b, 0x2c, 0x4f, 0xf3, 0x8c, 0xca, 0x74, 0xfb, 0x4e, 0x83, 0xb5, 0x02, 0xb3, 0xff,
+	0xd7, 0xa4, 0xf1, 0xe1, 0x46, 0x3a, 0xf1, 0x79, 0xde, 0x2c, 0x65, 0x7a, 0xa5, 0x9e, 0x60, 0xfe,
+	0x24, 0x75, 0x21, 0x49, 0xe1, 0xdb, 0xc1, 0xa8, 0xdd, 0x37, 0xf3, 0xc0, 0xbf, 0x38, 0xa1, 0x87,
+	0xb0, 0xd0, 0x9b, 0x7c, 0x86, 0x40, 0x6b, 0x22, 0x6e, 0xd9, 0xef, 0x3b, 0xc6, 0x7a, 0x11, 0x99,
+	0x84, 0xe8, 0x3e, 0xb4, 0xbe, 0x4c, 0xe6, 0x49, 0x74, 0x5d, 0x08, 0xc9, 0x13, 0xa6, 0xb1, 0x9a,
+	0xec, 0x9c, 0x7c, 0xb3, 0xba, 0x0f, 0xad, 0x51, 0x32, 0x18, 0xa4, 0x9b, 0xe4, 0x51, 0xa1, 0x68,
+	0xd3, 0x63, 0x58, 0xea, 0xcb, 0x9f, 0x0f, 0xd0, 0x4d, 0x65, 0x6e, 0x4f, 0xfa, 0x90, 0xa1, 0x17,
+	0x33, 0x48, 0x88, 0x3e, 0x82, 0x45, 0x22, 0x3d, 0xfe, 0x51, 0xe2, 0x95, 0xf2, 0x45, 0xa0, 0x48,
+	0xfd, 0x17, 0x70, 0xb3, 0x5f, 0xfc, 0x40, 0x40, 0x77, 0xaa, 0x1f, 0x10, 0xf4, 0x40, 0x73, 0x9a,
+	0x08, 0x09, 0xd1, 0x21, 0xa0, 0x38, 0xf7, 0xb8, 0x40, 0x1b, 0x62, 0x67, 0xe1, 0xbb, 0xa3, 0xc8,
+	0xd0, 0x67, 0xa0, 0xf7, 0x4b, 0x06, 0x67, 0x64, 0x66, 0xbe, 0xc6, 0x15, 0x4e, 0xd6, 0xc5, 0x47,
+	0xa2, 0x7e, 0x6e, 0x36, 0x49, 0x2d, 0x2b, 0x1c, 0xad, 0x8c, 0x77, 0x2b, 0xb8, 0x24, 0x44, 0x5d,
+	0xb8, 0xde, 0xcf, 0xb7, 0x6c, 0x54, 0xbc, 0x2b, 0xbd, 0xd9, 0xdb, 0x55, 0x6c, 0x12, 0xa2, 0xa7,
+	0xd0, 0x1e, 0x64, 0x3b, 0x11, 0x4a, 0x3e, 0x40, 0xe6, 0x1b, 0xb2, 0x61, 0x94, 0xb1, 0x52, 0x97,
+	0x15, 0x68, 0x97, 0x5d, 0xce, 0x77, 0x1b, 0xd9, 0xe5, 0xa2, 0x9e, 0x70, 0x02, 0xab, 0xae, 0x8a,
+	0x79, 0xe8, 0x56, 0x02, 0x53, 0x05, 0x20, 0x6e, 0x6c, 0x94, 0x33, 0xf9, 0x79, 0x7d, 0x15, 0x4f,
+	0xd2, 0xf3, 0x8a, 0xa0, 0xcd, 0xd8, 0x28, 0x67, 0x92, 0xf0, 0x71, 0xfb, 0xf3, 0xa5, 0x6d, 0xfe,
+	0x49, 0xfa, 0x01, 0xfb, 0x7d, 0x31, 0xc7, 0xbe, 0x37, 0xdf, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff,
+	0x77, 0xc5, 0xd1, 0xfe, 0xae, 0x16, 0x00, 0x00,
 }
diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto
index f81b9da41..cf207d69a 100644
--- a/pkg/proto/group/group.proto
+++ b/pkg/proto/group/group.proto
@@ -21,7 +21,7 @@ message CreateGroupReq{
   string FaceUrl = 5;
   string Ext = 6;
   string OperationID = 7;
-  string OpUserID = 8;
+  string OpUserID = 8;  //app manager or group owner
   string FromUserID = 9;
 }
 
@@ -34,7 +34,7 @@ message CreateGroupResp{
 message GetGroupsInfoReq{
   repeated string GroupIDList = 1;
   string OperationID = 2;
-  string OpUserID = 3;
+  string OpUserID = 3; //No verification permission
 }
 
 message GetGroupsInfoResp{
@@ -46,16 +46,15 @@ message GetGroupsInfoResp{
 
 message SetGroupInfoReq{
   open_im_sdk.GroupInfo GroupInfo = 1;
-  string OpUserID = 2;
-  string FromUserID = 3;
-  string OperationID = 4;
+  string OpUserID = 2; //app manager or group owner
+  string OperationID = 3;
 }
 
-//owner or manager
+
 message GetGroupApplicationListReq {
-  string OpUserID = 1;
+  string OpUserID = 1; //app manager or group owner(manager)
   string OperationID = 2;
-  string FromUserID = 3; //owner or manager
+  string FromUserID = 3; //owner or manager (Received)
 }
 
 message GetGroupApplicationList_Data_User {
@@ -93,16 +92,15 @@ message TransferGroupOwnerReq {
   string OldOwnerUserID = 2;
   string NewOwnerUserID = 3;
   string OperationID = 4;
-  string OpUserID = 5;
+  string OpUserID = 5; //app manager or group owner
 }
 
 
 message JoinGroupReq{
   string GroupID = 1;
   string ReqMessage = 2;
-  string FromUserID = 3;
+  string OpUserID = 3;
   string OperationID = 4;
-  string OpUserID = 5;
 }
 
 message GroupApplicationResponseReq{
@@ -110,12 +108,10 @@ message GroupApplicationResponseReq{
   string OpUserID = 2;
   string GroupID = 3;
   string FromUserID = 4;  //请求加群:请求者,邀请加群:邀请人
-  string ToUserID = 7;  //请求加群:0,邀请加群:被邀请人
-  int64 AddTime = 10;
-  string HandledMsg = 12;
- // int32 Type = 13;
-//  int32 HandleStatus = 14;
- int32 HandleResult = 15;
+  string ToUserID = 5;  //请求加群:0,邀请加群:被邀请人
+  int64 AddTime = 6;
+  string HandledMsg = 7;
+  int32 HandleResult = 8;
 }
 
 
@@ -126,22 +122,21 @@ message SetOwnerGroupNickNameReq{
   string Nickname = 2;
   string OperationID = 3;
   string FromUserID = 4;
-  string OpUserID = 5;
+  string OpUserID = 5; //app manger or FromUserID
 }
 
 
 message QuitGroupReq{
   string GroupID = 1;
   string OperationID = 2;
-  string FromUserID = 3;
-  string OpUserID = 4;
+  string OpUserID = 3;
 }
 
 
 
 message GetGroupMemberListReq {
   string GroupID = 1;
-  string OpUserID = 2;
+  string OpUserID = 2;  //No verification permission
   string OperationID = 3;
   int32 Filter = 4;
   int32 NextSeq = 5;
@@ -159,7 +154,7 @@ message GetGroupMemberListResp {
 message GetGroupMembersInfoReq {
   string GroupID = 1;
   repeated string memberList = 2;
-  string OpUserID = 3;
+  string OpUserID = 3;  //No verification permission
   string OperationID = 4;
 }
 
@@ -174,7 +169,7 @@ message KickGroupMemberReq {
   repeated string KickedUserIDList = 2;
   string Reason = 3;
   string OperationID = 5;
-  string OpUserID = 6;
+  string OpUserID = 6;  //app manger or group manager
 }
 
 message Id2Result {
@@ -192,7 +187,7 @@ message KickGroupMemberResp {
 message GetJoinedGroupListReq {
   string FromUserID = 1;
   string operationID = 2;
-  string OpUserID = 3;
+  string OpUserID = 3; //app manager or FromUserID
 }
 
 
@@ -208,7 +203,7 @@ message InviteUserToGroupReq {
   string GroupID = 3;
   string Reason = 4;
   repeated string InvitedUserIDList = 5;
-  string OpUserID = 6;
+  string OpUserID = 6; //group member or app manager
 }
 
 message InviteUserToGroupResp {
@@ -220,7 +215,7 @@ message InviteUserToGroupResp {
 
 message GetGroupAllMemberReq {
   string GroupID = 1;
-  string OpUserID = 2;
+  string OpUserID = 2; //No verification permission
   string OperationID = 3;
 }
 
diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go
index b65f2980c..6809ce398 100644
--- a/pkg/proto/sdk_ws/ws.pb.go
+++ b/pkg/proto/sdk_ws/ws.pb.go
@@ -34,7 +34,7 @@ func (m *PullMessageBySeqListResp) Reset()         { *m = PullMessageBySeqListRe
 func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) }
 func (*PullMessageBySeqListResp) ProtoMessage()    {}
 func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{0}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{0}
 }
 func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b)
@@ -109,7 +109,7 @@ func (m *PullMessageBySeqListReq) Reset()         { *m = PullMessageBySeqListReq
 func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) }
 func (*PullMessageBySeqListReq) ProtoMessage()    {}
 func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{1}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{1}
 }
 func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b)
@@ -164,7 +164,7 @@ func (m *PullMessageReq) Reset()         { *m = PullMessageReq{} }
 func (m *PullMessageReq) String() string { return proto.CompactTextString(m) }
 func (*PullMessageReq) ProtoMessage()    {}
 func (*PullMessageReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{2}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{2}
 }
 func (m *PullMessageReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageReq.Unmarshal(m, b)
@@ -228,7 +228,7 @@ func (m *PullMessageResp) Reset()         { *m = PullMessageResp{} }
 func (m *PullMessageResp) String() string { return proto.CompactTextString(m) }
 func (*PullMessageResp) ProtoMessage()    {}
 func (*PullMessageResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{3}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{3}
 }
 func (m *PullMessageResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PullMessageResp.Unmarshal(m, b)
@@ -300,7 +300,7 @@ func (m *GetMaxAndMinSeqReq) Reset()         { *m = GetMaxAndMinSeqReq{} }
 func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) }
 func (*GetMaxAndMinSeqReq) ProtoMessage()    {}
 func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{4}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{4}
 }
 func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b)
@@ -332,7 +332,7 @@ func (m *GetMaxAndMinSeqResp) Reset()         { *m = GetMaxAndMinSeqResp{} }
 func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) }
 func (*GetMaxAndMinSeqResp) ProtoMessage()    {}
 func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{5}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{5}
 }
 func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b)
@@ -380,7 +380,7 @@ func (m *GatherFormat) Reset()         { *m = GatherFormat{} }
 func (m *GatherFormat) String() string { return proto.CompactTextString(m) }
 func (*GatherFormat) ProtoMessage()    {}
 func (*GatherFormat) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{6}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{6}
 }
 func (m *GatherFormat) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GatherFormat.Unmarshal(m, b)
@@ -427,7 +427,7 @@ func (m *UserSendMsgResp) Reset()         { *m = UserSendMsgResp{} }
 func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) }
 func (*UserSendMsgResp) ProtoMessage()    {}
 func (*UserSendMsgResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{7}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{7}
 }
 func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b)
@@ -496,7 +496,7 @@ func (m *MsgData) Reset()         { *m = MsgData{} }
 func (m *MsgData) String() string { return proto.CompactTextString(m) }
 func (*MsgData) ProtoMessage()    {}
 func (*MsgData) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{8}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{8}
 }
 func (m *MsgData) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MsgData.Unmarshal(m, b)
@@ -657,7 +657,7 @@ func (m *OfflinePushInfo) Reset()         { *m = OfflinePushInfo{} }
 func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) }
 func (*OfflinePushInfo) ProtoMessage()    {}
 func (*OfflinePushInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{9}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{9}
 }
 func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b)
@@ -732,7 +732,7 @@ func (m *GroupInfo) Reset()         { *m = GroupInfo{} }
 func (m *GroupInfo) String() string { return proto.CompactTextString(m) }
 func (*GroupInfo) ProtoMessage()    {}
 func (*GroupInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{10}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{10}
 }
 func (m *GroupInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupInfo.Unmarshal(m, b)
@@ -824,6 +824,7 @@ type GroupMemberFullInfo struct {
 	NickName             string   `protobuf:"bytes,5,opt,name=NickName" json:"NickName,omitempty"`
 	FaceUrl              string   `protobuf:"bytes,6,opt,name=FaceUrl" json:"FaceUrl,omitempty"`
 	FriendRemark         string   `protobuf:"bytes,7,opt,name=FriendRemark" json:"FriendRemark,omitempty"`
+	AppMangerLevel       int32    `protobuf:"varint,8,opt,name=AppMangerLevel" json:"AppMangerLevel,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -833,7 +834,7 @@ func (m *GroupMemberFullInfo) Reset()         { *m = GroupMemberFullInfo{} }
 func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) }
 func (*GroupMemberFullInfo) ProtoMessage()    {}
 func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{11}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{11}
 }
 func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b)
@@ -902,6 +903,13 @@ func (m *GroupMemberFullInfo) GetFriendRemark() string {
 	return ""
 }
 
+func (m *GroupMemberFullInfo) GetAppMangerLevel() int32 {
+	if m != nil {
+		return m.AppMangerLevel
+	}
+	return 0
+}
+
 // private, Friends have permission to view
 type UserInfo struct {
 	UserID               string   `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"`
@@ -921,7 +929,7 @@ func (m *UserInfo) Reset()         { *m = UserInfo{} }
 func (m *UserInfo) String() string { return proto.CompactTextString(m) }
 func (*UserInfo) ProtoMessage()    {}
 func (*UserInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{12}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{12}
 }
 func (m *UserInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserInfo.Unmarshal(m, b)
@@ -1012,7 +1020,7 @@ func (m *PublicUserInfo) Reset()         { *m = PublicUserInfo{} }
 func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) }
 func (*PublicUserInfo) ProtoMessage()    {}
 func (*PublicUserInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{13}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{13}
 }
 func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b)
@@ -1072,7 +1080,7 @@ func (m *TipsComm) Reset()         { *m = TipsComm{} }
 func (m *TipsComm) String() string { return proto.CompactTextString(m) }
 func (*TipsComm) ProtoMessage()    {}
 func (*TipsComm) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{14}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{14}
 }
 func (m *TipsComm) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TipsComm.Unmarshal(m, b)
@@ -1121,7 +1129,7 @@ func (m *MemberEnterTips) Reset()         { *m = MemberEnterTips{} }
 func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) }
 func (*MemberEnterTips) ProtoMessage()    {}
 func (*MemberEnterTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{15}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{15}
 }
 func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b)
@@ -1176,7 +1184,7 @@ func (m *MemberLeaveTips) Reset()         { *m = MemberLeaveTips{} }
 func (m *MemberLeaveTips) String() string { return proto.CompactTextString(m) }
 func (*MemberLeaveTips) ProtoMessage()    {}
 func (*MemberLeaveTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{16}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{16}
 }
 func (m *MemberLeaveTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberLeaveTips.Unmarshal(m, b)
@@ -1231,7 +1239,7 @@ func (m *MemberInvitedTips) Reset()         { *m = MemberInvitedTips{} }
 func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) }
 func (*MemberInvitedTips) ProtoMessage()    {}
 func (*MemberInvitedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{17}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{17}
 }
 func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b)
@@ -1293,7 +1301,7 @@ func (m *MemberKickedTips) Reset()         { *m = MemberKickedTips{} }
 func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) }
 func (*MemberKickedTips) ProtoMessage()    {}
 func (*MemberKickedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{18}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{18}
 }
 func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b)
@@ -1356,7 +1364,7 @@ func (m *MemberInfoChangedTips) Reset()         { *m = MemberInfoChangedTips{} }
 func (m *MemberInfoChangedTips) String() string { return proto.CompactTextString(m) }
 func (*MemberInfoChangedTips) ProtoMessage()    {}
 func (*MemberInfoChangedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{19}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{19}
 }
 func (m *MemberInfoChangedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_MemberInfoChangedTips.Unmarshal(m, b)
@@ -1425,7 +1433,7 @@ func (m *GroupCreatedTips) Reset()         { *m = GroupCreatedTips{} }
 func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupCreatedTips) ProtoMessage()    {}
 func (*GroupCreatedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{20}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{20}
 }
 func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b)
@@ -1486,7 +1494,7 @@ func (m *GroupInfoChangedTips) Reset()         { *m = GroupInfoChangedTips{} }
 func (m *GroupInfoChangedTips) String() string { return proto.CompactTextString(m) }
 func (*GroupInfoChangedTips) ProtoMessage()    {}
 func (*GroupInfoChangedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{21}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{21}
 }
 func (m *GroupInfoChangedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GroupInfoChangedTips.Unmarshal(m, b)
@@ -1540,7 +1548,7 @@ func (m *ReceiveJoinApplicationTips) Reset()         { *m = ReceiveJoinApplicati
 func (m *ReceiveJoinApplicationTips) String() string { return proto.CompactTextString(m) }
 func (*ReceiveJoinApplicationTips) ProtoMessage()    {}
 func (*ReceiveJoinApplicationTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{22}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{22}
 }
 func (m *ReceiveJoinApplicationTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ReceiveJoinApplicationTips.Unmarshal(m, b)
@@ -1595,7 +1603,7 @@ func (m *ApplicationProcessedTips) Reset()         { *m = ApplicationProcessedTi
 func (m *ApplicationProcessedTips) String() string { return proto.CompactTextString(m) }
 func (*ApplicationProcessedTips) ProtoMessage()    {}
 func (*ApplicationProcessedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{23}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{23}
 }
 func (m *ApplicationProcessedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ApplicationProcessedTips.Unmarshal(m, b)
@@ -1658,7 +1666,7 @@ func (m *FriendInfo) Reset()         { *m = FriendInfo{} }
 func (m *FriendInfo) String() string { return proto.CompactTextString(m) }
 func (*FriendInfo) ProtoMessage()    {}
 func (*FriendInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{24}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{24}
 }
 func (m *FriendInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendInfo.Unmarshal(m, b)
@@ -1719,7 +1727,7 @@ func (m *FriendApplication) Reset()         { *m = FriendApplication{} }
 func (m *FriendApplication) String() string { return proto.CompactTextString(m) }
 func (*FriendApplication) ProtoMessage()    {}
 func (*FriendApplication) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{25}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{25}
 }
 func (m *FriendApplication) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplication.Unmarshal(m, b)
@@ -1775,7 +1783,7 @@ func (m *FriendApplicationAddedTips) Reset()         { *m = FriendApplicationAdd
 func (m *FriendApplicationAddedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendApplicationAddedTips) ProtoMessage()    {}
 func (*FriendApplicationAddedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{26}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{26}
 }
 func (m *FriendApplicationAddedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplicationAddedTips.Unmarshal(m, b)
@@ -1838,7 +1846,7 @@ func (m *FriendApplicationProcessedTips) Reset()         { *m = FriendApplicatio
 func (m *FriendApplicationProcessedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendApplicationProcessedTips) ProtoMessage()    {}
 func (*FriendApplicationProcessedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{27}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{27}
 }
 func (m *FriendApplicationProcessedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendApplicationProcessedTips.Unmarshal(m, b)
@@ -1898,7 +1906,7 @@ func (m *FriendAddedTips) Reset()         { *m = FriendAddedTips{} }
 func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendAddedTips) ProtoMessage()    {}
 func (*FriendAddedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{28}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{28}
 }
 func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b)
@@ -1944,7 +1952,7 @@ func (m *FriendDeletedTips) Reset()         { *m = FriendDeletedTips{} }
 func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendDeletedTips) ProtoMessage()    {}
 func (*FriendDeletedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{29}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{29}
 }
 func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b)
@@ -1991,7 +1999,7 @@ func (m *BlackInfo) Reset()         { *m = BlackInfo{} }
 func (m *BlackInfo) String() string { return proto.CompactTextString(m) }
 func (*BlackInfo) ProtoMessage()    {}
 func (*BlackInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{30}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{30}
 }
 func (m *BlackInfo) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackInfo.Unmarshal(m, b)
@@ -2044,7 +2052,7 @@ func (m *BlackAddedTips) Reset()         { *m = BlackAddedTips{} }
 func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) }
 func (*BlackAddedTips) ProtoMessage()    {}
 func (*BlackAddedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{31}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{31}
 }
 func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b)
@@ -2090,7 +2098,7 @@ func (m *BlackDeletedTips) Reset()         { *m = BlackDeletedTips{} }
 func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) }
 func (*BlackDeletedTips) ProtoMessage()    {}
 func (*BlackDeletedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{32}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{32}
 }
 func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b)
@@ -2137,7 +2145,7 @@ func (m *FriendInfoChangedTips) Reset()         { *m = FriendInfoChangedTips{} }
 func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) }
 func (*FriendInfoChangedTips) ProtoMessage()    {}
 func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{33}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{33}
 }
 func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b)
@@ -2192,7 +2200,7 @@ func (m *SelfInfoUpdatedTips) Reset()         { *m = SelfInfoUpdatedTips{} }
 func (m *SelfInfoUpdatedTips) String() string { return proto.CompactTextString(m) }
 func (*SelfInfoUpdatedTips) ProtoMessage()    {}
 func (*SelfInfoUpdatedTips) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ws_9a3c519aa1c52df5, []int{34}
+	return fileDescriptor_ws_3380b8a9bc5ee255, []int{34}
 }
 func (m *SelfInfoUpdatedTips) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SelfInfoUpdatedTips.Unmarshal(m, b)
@@ -2272,118 +2280,119 @@ func init() {
 	proto.RegisterType((*SelfInfoUpdatedTips)(nil), "open_im_sdk.SelfInfoUpdatedTips")
 }
 
-func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_9a3c519aa1c52df5) }
+func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_3380b8a9bc5ee255) }
 
-var fileDescriptor_ws_9a3c519aa1c52df5 = []byte{
-	// 1753 bytes of a gzipped FileDescriptorProto
+var fileDescriptor_ws_3380b8a9bc5ee255 = []byte{
+	// 1769 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x6f, 0x23, 0x4b,
-	0x11, 0xd7, 0xf8, 0x5f, 0xec, 0xb2, 0x37, 0xce, 0xce, 0xee, 0xe6, 0x0d, 0xe1, 0x69, 0x65, 0x46,
-	0x08, 0x59, 0xe8, 0x29, 0x4f, 0x24, 0x42, 0xbc, 0x2c, 0x02, 0x36, 0x89, 0x93, 0x10, 0x88, 0xd7,
-	0xd1, 0x38, 0x11, 0xc7, 0xd5, 0xc4, 0xd3, 0x76, 0x1a, 0x8f, 0x7b, 0x9c, 0xee, 0xb1, 0x77, 0x73,
-	0xe1, 0x6b, 0x70, 0x42, 0x02, 0x71, 0x40, 0x08, 0x0e, 0x88, 0x03, 0x1f, 0x81, 0x13, 0x9f, 0x02,
-	0xc1, 0x91, 0x0b, 0x1c, 0xe1, 0x80, 0xba, 0xba, 0x67, 0xa6, 0x27, 0x0e, 0x89, 0x13, 0xb4, 0x7b,
-	0x79, 0xb7, 0xa9, 0x9f, 0xab, 0xba, 0x7e, 0xf5, 0xa7, 0x6b, 0x6a, 0x12, 0x68, 0x8a, 0x60, 0xfc,
-	0xf6, 0x9d, 0xf8, 0xfc, 0x9d, 0xd8, 0x9c, 0xf2, 0x28, 0x8e, 0xec, 0x7a, 0x34, 0x25, 0xec, 0x2d,
-	0x9d, 0xbc, 0x15, 0xc1, 0xd8, 0xfd, 0x8f, 0x05, 0xce, 0xe9, 0x2c, 0x0c, 0xbb, 0x44, 0x08, 0x7f,
-	0x44, 0xf6, 0xae, 0xfb, 0xe4, 0xea, 0x84, 0x8a, 0xd8, 0x23, 0x62, 0x6a, 0x3b, 0xb0, 0x42, 0x38,
-	0xdf, 0x8f, 0x02, 0xe2, 0x58, 0x2d, 0xab, 0x5d, 0xf6, 0x12, 0xd1, 0x5e, 0x87, 0x0a, 0xe1, 0xbc,
-	0x2b, 0x46, 0x4e, 0xa1, 0x65, 0xb5, 0x6b, 0x9e, 0x96, 0x24, 0x3e, 0xf1, 0xdf, 0xf7, 0xc9, 0x95,
-	0x53, 0x6c, 0x59, 0xed, 0xa2, 0xa7, 0x25, 0xc4, 0x29, 0x93, 0x78, 0x49, 0xe3, 0x28, 0xd9, 0x3f,
-	0x80, 0x27, 0x82, 0xb2, 0x51, 0x48, 0xce, 0x05, 0xc1, 0xe3, 0xca, 0xad, 0x62, 0xbb, 0xbe, 0xf5,
-	0x95, 0x4d, 0x83, 0xe3, 0xe6, 0x91, 0x1f, 0x5f, 0x12, 0x7e, 0x18, 0xf1, 0x89, 0x1f, 0x7b, 0x79,
-	0x7d, 0xfb, 0x7b, 0xd0, 0x18, 0xf1, 0x68, 0x36, 0x4d, 0xec, 0x2b, 0xf7, 0xd9, 0xe7, 0xd4, 0xdd,
-	0x09, 0x7c, 0x72, 0x7b, 0xf4, 0x48, 0x79, 0x26, 0x08, 0x3f, 0xee, 0x60, 0xec, 0x35, 0x4f, 0x4b,
-	0x76, 0x0b, 0x64, 0x02, 0xb9, 0x1f, 0xd3, 0x88, 0x1d, 0x77, 0x74, 0xfc, 0x26, 0x24, 0xd3, 0x26,
-	0xd4, 0x39, 0x4e, 0xb1, 0x55, 0x6c, 0x17, 0xbd, 0x44, 0x74, 0x7f, 0x06, 0xab, 0x86, 0xbb, 0xbb,
-	0xbc, 0x6c, 0x40, 0x55, 0x90, 0xab, 0x3d, 0x32, 0xa2, 0x0c, 0x5d, 0x14, 0xbd, 0x54, 0x96, 0x36,
-	0x82, 0x5c, 0x1d, 0xb0, 0x20, 0x49, 0xb2, 0x92, 0x6e, 0x32, 0x2b, 0x2d, 0x30, 0x73, 0xff, 0x65,
-	0x41, 0x33, 0x47, 0xe0, 0x4b, 0x51, 0xe4, 0xe7, 0x60, 0x1f, 0x91, 0xb8, 0xeb, 0xbf, 0xdf, 0x65,
-	0x41, 0x17, 0x29, 0x79, 0xe4, 0xca, 0x3d, 0x80, 0x67, 0x0b, 0xa8, 0x98, 0x1a, 0xc1, 0x59, 0xff,
-	0x23, 0xb8, 0x82, 0x19, 0x9c, 0xfb, 0x43, 0x68, 0x98, 0xae, 0xed, 0x55, 0x28, 0xd0, 0x40, 0x17,
-	0xb3, 0x40, 0x03, 0xbb, 0x0d, 0xa5, 0x50, 0x76, 0x42, 0x01, 0x39, 0x3f, 0xcf, 0x71, 0xee, 0x8a,
-	0x51, 0xc7, 0x8f, 0x7d, 0x0f, 0x35, 0xdc, 0x2b, 0x68, 0x4a, 0xc6, 0x7d, 0xc2, 0x82, 0xae, 0x18,
-	0x21, 0x99, 0x16, 0xd4, 0xfb, 0x84, 0xcf, 0x31, 0x8c, 0xb4, 0x45, 0x4c, 0x48, 0x6a, 0xec, 0x87,
-	0x94, 0xb0, 0x58, 0x69, 0xe8, 0x6e, 0x34, 0x20, 0xd5, 0x49, 0x2c, 0x38, 0xa3, 0x13, 0xa2, 0xeb,
-	0x95, 0xca, 0xee, 0x9f, 0xca, 0xb0, 0xa2, 0x49, 0xa8, 0xae, 0x62, 0x41, 0xd6, 0x89, 0x4a, 0x92,
-	0x38, 0x27, 0x83, 0x79, 0x7a, 0xb8, 0x96, 0x64, 0xdf, 0x60, 0x96, 0x8f, 0x3b, 0x78, 0x6c, 0xcd,
-	0x4b, 0x44, 0xc9, 0x69, 0x60, 0x70, 0xd2, 0x7d, 0x68, 0x40, 0x52, 0x43, 0x18, 0x71, 0x95, 0x95,
-	0x86, 0x01, 0xd9, 0xdf, 0x84, 0x35, 0xe9, 0x9f, 0xf0, 0xd3, 0xd0, 0x8f, 0x87, 0x11, 0x9f, 0x1c,
-	0x77, 0x9c, 0x0a, 0xb6, 0xe7, 0x02, 0x6e, 0x7f, 0x03, 0x56, 0x15, 0xf6, 0x86, 0x0e, 0xc6, 0x6f,
-	0xfc, 0x09, 0x71, 0x56, 0xf0, 0xc0, 0x1b, 0xa8, 0xfd, 0x75, 0x78, 0xa2, 0x90, 0x43, 0x7f, 0x40,
-	0xce, 0xbd, 0x13, 0xa7, 0x8a, 0x6a, 0x79, 0x50, 0x71, 0x13, 0x82, 0x46, 0xec, 0xec, 0x7a, 0x4a,
-	0x9c, 0x1a, 0x3a, 0x35, 0x21, 0x19, 0xf9, 0x44, 0x8c, 0x0e, 0x79, 0x34, 0x71, 0x40, 0xdd, 0x18,
-	0x2d, 0x62, 0xe4, 0x11, 0x8b, 0x09, 0x8b, 0xd1, 0xb6, 0xae, 0x6c, 0x0d, 0x48, 0xda, 0x6a, 0xd1,
-	0x69, 0xb4, 0xac, 0x76, 0xc3, 0x4b, 0x44, 0xfb, 0x53, 0xa8, 0x0d, 0x23, 0x3e, 0x20, 0x38, 0x37,
-	0x9e, 0xb4, 0x8a, 0xed, 0x9a, 0x97, 0x01, 0xf6, 0x1a, 0x14, 0x05, 0xb9, 0x72, 0x56, 0xb1, 0x80,
-	0xf2, 0x31, 0x57, 0xd7, 0x66, 0xbe, 0xae, 0xf6, 0x4b, 0x80, 0x01, 0x27, 0x7e, 0x4c, 0xf0, 0xd7,
-	0x35, 0xfc, 0xd5, 0x40, 0xec, 0xef, 0xc2, 0x4a, 0x6f, 0x2a, 0x67, 0x82, 0x70, 0x9e, 0x62, 0x5f,
-	0x7e, 0xed, 0xb6, 0xbe, 0xdc, 0xd4, 0x3a, 0x07, 0x2c, 0xe6, 0xd7, 0x5e, 0x62, 0x61, 0x1f, 0x42,
-	0x33, 0x1a, 0x0e, 0x43, 0xca, 0xc8, 0xe9, 0x4c, 0x5c, 0x1e, 0xb3, 0x61, 0xe4, 0xd8, 0x2d, 0xab,
-	0x5d, 0xdf, 0xfa, 0x34, 0x77, 0x48, 0x2f, 0xaf, 0xe3, 0xdd, 0x34, 0xda, 0x78, 0x05, 0x0d, 0xd3,
-	0x81, 0x0c, 0x71, 0x4c, 0xae, 0x75, 0xf7, 0xc9, 0x47, 0xfb, 0x39, 0x94, 0xe7, 0x7e, 0x38, 0x23,
-	0xd8, 0x79, 0x55, 0x4f, 0x09, 0xaf, 0x0a, 0x5f, 0x58, 0xee, 0xcf, 0x2d, 0x68, 0xde, 0x70, 0x20,
-	0xb5, 0xcf, 0x68, 0x1c, 0x12, 0x7d, 0x82, 0x12, 0x6c, 0x1b, 0x4a, 0x1d, 0x22, 0x06, 0xba, 0x79,
-	0xf1, 0x59, 0x7a, 0x3a, 0x78, 0x1f, 0xeb, 0xb6, 0x95, 0x8f, 0xb6, 0x0b, 0x0d, 0xda, 0xeb, 0xcb,
-	0xa3, 0xfa, 0xd1, 0x8c, 0x05, 0xba, 0x67, 0x73, 0x98, 0x6c, 0x1f, 0xda, 0xeb, 0xef, 0xf9, 0xc1,
-	0x88, 0xec, 0x47, 0x33, 0x16, 0x63, 0xdb, 0x56, 0xbd, 0x3c, 0xe8, 0xfe, 0xbe, 0x00, 0xb5, 0x23,
-	0xbc, 0x08, 0x92, 0x93, 0x03, 0x2b, 0x47, 0xfa, 0x92, 0x28, 0x56, 0x89, 0x28, 0xcb, 0x8d, 0x8f,
-	0xd8, 0xaf, 0x8a, 0x5c, 0x06, 0x48, 0x3e, 0x6f, 0xa2, 0x98, 0x0e, 0xe9, 0x00, 0x47, 0xb7, 0xa6,
-	0x9a, 0xc3, 0xa4, 0xce, 0x31, 0x8b, 0x79, 0x14, 0xcc, 0x06, 0xa8, 0xa3, 0x39, 0x9b, 0x98, 0xf4,
-	0x8f, 0x7d, 0xcd, 0x43, 0x7d, 0xc9, 0x12, 0xd1, 0xfe, 0x16, 0x94, 0x7b, 0xef, 0x18, 0xe1, 0x78,
-	0xab, 0xea, 0x5b, 0x5f, 0xcd, 0xd5, 0xee, 0x74, 0x76, 0x11, 0xd2, 0x81, 0x9c, 0x46, 0x58, 0x3a,
-	0xa5, 0x29, 0xbb, 0x6a, 0x3f, 0xeb, 0x2a, 0x79, 0xc7, 0x4a, 0x9e, 0x81, 0xc8, 0xee, 0xef, 0x92,
-	0xc9, 0x05, 0xe1, 0x2a, 0x3d, 0xf2, 0x76, 0x3d, 0xf1, 0x4c, 0x28, 0x49, 0x7c, 0x2d, 0x4d, 0xbc,
-	0xfb, 0x0f, 0x0b, 0x9e, 0x61, 0xd8, 0x4a, 0xed, 0x70, 0x16, 0x86, 0xf7, 0x24, 0x6e, 0x1d, 0x2a,
-	0xe7, 0xea, 0x8d, 0xa9, 0xe7, 0x91, 0x92, 0xec, 0x4d, 0xb0, 0x77, 0x83, 0x09, 0x65, 0x54, 0xc4,
-	0xdc, 0x8f, 0x23, 0x7e, 0x42, 0xe6, 0x24, 0xc4, 0xc4, 0x95, 0xbd, 0x5b, 0x7e, 0x91, 0xf7, 0xe7,
-	0x47, 0x11, 0x65, 0x18, 0x4b, 0x09, 0x63, 0x49, 0x65, 0xf9, 0x5b, 0x3a, 0x4b, 0x54, 0xde, 0x52,
-	0xd9, 0x4c, 0x69, 0x25, 0x9f, 0x52, 0x17, 0x1a, 0x87, 0x9c, 0x12, 0x16, 0x78, 0x64, 0xe2, 0xf3,
-	0xb1, 0x9e, 0x42, 0x39, 0xcc, 0xfd, 0xb3, 0x05, 0xd5, 0x24, 0xaf, 0x46, 0x28, 0x56, 0x2e, 0x14,
-	0xed, 0x9e, 0x65, 0xad, 0x91, 0xca, 0xa6, 0xfb, 0x62, 0xde, 0xfd, 0x3a, 0x54, 0x8e, 0x70, 0x92,
-	0x61, 0x38, 0x65, 0x4f, 0x4b, 0x12, 0xef, 0x46, 0x17, 0x34, 0x4c, 0x42, 0xd1, 0x92, 0xbc, 0x2f,
-	0x7b, 0x94, 0xc7, 0x97, 0x3a, 0x0c, 0x25, 0x48, 0xf4, 0x60, 0xe2, 0xd3, 0x50, 0xb3, 0x57, 0x42,
-	0x52, 0xb8, 0x6a, 0x56, 0xb8, 0xb9, 0x5c, 0x65, 0xcc, 0x2e, 0xf9, 0x38, 0xd1, 0xb8, 0x1d, 0xa8,
-	0x9e, 0xd1, 0xa9, 0xd8, 0x8f, 0x26, 0x13, 0xa9, 0xd3, 0x21, 0xb1, 0x24, 0x6b, 0xe1, 0x2c, 0xd5,
-	0x92, 0x6c, 0xc4, 0x0e, 0x19, 0xfa, 0xb3, 0x30, 0x96, 0xaa, 0xc9, 0x4b, 0xd1, 0x80, 0xdc, 0xdf,
-	0x5a, 0xd0, 0x54, 0x1d, 0x77, 0xc0, 0x62, 0xc2, 0x25, 0x66, 0x7f, 0x06, 0x65, 0xec, 0x31, 0x3c,
-	0xac, 0xbe, 0xb5, 0x9e, 0x5f, 0x2f, 0x92, 0x2b, 0xed, 0x29, 0x25, 0x7b, 0x0f, 0xea, 0x72, 0x6c,
-	0xf9, 0x2c, 0x96, 0x61, 0xa2, 0x8f, 0xfa, 0x56, 0x6b, 0xd1, 0x26, 0xdf, 0xd7, 0x9e, 0x69, 0x24,
-	0x27, 0x4a, 0x2f, 0xd9, 0xce, 0xd2, 0xf7, 0x73, 0xc9, 0xcb, 0x83, 0xee, 0x6f, 0x52, 0xae, 0x27,
-	0xc4, 0x9f, 0x93, 0x47, 0x70, 0x7d, 0x0d, 0x80, 0xa6, 0xfc, 0x41, 0x54, 0x0d, 0x9b, 0x25, 0x99,
-	0xfe, 0xdd, 0x82, 0xa7, 0xea, 0x90, 0x63, 0x36, 0xa7, 0x31, 0x09, 0x1e, 0xc1, 0xf5, 0x0b, 0xa8,
-	0xf4, 0xa6, 0x0f, 0xe2, 0xa9, 0xf5, 0x65, 0x45, 0xb4, 0x5b, 0x34, 0x2f, 0x2e, 0x5b, 0x11, 0xc3,
-	0x68, 0x31, 0xce, 0xd2, 0x6d, 0x71, 0xfe, 0xd5, 0x82, 0x35, 0x75, 0xca, 0x8f, 0xe9, 0x60, 0xfc,
-	0x91, 0xc3, 0x7c, 0x0d, 0xa0, 0xbc, 0x3e, 0x28, 0x4a, 0xc3, 0x66, 0xc9, 0x20, 0xff, 0x6d, 0xc1,
-	0x8b, 0xa4, 0x98, 0xc3, 0x68, 0xff, 0xd2, 0x67, 0x23, 0x1d, 0xa9, 0x7c, 0x0f, 0xa0, 0x88, 0x4b,
-	0x8e, 0xfa, 0x68, 0x30, 0x90, 0xff, 0x23, 0xb6, 0xef, 0x43, 0xed, 0x90, 0x32, 0x1f, 0xc1, 0xa5,
-	0x43, 0xcb, 0x4c, 0xe4, 0xa8, 0xe9, 0xce, 0xf4, 0xfb, 0x49, 0xcf, 0xf4, 0x44, 0xce, 0xea, 0x53,
-	0x5e, 0xa2, 0x3e, 0xee, 0xdf, 0x2c, 0x58, 0xc3, 0x27, 0xf5, 0x7e, 0x7b, 0x4c, 0x89, 0x5f, 0xc1,
-	0x0a, 0x1a, 0x47, 0xcb, 0xe7, 0x21, 0x31, 0x90, 0x45, 0xd6, 0x57, 0x3e, 0xf9, 0x8a, 0x5c, 0xaa,
-	0xc8, 0x99, 0xcd, 0x92, 0x45, 0xfe, 0xa5, 0x05, 0xcf, 0x53, 0xe2, 0x66, 0x8d, 0xe5, 0x77, 0x85,
-	0x16, 0xb3, 0x22, 0x9b, 0x50, 0x96, 0x8c, 0xc2, 0xc3, 0xfa, 0xbd, 0xf8, 0xb0, 0x9e, 0x70, 0x7f,
-	0x61, 0xc1, 0x86, 0x47, 0x06, 0x84, 0xce, 0x89, 0x7c, 0x3f, 0xef, 0x4e, 0xa7, 0xa1, 0xde, 0x80,
-	0x1e, 0x51, 0x93, 0x1d, 0xa8, 0xe9, 0x03, 0x58, 0xac, 0x89, 0xdf, 0xb9, 0xf9, 0x64, 0xda, 0xf2,
-	0x65, 0xe3, 0x11, 0x5f, 0xa4, 0xcb, 0x98, 0x96, 0xdc, 0x3f, 0x5a, 0xe0, 0x18, 0xa4, 0x4e, 0x79,
-	0x34, 0x20, 0x42, 0x7c, 0xe4, 0xa1, 0x80, 0xe4, 0xc4, 0x2c, 0x8c, 0xf5, 0xc2, 0xa3, 0x25, 0x83,
-	0x74, 0x29, 0x47, 0xfa, 0x0f, 0x16, 0x80, 0xda, 0x4b, 0xf0, 0xde, 0x6c, 0x43, 0x0d, 0x57, 0x3c,
-	0xf4, 0xad, 0xa8, 0xbe, 0xc8, 0xf9, 0xce, 0x12, 0x92, 0xea, 0xa9, 0xb3, 0x71, 0xd1, 0x29, 0x24,
-	0x67, 0x4b, 0xe9, 0xc6, 0x9a, 0x58, 0x5c, 0x58, 0x13, 0xbf, 0x9d, 0xb8, 0x46, 0x6f, 0xa5, 0xbb,
-	0xbc, 0x19, 0x8a, 0xee, 0x18, 0x9e, 0x2a, 0xc9, 0x48, 0xb6, 0xdc, 0x1f, 0x76, 0x03, 0xf5, 0x0d,
-	0x64, 0xa1, 0xa3, 0x44, 0x94, 0xfb, 0xf5, 0x6e, 0x10, 0xf4, 0xa3, 0x19, 0x1f, 0xa4, 0xfb, 0x75,
-	0x0a, 0x48, 0x8e, 0xbb, 0x41, 0xf0, 0x93, 0x88, 0x07, 0x94, 0x8d, 0x74, 0x41, 0x0d, 0xc4, 0xfd,
-	0xa7, 0x05, 0x1b, 0x0b, 0xde, 0x76, 0x83, 0x40, 0x97, 0x75, 0x3b, 0x2d, 0x94, 0x75, 0x7f, 0x0f,
-	0x65, 0x83, 0xbb, 0x6e, 0x1c, 0xa6, 0x4b, 0xfc, 0x32, 0x67, 0xb9, 0xe0, 0xd2, 0x33, 0x4d, 0xec,
-	0xef, 0x40, 0xb5, 0x37, 0xcd, 0x0d, 0xfe, 0x3b, 0x1d, 0xa7, 0xca, 0x4b, 0x0e, 0x83, 0xbf, 0x58,
-	0xf0, 0x72, 0x81, 0x41, 0xbe, 0x9f, 0x1f, 0x15, 0xb8, 0x49, 0xbb, 0xf0, 0x10, 0xda, 0xf8, 0xa7,
-	0x07, 0xb3, 0xab, 0x95, 0xb4, 0x64, 0x38, 0x97, 0xd0, 0xd4, 0xd1, 0xa4, 0x75, 0xfb, 0x1c, 0x2a,
-	0x0a, 0xd2, 0xf4, 0x3f, 0xb9, 0x25, 0xfb, 0x8a, 0xba, 0x7a, 0x5e, 0xf4, 0x54, 0xb8, 0xcd, 0xd3,
-	0x4f, 0x93, 0xd6, 0xec, 0x90, 0x90, 0xc4, 0x1f, 0xd6, 0xd7, 0xaf, 0x2c, 0xa8, 0xed, 0x85, 0xfe,
-	0x60, 0x8c, 0x17, 0x77, 0x67, 0xf1, 0xe2, 0xde, 0x3d, 0xcf, 0xb2, 0xeb, 0x7b, 0xdf, 0x35, 0xdd,
-	0xd1, 0x7e, 0x8c, 0x5b, 0x7a, 0xf7, 0xd1, 0xa9, 0xb6, 0x1b, 0xc0, 0x2a, 0x0a, 0x59, 0xe2, 0x3f,
-	0x83, 0x32, 0x22, 0xb7, 0xce, 0xc1, 0x34, 0x1c, 0x4f, 0x29, 0x2d, 0x99, 0x89, 0x21, 0xac, 0xa1,
-	0xba, 0x99, 0xf4, 0x0f, 0xe1, 0xe7, 0xd7, 0x16, 0xbc, 0xc8, 0xca, 0x65, 0xbe, 0x24, 0x1f, 0x5c,
-	0xe2, 0xed, 0x1b, 0x03, 0x7e, 0xa9, 0xeb, 0xb3, 0xdc, 0xee, 0xfd, 0x3b, 0x0b, 0x9e, 0xf5, 0x49,
-	0x38, 0x94, 0xa6, 0xe7, 0xd3, 0x20, 0xdd, 0x59, 0x76, 0xa0, 0x21, 0xe1, 0xe4, 0xd4, 0xbb, 0xa7,
-	0x7b, 0x4e, 0xf5, 0x03, 0xb2, 0xbd, 0xa8, 0xe0, 0xbf, 0x22, 0xb6, 0xff, 0x1b, 0x00, 0x00, 0xff,
-	0xff, 0x8b, 0x1e, 0x2f, 0xb4, 0x9d, 0x18, 0x00, 0x00,
+	0x11, 0xd7, 0xf8, 0x5f, 0xec, 0xb2, 0x37, 0xce, 0xce, 0xfe, 0x79, 0xc3, 0xf2, 0xb4, 0x32, 0x23,
+	0x84, 0x2c, 0xf4, 0x94, 0x27, 0x12, 0x21, 0x5e, 0x16, 0x01, 0xeb, 0xc4, 0x49, 0x08, 0xc4, 0xeb,
+	0x68, 0x9c, 0x88, 0xe3, 0x6a, 0xe2, 0x69, 0x3b, 0x8d, 0xc7, 0x3d, 0x4e, 0xf7, 0xd8, 0xbb, 0xb9,
+	0xf0, 0x2d, 0x10, 0x27, 0x24, 0x10, 0x07, 0x84, 0xe0, 0x80, 0x38, 0xf0, 0x11, 0x38, 0xf1, 0x29,
+	0x10, 0x7c, 0x01, 0x38, 0xc2, 0x01, 0x75, 0x75, 0xcf, 0x4c, 0x4f, 0x1c, 0x12, 0x27, 0x68, 0xf7,
+	0xf2, 0x6e, 0x53, 0x3f, 0x57, 0x75, 0xfd, 0xea, 0x4f, 0xd7, 0xd4, 0x24, 0xd0, 0x14, 0xc1, 0xe4,
+	0xed, 0x3b, 0xf1, 0xf9, 0x3b, 0xb1, 0x39, 0xe3, 0x51, 0x1c, 0xd9, 0xf5, 0x68, 0x46, 0xd8, 0x5b,
+	0x3a, 0x7d, 0x2b, 0x82, 0x89, 0xfb, 0x1f, 0x0b, 0x9c, 0x93, 0x79, 0x18, 0xf6, 0x88, 0x10, 0xfe,
+	0x98, 0xec, 0x5e, 0x0d, 0xc8, 0xe5, 0x31, 0x15, 0xb1, 0x47, 0xc4, 0xcc, 0x76, 0x60, 0x8d, 0x70,
+	0xbe, 0x17, 0x05, 0xc4, 0xb1, 0x5a, 0x56, 0xbb, 0xec, 0x25, 0xa2, 0xfd, 0x1c, 0x2a, 0x84, 0xf3,
+	0x9e, 0x18, 0x3b, 0x85, 0x96, 0xd5, 0xae, 0x79, 0x5a, 0x92, 0xf8, 0xd4, 0x7f, 0x3f, 0x20, 0x97,
+	0x4e, 0xb1, 0x65, 0xb5, 0x8b, 0x9e, 0x96, 0x10, 0xa7, 0x4c, 0xe2, 0x25, 0x8d, 0xa3, 0x64, 0xff,
+	0x00, 0x1e, 0x09, 0xca, 0xc6, 0x21, 0x39, 0x13, 0x04, 0x8f, 0x2b, 0xb7, 0x8a, 0xed, 0xfa, 0xd6,
+	0x57, 0x36, 0x0d, 0x8e, 0x9b, 0x87, 0x7e, 0x7c, 0x41, 0xf8, 0x41, 0xc4, 0xa7, 0x7e, 0xec, 0xe5,
+	0xf5, 0xed, 0xef, 0x41, 0x63, 0xcc, 0xa3, 0xf9, 0x2c, 0xb1, 0xaf, 0xdc, 0x65, 0x9f, 0x53, 0x77,
+	0xa7, 0xf0, 0xc9, 0xcd, 0xd1, 0x23, 0xe5, 0xb9, 0x20, 0xfc, 0xa8, 0x8b, 0xb1, 0xd7, 0x3c, 0x2d,
+	0xd9, 0x2d, 0x90, 0x09, 0xe4, 0x7e, 0x4c, 0x23, 0x76, 0xd4, 0xd5, 0xf1, 0x9b, 0x90, 0x4c, 0x9b,
+	0x50, 0xe7, 0x38, 0xc5, 0x56, 0xb1, 0x5d, 0xf4, 0x12, 0xd1, 0xfd, 0x19, 0xac, 0x1b, 0xee, 0x6e,
+	0xf3, 0xf2, 0x02, 0xaa, 0x82, 0x5c, 0xee, 0x92, 0x31, 0x65, 0xe8, 0xa2, 0xe8, 0xa5, 0xb2, 0xb4,
+	0x11, 0xe4, 0x72, 0x9f, 0x05, 0x49, 0x92, 0x95, 0x74, 0x9d, 0x59, 0x69, 0x89, 0x99, 0xfb, 0x2f,
+	0x0b, 0x9a, 0x39, 0x02, 0x5f, 0x8a, 0x22, 0x3f, 0x05, 0xfb, 0x90, 0xc4, 0x3d, 0xff, 0x7d, 0x87,
+	0x05, 0x3d, 0xa4, 0xe4, 0x91, 0x4b, 0x77, 0x1f, 0x9e, 0x2c, 0xa1, 0x62, 0x66, 0x04, 0x67, 0xfd,
+	0x8f, 0xe0, 0x0a, 0x66, 0x70, 0xee, 0x0f, 0xa1, 0x61, 0xba, 0xb6, 0xd7, 0xa1, 0x40, 0x03, 0x5d,
+	0xcc, 0x02, 0x0d, 0xec, 0x36, 0x94, 0x42, 0xd9, 0x09, 0x05, 0xe4, 0xfc, 0x34, 0xc7, 0xb9, 0x27,
+	0xc6, 0x5d, 0x3f, 0xf6, 0x3d, 0xd4, 0x70, 0x2f, 0xa1, 0x29, 0x19, 0x0f, 0x08, 0x0b, 0x7a, 0x62,
+	0x8c, 0x64, 0x5a, 0x50, 0x1f, 0x10, 0xbe, 0xc0, 0x30, 0xd2, 0x16, 0x31, 0x21, 0xa9, 0xb1, 0x17,
+	0x52, 0xc2, 0x62, 0xa5, 0xa1, 0xbb, 0xd1, 0x80, 0x54, 0x27, 0xb1, 0xe0, 0x94, 0x4e, 0x89, 0xae,
+	0x57, 0x2a, 0xbb, 0x7f, 0x2e, 0xc3, 0x9a, 0x26, 0xa1, 0xba, 0x8a, 0x05, 0x59, 0x27, 0x2a, 0x49,
+	0xe2, 0x9c, 0x0c, 0x17, 0xe9, 0xe1, 0x5a, 0x92, 0x7d, 0x83, 0x59, 0x3e, 0xea, 0xe2, 0xb1, 0x35,
+	0x2f, 0x11, 0x25, 0xa7, 0xa1, 0xc1, 0x49, 0xf7, 0xa1, 0x01, 0x49, 0x0d, 0x61, 0xc4, 0x55, 0x56,
+	0x1a, 0x06, 0x64, 0x7f, 0x13, 0x36, 0xa4, 0x7f, 0xc2, 0x4f, 0x42, 0x3f, 0x1e, 0x45, 0x7c, 0x7a,
+	0xd4, 0x75, 0x2a, 0xd8, 0x9e, 0x4b, 0xb8, 0xfd, 0x0d, 0x58, 0x57, 0xd8, 0x1b, 0x3a, 0x9c, 0xbc,
+	0xf1, 0xa7, 0xc4, 0x59, 0xc3, 0x03, 0xaf, 0xa1, 0xf6, 0xd7, 0xe1, 0x91, 0x42, 0x0e, 0xfc, 0x21,
+	0x39, 0xf3, 0x8e, 0x9d, 0x2a, 0xaa, 0xe5, 0x41, 0xc5, 0x4d, 0x08, 0x1a, 0xb1, 0xd3, 0xab, 0x19,
+	0x71, 0x6a, 0xe8, 0xd4, 0x84, 0x64, 0xe4, 0x53, 0x31, 0x3e, 0xe0, 0xd1, 0xd4, 0x01, 0x75, 0x63,
+	0xb4, 0x88, 0x91, 0x47, 0x2c, 0x26, 0x2c, 0x46, 0xdb, 0xba, 0xb2, 0x35, 0x20, 0x69, 0xab, 0x45,
+	0xa7, 0xd1, 0xb2, 0xda, 0x0d, 0x2f, 0x11, 0xed, 0x4f, 0xa1, 0x36, 0x8a, 0xf8, 0x90, 0xe0, 0xdc,
+	0x78, 0xd4, 0x2a, 0xb6, 0x6b, 0x5e, 0x06, 0xd8, 0x1b, 0x50, 0x14, 0xe4, 0xd2, 0x59, 0xc7, 0x02,
+	0xca, 0xc7, 0x5c, 0x5d, 0x9b, 0xf9, 0xba, 0xda, 0x2f, 0x01, 0x86, 0x9c, 0xf8, 0x31, 0xc1, 0x5f,
+	0x37, 0xf0, 0x57, 0x03, 0xb1, 0xbf, 0x0b, 0x6b, 0xfd, 0x99, 0x9c, 0x09, 0xc2, 0x79, 0x8c, 0x7d,
+	0xf9, 0xb5, 0x9b, 0xfa, 0x72, 0x53, 0xeb, 0xec, 0xb3, 0x98, 0x5f, 0x79, 0x89, 0x85, 0x7d, 0x00,
+	0xcd, 0x68, 0x34, 0x0a, 0x29, 0x23, 0x27, 0x73, 0x71, 0x71, 0xc4, 0x46, 0x91, 0x63, 0xb7, 0xac,
+	0x76, 0x7d, 0xeb, 0xd3, 0xdc, 0x21, 0xfd, 0xbc, 0x8e, 0x77, 0xdd, 0xe8, 0xc5, 0x2b, 0x68, 0x98,
+	0x0e, 0x64, 0x88, 0x13, 0x72, 0xa5, 0xbb, 0x4f, 0x3e, 0xda, 0x4f, 0xa1, 0xbc, 0xf0, 0xc3, 0x39,
+	0xc1, 0xce, 0xab, 0x7a, 0x4a, 0x78, 0x55, 0xf8, 0xc2, 0x72, 0x7f, 0x61, 0x41, 0xf3, 0x9a, 0x03,
+	0xa9, 0x7d, 0x4a, 0xe3, 0x90, 0xe8, 0x13, 0x94, 0x60, 0xdb, 0x50, 0xea, 0x12, 0x31, 0xd4, 0xcd,
+	0x8b, 0xcf, 0xd2, 0xd3, 0xfe, 0xfb, 0x58, 0xb7, 0xad, 0x7c, 0xb4, 0x5d, 0x68, 0xd0, 0xfe, 0x40,
+	0x1e, 0x35, 0x88, 0xe6, 0x2c, 0xd0, 0x3d, 0x9b, 0xc3, 0x64, 0xfb, 0xd0, 0xfe, 0x60, 0xd7, 0x0f,
+	0xc6, 0x64, 0x2f, 0x9a, 0xb3, 0x18, 0xdb, 0xb6, 0xea, 0xe5, 0x41, 0xf7, 0x0f, 0x05, 0xa8, 0x1d,
+	0xe2, 0x45, 0x90, 0x9c, 0x1c, 0x58, 0x3b, 0xd4, 0x97, 0x44, 0xb1, 0x4a, 0x44, 0x59, 0x6e, 0x7c,
+	0xc4, 0x7e, 0x55, 0xe4, 0x32, 0x40, 0xf2, 0x79, 0x13, 0xc5, 0x74, 0x44, 0x87, 0x38, 0xba, 0x35,
+	0xd5, 0x1c, 0x26, 0x75, 0x8e, 0x58, 0xcc, 0xa3, 0x60, 0x3e, 0x44, 0x1d, 0xcd, 0xd9, 0xc4, 0xa4,
+	0x7f, 0xec, 0x6b, 0x1e, 0xea, 0x4b, 0x96, 0x88, 0xf6, 0xb7, 0xa0, 0xdc, 0x7f, 0xc7, 0x08, 0xc7,
+	0x5b, 0x55, 0xdf, 0xfa, 0x6a, 0xae, 0x76, 0x27, 0xf3, 0xf3, 0x90, 0x0e, 0xe5, 0x34, 0xc2, 0xd2,
+	0x29, 0x4d, 0xd9, 0x55, 0x7b, 0x59, 0x57, 0xc9, 0x3b, 0x56, 0xf2, 0x0c, 0x44, 0x76, 0x7f, 0x8f,
+	0x4c, 0xcf, 0x09, 0x57, 0xe9, 0x91, 0xb7, 0xeb, 0x91, 0x67, 0x42, 0x49, 0xe2, 0x6b, 0x69, 0xe2,
+	0xdd, 0x9f, 0x17, 0xe0, 0x09, 0x86, 0xad, 0xd4, 0x0e, 0xe6, 0x61, 0x78, 0x47, 0xe2, 0x9e, 0x43,
+	0xe5, 0x4c, 0xbd, 0x31, 0xf5, 0x3c, 0x52, 0x92, 0xbd, 0x09, 0x76, 0x27, 0x98, 0x52, 0x46, 0x45,
+	0xcc, 0xfd, 0x38, 0xe2, 0xc7, 0x64, 0x41, 0x42, 0x4c, 0x5c, 0xd9, 0xbb, 0xe1, 0x17, 0x79, 0x7f,
+	0x7e, 0x14, 0x51, 0x86, 0xb1, 0x94, 0x30, 0x96, 0x54, 0x96, 0xbf, 0xa5, 0xb3, 0x44, 0xe5, 0x2d,
+	0x95, 0xcd, 0x94, 0x56, 0xf2, 0x29, 0x75, 0xa1, 0x71, 0xc0, 0x29, 0x61, 0x81, 0x47, 0xa6, 0x3e,
+	0x9f, 0xe8, 0x29, 0x94, 0xc3, 0xe4, 0xac, 0xea, 0xcc, 0x66, 0x3d, 0x9f, 0x8d, 0x89, 0x66, 0x58,
+	0x45, 0x86, 0xd7, 0x50, 0xf7, 0x2f, 0x16, 0x54, 0x93, 0xfc, 0x1b, 0x21, 0x5b, 0xb9, 0x90, 0x35,
+	0x4d, 0x96, 0xb5, 0x50, 0x2a, 0x9b, 0x34, 0x8b, 0x79, 0x9a, 0xcf, 0xa1, 0x72, 0x88, 0x13, 0x0f,
+	0xc3, 0x2e, 0x7b, 0x5a, 0x92, 0x78, 0x2f, 0x3a, 0xa7, 0x61, 0x12, 0xb2, 0x96, 0xe4, 0xbd, 0xda,
+	0xa5, 0x3c, 0xbe, 0xd0, 0xe1, 0x2a, 0x41, 0xa2, 0xfb, 0x53, 0x9f, 0x86, 0x3a, 0x4a, 0x25, 0x24,
+	0x05, 0xae, 0x66, 0x05, 0x5e, 0xc8, 0x95, 0xc7, 0xec, 0xa6, 0x8f, 0x13, 0x8d, 0xdb, 0x85, 0xea,
+	0x29, 0x9d, 0x89, 0xbd, 0x68, 0x3a, 0x95, 0x3a, 0x5d, 0x12, 0x4b, 0xb2, 0x16, 0xce, 0x5c, 0x2d,
+	0xc9, 0x86, 0xed, 0x92, 0x91, 0x3f, 0x0f, 0x63, 0xa9, 0x9a, 0xbc, 0x3c, 0x0d, 0xc8, 0xfd, 0x9d,
+	0x05, 0x4d, 0xd5, 0x99, 0xfb, 0x2c, 0x26, 0x5c, 0x62, 0xf6, 0x67, 0x50, 0xc6, 0x5e, 0xc4, 0xc3,
+	0xea, 0x5b, 0xcf, 0xf3, 0x6b, 0x48, 0x72, 0xf5, 0x3d, 0xa5, 0x64, 0xef, 0x42, 0x5d, 0x8e, 0x37,
+	0x9f, 0xc5, 0x32, 0x4c, 0xf4, 0x51, 0xdf, 0x6a, 0x2d, 0xdb, 0xe4, 0xfb, 0xdf, 0x33, 0x8d, 0xe4,
+	0xe4, 0xe9, 0x27, 0x5b, 0x5c, 0xfa, 0x1e, 0x2f, 0x79, 0x79, 0xd0, 0xfd, 0x6d, 0xca, 0xf5, 0x98,
+	0xf8, 0x0b, 0xf2, 0x00, 0xae, 0xaf, 0x01, 0xd0, 0x94, 0xdf, 0x8b, 0xaa, 0x61, 0xb3, 0x22, 0xd3,
+	0x7f, 0x58, 0xf0, 0x58, 0x1d, 0x72, 0xc4, 0x16, 0x34, 0x26, 0xc1, 0x03, 0xb8, 0x7e, 0x01, 0x95,
+	0xfe, 0xec, 0x5e, 0x3c, 0xb5, 0xbe, 0xac, 0x88, 0x76, 0x8b, 0xe6, 0xc5, 0x55, 0x2b, 0x62, 0x18,
+	0x2d, 0xc7, 0x59, 0xba, 0x29, 0xce, 0xbf, 0x59, 0xb0, 0xa1, 0x4e, 0xf9, 0x31, 0x1d, 0x4e, 0x3e,
+	0x72, 0x98, 0xaf, 0x01, 0x94, 0xd7, 0x7b, 0x45, 0x69, 0xd8, 0xac, 0x18, 0xe4, 0xbf, 0x2d, 0x78,
+	0x96, 0x14, 0x73, 0x14, 0xed, 0x5d, 0xc8, 0x21, 0xa6, 0x22, 0x95, 0xef, 0x0b, 0x14, 0x71, 0x19,
+	0x52, 0x1f, 0x17, 0x06, 0xf2, 0x7f, 0xc4, 0xf6, 0x7d, 0xa8, 0x1d, 0x50, 0xe6, 0x23, 0xb8, 0x72,
+	0x68, 0x99, 0x89, 0x1c, 0x35, 0xbd, 0xb9, 0x7e, 0x8f, 0xe9, 0xd9, 0x9f, 0xc8, 0x59, 0x7d, 0xca,
+	0x2b, 0xd4, 0xc7, 0xfd, 0xbb, 0x05, 0x1b, 0xf8, 0xa4, 0xde, 0x83, 0x0f, 0x29, 0xf1, 0x2b, 0x58,
+	0x43, 0xe3, 0x68, 0xf5, 0x3c, 0x24, 0x06, 0xb2, 0xc8, 0xfa, 0xca, 0x27, 0x5f, 0x9b, 0x2b, 0x15,
+	0x39, 0xb3, 0x59, 0xb1, 0xc8, 0xbf, 0xb2, 0xe0, 0x69, 0x4a, 0xdc, 0xac, 0xb1, 0xfc, 0xfe, 0xd0,
+	0x62, 0x56, 0x64, 0x13, 0xca, 0x92, 0x51, 0xb8, 0x5f, 0xbf, 0x17, 0xef, 0xd7, 0x13, 0xee, 0x2f,
+	0x2d, 0x78, 0xe1, 0x91, 0x21, 0xa1, 0x0b, 0x22, 0xdf, 0xe3, 0x9d, 0xd9, 0x2c, 0xd4, 0x9b, 0xd2,
+	0x03, 0x6a, 0xb2, 0x03, 0x35, 0x7d, 0x00, 0x8b, 0x35, 0xf1, 0x5b, 0x37, 0xa4, 0x4c, 0x5b, 0xbe,
+	0x6c, 0x3c, 0xe2, 0x8b, 0x74, 0x69, 0xd3, 0x92, 0xfb, 0x27, 0x0b, 0x1c, 0x83, 0xd4, 0x09, 0x8f,
+	0x86, 0x44, 0x88, 0x8f, 0x3c, 0x14, 0x90, 0x9c, 0x98, 0x87, 0xb1, 0x5e, 0x8c, 0xb4, 0x64, 0x90,
+	0x2e, 0xe5, 0x48, 0xff, 0xd1, 0x02, 0x50, 0xfb, 0x0b, 0xde, 0x9b, 0x6d, 0xa8, 0xe1, 0x2a, 0x88,
+	0xbe, 0x15, 0xd5, 0x67, 0x39, 0xdf, 0x59, 0x42, 0x52, 0x3d, 0x75, 0x36, 0x2e, 0x44, 0x85, 0xe4,
+	0x6c, 0x5c, 0x85, 0xf2, 0xeb, 0x64, 0x71, 0x69, 0x9d, 0xfc, 0x76, 0xe2, 0x1a, 0xbd, 0x95, 0x6e,
+	0xf3, 0x66, 0x28, 0xba, 0x13, 0x78, 0xac, 0x24, 0x23, 0xd9, 0x72, 0x7f, 0xe8, 0x04, 0xea, 0x5b,
+	0xc9, 0x42, 0x47, 0x89, 0x28, 0xf7, 0xf0, 0x4e, 0x10, 0x0c, 0xa2, 0x39, 0x1f, 0xa6, 0x7b, 0x78,
+	0x0a, 0x48, 0x8e, 0x9d, 0x20, 0xf8, 0x49, 0xc4, 0x03, 0xca, 0xc6, 0xba, 0xa0, 0x06, 0xe2, 0xfe,
+	0xd3, 0x82, 0x17, 0x4b, 0xde, 0x3a, 0x41, 0xa0, 0xcb, 0xba, 0x9d, 0x16, 0xca, 0xba, 0xbb, 0x87,
+	0xb2, 0xc1, 0x5d, 0x37, 0x0e, 0xd3, 0x25, 0x7e, 0x99, 0xb3, 0x5c, 0x72, 0xe9, 0x99, 0x26, 0xf6,
+	0x77, 0xa0, 0xda, 0x9f, 0xe5, 0x06, 0xff, 0xad, 0x8e, 0x53, 0xe5, 0x15, 0x87, 0xc1, 0x5f, 0x2d,
+	0x78, 0xb9, 0xc4, 0x20, 0xdf, 0xcf, 0x0f, 0x0a, 0xdc, 0xa4, 0x5d, 0xb8, 0x0f, 0x6d, 0xfc, 0x13,
+	0x85, 0xd9, 0xd5, 0x4a, 0x5a, 0x31, 0x9c, 0x0b, 0x68, 0xea, 0x68, 0xd2, 0xba, 0x7d, 0x0e, 0x15,
+	0x05, 0x69, 0xfa, 0x9f, 0xdc, 0x90, 0x7d, 0x45, 0x5d, 0x3d, 0x2f, 0x7b, 0x2a, 0xdc, 0xe4, 0xe9,
+	0xa7, 0x49, 0x6b, 0x76, 0x49, 0x48, 0xe2, 0x0f, 0xeb, 0xeb, 0xd7, 0x16, 0xd4, 0x76, 0x43, 0x7f,
+	0x38, 0xc1, 0x8b, 0xbb, 0xb3, 0x7c, 0x71, 0x6f, 0x9f, 0x67, 0xd9, 0xf5, 0xbd, 0xeb, 0x9a, 0xee,
+	0x68, 0x3f, 0xc6, 0x2d, 0xbd, 0xfd, 0xe8, 0x54, 0xdb, 0x0d, 0x60, 0x1d, 0x85, 0x2c, 0xf1, 0x9f,
+	0x41, 0x19, 0x91, 0x1b, 0xe7, 0x60, 0x1a, 0x8e, 0xa7, 0x94, 0x56, 0xcc, 0xc4, 0x08, 0x36, 0x50,
+	0xdd, 0x4c, 0xfa, 0x87, 0xf0, 0xf3, 0x1b, 0x0b, 0x9e, 0x65, 0xe5, 0x32, 0x5f, 0x92, 0xf7, 0x2e,
+	0xf1, 0xf6, 0xb5, 0x01, 0xbf, 0xd2, 0xf5, 0x59, 0x6d, 0xf7, 0xfe, 0xbd, 0x05, 0x4f, 0x06, 0x24,
+	0x1c, 0x49, 0xd3, 0xb3, 0x59, 0x90, 0xee, 0x2c, 0x3b, 0xd0, 0x90, 0x70, 0x72, 0xea, 0xed, 0xd3,
+	0x3d, 0xa7, 0xfa, 0x01, 0xd9, 0x9e, 0x57, 0xf0, 0x5f, 0x16, 0xdb, 0xff, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0x73, 0x31, 0x8b, 0x68, 0xc5, 0x18, 0x00, 0x00,
 }
diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto
index 05359cf21..3a20f1fcb 100644
--- a/pkg/proto/sdk_ws/ws.proto
+++ b/pkg/proto/sdk_ws/ws.proto
@@ -128,6 +128,7 @@ message GroupMemberFullInfo {
 	string NickName = 5;
 	string FaceUrl = 6;
   string FriendRemark = 7;
+  int32 AppMangerLevel = 8; // >0
 }
 
 //private, Friends have permission to view