From eecf8bb8ae1b777e35af3edf2e2bd4f9f548f0cd Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 9 Feb 2023 15:38:50 +0800 Subject: [PATCH 1/7] api to rpc use generic paradigm --- internal/api/group/group_test.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/api/group/group_test.go b/internal/api/group/group_test.go index 1cfeb0810..ddd6e61f2 100644 --- a/internal/api/group/group_test.go +++ b/internal/api/group/group_test.go @@ -4,8 +4,10 @@ import ( "Open_IM/pkg/api_struct" "Open_IM/pkg/proto/group" "context" + "errors" "github.com/gin-gonic/gin" "google.golang.org/grpc" + "reflect" "testing" ) @@ -67,7 +69,8 @@ func KickGroupMember(c *gin.Context) { // 默认 全部自动 NewRpc(NewApiBind[api_struct.KickGroupMemberReq, api_struct.KickGroupMemberResp](c), "", group.NewGroupClient, group.GroupClient.KickGroupMember).Execute() // 可以自定义编辑请求和响应 - NewRpc(NewApiBind[api_struct.KickGroupMemberReq, api_struct.KickGroupMemberResp](c), "", group.NewGroupClient, group.GroupClient.KickGroupMember).Before(func(apiReq *api_struct.KickGroupMemberReq, rpcReq *group.KickGroupMemberReq, bind func() error) error { + a := NewRpc(NewApiBind[api_struct.KickGroupMemberReq, api_struct.KickGroupMemberResp](c), "", group.NewGroupClient, group.GroupClient.KickGroupMember) + a.Before(func(apiReq *api_struct.KickGroupMemberReq, rpcReq *group.KickGroupMemberReq, bind func() error) error { return bind() }).After(func(rpcResp *group.KickGroupMemberResp, apiResp *api_struct.KickGroupMemberResp, bind func() error) error { return bind() @@ -102,6 +105,22 @@ func (a *RpcRun[A, B, C, D, Z]) After(fn func(rpcResp D, apiResp *B, bind func() return a } +func (a *RpcRun[A, B, C, D, Z]) execute() (*B, error) { + userID, err := a.bind.OpUserID() + if err != nil { + return nil, err + } + opID := a.bind.OperationID() + var rpcReq C // C type => *Struct + rpcReq = reflect.New(reflect.TypeOf(rpcReq).Elem()).Interface().(C) + + return nil, nil +} + func (a *RpcRun[A, B, C, D, Z]) Execute() { } + +func GetGrpcConn(name string) (*grpc.ClientConn, error) { + return nil, errors.New("todo") +} From ab30c77836a83172f098121f8a6e834d3862ac5e Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 9 Feb 2023 16:33:40 +0800 Subject: [PATCH 2/7] group db --- internal/rpc/group/group.go | 16 +- pkg/common/db/controller/group.go | 10 + pkg/common/db/localcache/group.go | 5 +- pkg/common/db/relation/group_member_model.go | 31 +- pkg/common/db/table/relation/group_member.go | 3 +- pkg/proto/group/group.pb.go | 471 ++++++++++++------- pkg/proto/group/group.proto | 18 +- 7 files changed, 341 insertions(+), 213 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index a24af9801..4f7206948 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -191,7 +191,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR } } } - if err := s.GroupInterface.CreateGroup(ctx, []*relation.GroupModel{group}, groupMembers); err != nil { + if err := s.GroupInterface.CreateGroup(ctx, []*relationTb.GroupModel{group}, groupMembers); err != nil { return nil, err } resp.GroupInfo = DbToPbGroupInfo(group, req.OwnerUserID, uint32(len(userIDs))) @@ -287,9 +287,9 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite return nil, constant.ErrNoPermission.Wrap("not in group") } if !(member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin) { - var requests []*relation.GroupRequestModel + var requests []*relationTb.GroupRequestModel for _, userID := range req.InvitedUserIDs { - requests = append(requests, &relation.GroupRequestModel{ + requests = append(requests, &relationTb.GroupRequestModel{ UserID: userID, GroupID: req.GroupID, JoinSource: constant.JoinByInvitation, @@ -1038,3 +1038,13 @@ func (s *groupServer) GetUserInGroupMembers(ctx context.Context, req *pbGroup.Ge }) return resp, nil } + +func (s *groupServer) GetGroupMemberUserID(ctx context.Context, req *pbGroup.GetGroupMemberUserIDReq) (*pbGroup.GetGroupMemberUserIDResp, error) { + resp := &pbGroup.GetGroupMemberUserIDResp{} + userIDs, err := s.GroupInterface.FindGroupMemberUserID(ctx, req.GroupID) + if err != nil { + return nil, err + } + resp.UserIDs = userIDs + return resp, nil +} diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 10325f315..e0acce579 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -30,6 +30,7 @@ type GroupInterface interface { TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) + FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationTb.GroupMemberModel) error @@ -61,6 +62,10 @@ type GroupController struct { database GroupDataBaseInterface } +func (g *GroupController) FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) { + return g.database.FindGroupMemberUserID(ctx, groupID) +} + func (g *GroupController) CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error { return g.database.CreateGroup(ctx, groups, groupMembers) } @@ -179,6 +184,7 @@ type GroupDataBaseInterface interface { TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) + FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationTb.GroupMemberModel) error @@ -234,6 +240,10 @@ type GroupDataBase struct { mongoDB *unrelation.SuperGroupMongoDriver } +func (g *GroupDataBase) FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) { + return g.groupMemberDB.FindMemberUserID(ctx, groupID) +} + func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error { if len(groups) > 0 && len(groupMembers) > 0 { return g.db.Transaction(func(tx *gorm.DB) error { diff --git a/pkg/common/db/localcache/group.go b/pkg/common/db/localcache/group.go index 01f299c43..e41c10456 100644 --- a/pkg/common/db/localcache/group.go +++ b/pkg/common/db/localcache/group.go @@ -52,8 +52,7 @@ func (g *GroupLocalCache) GetGroupMemberIDs(ctx context.Context, groupID string) if ok && localHashInfo.memberListHash == resp.GroupAbstractInfos[0].GroupMemberListHash { return localHashInfo.userIDs, nil } - - groupMembersResp, err := client.GetGroupMemberList(ctx, &group.GetGroupMemberListReq{ + groupMembersResp, err := client.GetGroupMemberUserID(ctx, &group.GetGroupMemberUserIDReq{ GroupID: groupID, }) if err != nil { @@ -61,7 +60,7 @@ func (g *GroupLocalCache) GetGroupMemberIDs(ctx context.Context, groupID string) } g.cache[groupID] = GroupMemberIDsHash{ memberListHash: resp.GroupAbstractInfos[0].GroupMemberListHash, - userIDs: groupMembersResp.Members, + userIDs: groupMembersResp.UserIDs, } return g.cache[groupID].userIDs, nil } diff --git a/pkg/common/db/relation/group_member_model.go b/pkg/common/db/relation/group_member_model.go index 15745da1c..14373119a 100644 --- a/pkg/common/db/relation/group_member_model.go +++ b/pkg/common/db/relation/group_member_model.go @@ -40,13 +40,6 @@ func (g *GroupMemberGorm) DeleteGroup(ctx context.Context, groupIDs []string, tx return utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Delete(&relation.GroupMemberModel{}).Error, "") } -//func (g *GroupMemberGorm) UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}, tx ...any) (err error) { -// defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "args", args) -// }() -// return utils.Wrap(getDBConn(g.DB, tx).Model(&relation.GroupMemberModel{}).Where("group_id = ? and user_id = ?", groupID, userID).Updates(args).Error, "") -//} - func (g *GroupMemberGorm) Update(ctx context.Context, groupID string, userID string, data map[string]any, tx ...any) (err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "data", data) @@ -81,23 +74,6 @@ func (g *GroupMemberGorm) Find(ctx context.Context, groupIDs []string, userIDs [ return groupList, utils.Wrap(db.Find(&groupList).Error, "") } -//func (g *GroupMemberGorm) FindGroupUser(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...any) (groupList []*relation.GroupMemberModel, err error) { -// defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "userIDs", userIDs, "groupList", groupList) -// }() -// db := getDBConn(g.DB, tx) -// if len(groupList) > 0 { -// db = db.Where("group_id in (?)", groupIDs) -// } -// if len(userIDs) > 0 { -// db = db.Where("user_id in (?)", userIDs) -// } -// if len(roleLevels) > 0 { -// db = db.Where("role_level in (?)", roleLevels) -// } -// return groupList, utils.Wrap(db.Find(&groupList).Error, "") -//} - func (g *GroupMemberGorm) Take(ctx context.Context, groupID string, userID string, tx ...any) (groupMember *relation.GroupMemberModel, err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupMember", *groupMember) @@ -149,3 +125,10 @@ func (g *GroupMemberGorm) FindJoinUserID(ctx context.Context, groupIDs []string, } return groupUsers, nil } + +func (g *GroupMemberGorm) FindMemberUserID(ctx context.Context, groupID string, tx ...any) (userIDs []string, err error) { + defer func() { + tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userIDs", userIDs) + }() + return userIDs, utils.Wrap(getDBConn(g.DB, tx).Model(&relation.GroupMemberModel{}).Where("group_id = ?", groupID).Pluck("user_id", &userIDs), "") +} diff --git a/pkg/common/db/table/relation/group_member.go b/pkg/common/db/table/relation/group_member.go index a83dd76c5..221fe5a4b 100644 --- a/pkg/common/db/table/relation/group_member.go +++ b/pkg/common/db/table/relation/group_member.go @@ -31,11 +31,10 @@ type GroupMemberModelInterface interface { Create(ctx context.Context, groupMemberList []*GroupMemberModel, tx ...any) (err error) Delete(ctx context.Context, groupID string, userIDs []string, tx ...any) (err error) DeleteGroup(ctx context.Context, groupIDs []string, tx ...any) (err error) - //UpdateByMap(ctx context.Context, groupID string, userID string, args map[string]interface{}, tx ...any) (err error) Update(ctx context.Context, groupID string, userID string, data map[string]any, tx ...any) (err error) UpdateRoleLevel(ctx context.Context, groupID string, userID string, roleLevel int32, tx ...any) (rowsAffected int64, err error) Find(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...any) (groupList []*GroupMemberModel, err error) - //FindGroupUser(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, tx ...any) (groupList []*GroupMemberModel, err error) + FindMemberUserID(ctx context.Context, groupID string, tx ...any) (userIDs []string, err error) Take(ctx context.Context, groupID string, userID string, tx ...any) (groupMember *GroupMemberModel, err error) TakeOwner(ctx context.Context, groupID string, tx ...any) (groupMember *GroupMemberModel, err error) SearchMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32, tx ...any) (total uint32, groupList []*GroupMemberModel, err error) diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index a125f304d..4a54cc4ee 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -39,7 +39,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_97564bfcd2811fbb, []int{0} + return fileDescriptor_group_66c251c19ca9b483, []int{0} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -98,7 +98,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_97564bfcd2811fbb, []int{1} + return fileDescriptor_group_66c251c19ca9b483, []int{1} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -136,7 +136,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_97564bfcd2811fbb, []int{2} + return fileDescriptor_group_66c251c19ca9b483, []int{2} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -174,7 +174,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_97564bfcd2811fbb, []int{3} + return fileDescriptor_group_66c251c19ca9b483, []int{3} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -212,7 +212,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_97564bfcd2811fbb, []int{4} + return fileDescriptor_group_66c251c19ca9b483, []int{4} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -249,7 +249,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{5} + return fileDescriptor_group_66c251c19ca9b483, []int{5} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -281,7 +281,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_97564bfcd2811fbb, []int{6} + return fileDescriptor_group_66c251c19ca9b483, []int{6} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -327,7 +327,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_97564bfcd2811fbb, []int{7} + return fileDescriptor_group_66c251c19ca9b483, []int{7} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -373,7 +373,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{8} + return fileDescriptor_group_66c251c19ca9b483, []int{8} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -419,7 +419,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{9} + return fileDescriptor_group_66c251c19ca9b483, []int{9} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -466,7 +466,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_97564bfcd2811fbb, []int{10} + return fileDescriptor_group_66c251c19ca9b483, []int{10} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -517,7 +517,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{11} + return fileDescriptor_group_66c251c19ca9b483, []int{11} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -551,7 +551,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_97564bfcd2811fbb, []int{12} + return fileDescriptor_group_66c251c19ca9b483, []int{12} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -609,7 +609,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{13} + return fileDescriptor_group_66c251c19ca9b483, []int{13} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -643,7 +643,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_97564bfcd2811fbb, []int{14} + return fileDescriptor_group_66c251c19ca9b483, []int{14} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -701,7 +701,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{15} + return fileDescriptor_group_66c251c19ca9b483, []int{15} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -732,7 +732,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_97564bfcd2811fbb, []int{16} + return fileDescriptor_group_66c251c19ca9b483, []int{16} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -769,7 +769,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{17} + return fileDescriptor_group_66c251c19ca9b483, []int{17} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -802,7 +802,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_97564bfcd2811fbb, []int{18} + return fileDescriptor_group_66c251c19ca9b483, []int{18} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -855,7 +855,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_97564bfcd2811fbb, []int{19} + return fileDescriptor_group_66c251c19ca9b483, []int{19} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -901,7 +901,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_97564bfcd2811fbb, []int{20} + return fileDescriptor_group_66c251c19ca9b483, []int{20} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -946,7 +946,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_97564bfcd2811fbb, []int{21} + return fileDescriptor_group_66c251c19ca9b483, []int{21} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -986,7 +986,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_97564bfcd2811fbb, []int{22} + return fileDescriptor_group_66c251c19ca9b483, []int{22} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1037,7 +1037,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_97564bfcd2811fbb, []int{23} + return fileDescriptor_group_66c251c19ca9b483, []int{23} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1069,7 +1069,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_97564bfcd2811fbb, []int{24} + return fileDescriptor_group_66c251c19ca9b483, []int{24} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1115,7 +1115,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_97564bfcd2811fbb, []int{25} + return fileDescriptor_group_66c251c19ca9b483, []int{25} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1162,7 +1162,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_97564bfcd2811fbb, []int{26} + return fileDescriptor_group_66c251c19ca9b483, []int{26} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1213,7 +1213,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_97564bfcd2811fbb, []int{27} + return fileDescriptor_group_66c251c19ca9b483, []int{27} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1245,7 +1245,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_97564bfcd2811fbb, []int{28} + return fileDescriptor_group_66c251c19ca9b483, []int{28} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1290,7 +1290,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_97564bfcd2811fbb, []int{29} + return fileDescriptor_group_66c251c19ca9b483, []int{29} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1330,7 +1330,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{30} + return fileDescriptor_group_66c251c19ca9b483, []int{30} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1384,7 +1384,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{31} + return fileDescriptor_group_66c251c19ca9b483, []int{31} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -1437,7 +1437,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{32} + return fileDescriptor_group_66c251c19ca9b483, []int{32} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -1482,7 +1482,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{33} + return fileDescriptor_group_66c251c19ca9b483, []int{33} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -1522,7 +1522,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{34} + return fileDescriptor_group_66c251c19ca9b483, []int{34} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -1575,7 +1575,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{35} + return fileDescriptor_group_66c251c19ca9b483, []int{35} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -1620,7 +1620,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{36} + return fileDescriptor_group_66c251c19ca9b483, []int{36} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -1657,7 +1657,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{37} + return fileDescriptor_group_66c251c19ca9b483, []int{37} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -1690,7 +1690,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{38} + return fileDescriptor_group_66c251c19ca9b483, []int{38} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -1741,7 +1741,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{39} + return fileDescriptor_group_66c251c19ca9b483, []int{39} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -1773,7 +1773,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{40} + return fileDescriptor_group_66c251c19ca9b483, []int{40} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -1817,7 +1817,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{41} + return fileDescriptor_group_66c251c19ca9b483, []int{41} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -1848,7 +1848,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{42} + return fileDescriptor_group_66c251c19ca9b483, []int{42} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -1885,7 +1885,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{43} + return fileDescriptor_group_66c251c19ca9b483, []int{43} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -1916,7 +1916,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{44} + return fileDescriptor_group_66c251c19ca9b483, []int{44} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -1953,7 +1953,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{45} + return fileDescriptor_group_66c251c19ca9b483, []int{45} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -1986,7 +1986,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{46} + return fileDescriptor_group_66c251c19ca9b483, []int{46} } func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) @@ -2037,7 +2037,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{47} + return fileDescriptor_group_66c251c19ca9b483, []int{47} } func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) @@ -2068,7 +2068,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{48} + return fileDescriptor_group_66c251c19ca9b483, []int{48} } func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) @@ -2106,7 +2106,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{49} + return fileDescriptor_group_66c251c19ca9b483, []int{49} } func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) @@ -2144,7 +2144,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} } func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoReq) ProtoMessage() {} func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{50} + return fileDescriptor_group_66c251c19ca9b483, []int{50} } func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) @@ -2182,7 +2182,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{} func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoResp) ProtoMessage() {} func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{51} + return fileDescriptor_group_66c251c19ca9b483, []int{51} } func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) @@ -2225,7 +2225,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoReq) ProtoMessage() {} func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{52} + return fileDescriptor_group_66c251c19ca9b483, []int{52} } func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) @@ -2297,7 +2297,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{} func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{53} + return fileDescriptor_group_66c251c19ca9b483, []int{53} } func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) @@ -2328,7 +2328,7 @@ func (m *GetGroupAbstractInfoReq) Reset() { *m = GetGroupAbstractInfoReq func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAbstractInfoReq) ProtoMessage() {} func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{54} + return fileDescriptor_group_66c251c19ca9b483, []int{54} } func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b) @@ -2368,7 +2368,7 @@ func (m *GroupAbstractInfo) Reset() { *m = GroupAbstractInfo{} } func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) } func (*GroupAbstractInfo) ProtoMessage() {} func (*GroupAbstractInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{55} + return fileDescriptor_group_66c251c19ca9b483, []int{55} } func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b) @@ -2420,7 +2420,7 @@ func (m *GetGroupAbstractInfoResp) Reset() { *m = GetGroupAbstractInfoRe func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAbstractInfoResp) ProtoMessage() {} func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{56} + return fileDescriptor_group_66c251c19ca9b483, []int{56} } func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b) @@ -2459,7 +2459,7 @@ func (m *GetUserInGroupMembersReq) Reset() { *m = GetUserInGroupMembersR func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) } func (*GetUserInGroupMembersReq) ProtoMessage() {} func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{57} + return fileDescriptor_group_66c251c19ca9b483, []int{57} } func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b) @@ -2504,7 +2504,7 @@ func (m *GetUserInGroupMembersResp) Reset() { *m = GetUserInGroupMembers func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) } func (*GetUserInGroupMembersResp) ProtoMessage() {} func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_97564bfcd2811fbb, []int{58} + return fileDescriptor_group_66c251c19ca9b483, []int{58} } func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b) @@ -2531,6 +2531,82 @@ func (m *GetUserInGroupMembersResp) GetMembers() []*sdk_ws.GroupMemberFullInfo { return nil } +type GetGroupMemberUserIDReq struct { + GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetGroupMemberUserIDReq) Reset() { *m = GetGroupMemberUserIDReq{} } +func (m *GetGroupMemberUserIDReq) String() string { return proto.CompactTextString(m) } +func (*GetGroupMemberUserIDReq) ProtoMessage() {} +func (*GetGroupMemberUserIDReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_66c251c19ca9b483, []int{59} +} +func (m *GetGroupMemberUserIDReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetGroupMemberUserIDReq.Unmarshal(m, b) +} +func (m *GetGroupMemberUserIDReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetGroupMemberUserIDReq.Marshal(b, m, deterministic) +} +func (dst *GetGroupMemberUserIDReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetGroupMemberUserIDReq.Merge(dst, src) +} +func (m *GetGroupMemberUserIDReq) XXX_Size() int { + return xxx_messageInfo_GetGroupMemberUserIDReq.Size(m) +} +func (m *GetGroupMemberUserIDReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetGroupMemberUserIDReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetGroupMemberUserIDReq proto.InternalMessageInfo + +func (m *GetGroupMemberUserIDReq) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +type GetGroupMemberUserIDResp struct { + UserIDs []string `protobuf:"bytes,1,rep,name=userIDs" json:"userIDs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetGroupMemberUserIDResp) Reset() { *m = GetGroupMemberUserIDResp{} } +func (m *GetGroupMemberUserIDResp) String() string { return proto.CompactTextString(m) } +func (*GetGroupMemberUserIDResp) ProtoMessage() {} +func (*GetGroupMemberUserIDResp) Descriptor() ([]byte, []int) { + return fileDescriptor_group_66c251c19ca9b483, []int{60} +} +func (m *GetGroupMemberUserIDResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetGroupMemberUserIDResp.Unmarshal(m, b) +} +func (m *GetGroupMemberUserIDResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetGroupMemberUserIDResp.Marshal(b, m, deterministic) +} +func (dst *GetGroupMemberUserIDResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetGroupMemberUserIDResp.Merge(dst, src) +} +func (m *GetGroupMemberUserIDResp) XXX_Size() int { + return xxx_messageInfo_GetGroupMemberUserIDResp.Size(m) +} +func (m *GetGroupMemberUserIDResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetGroupMemberUserIDResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetGroupMemberUserIDResp proto.InternalMessageInfo + +func (m *GetGroupMemberUserIDResp) GetUserIDs() []string { + if m != nil { + return m.UserIDs + } + return nil +} + func init() { proto.RegisterType((*CreateGroupReq)(nil), "group.CreateGroupReq") proto.RegisterType((*CreateGroupResp)(nil), "group.CreateGroupResp") @@ -2589,8 +2665,10 @@ func init() { proto.RegisterType((*GetGroupAbstractInfoReq)(nil), "group.GetGroupAbstractInfoReq") proto.RegisterType((*GroupAbstractInfo)(nil), "group.GroupAbstractInfo") proto.RegisterType((*GetGroupAbstractInfoResp)(nil), "group.GetGroupAbstractInfoResp") - proto.RegisterType((*GetUserInGroupMembersReq)(nil), "group.getUserInGroupMembersReq") - proto.RegisterType((*GetUserInGroupMembersResp)(nil), "group.getUserInGroupMembersResp") + proto.RegisterType((*GetUserInGroupMembersReq)(nil), "group.GetUserInGroupMembersReq") + proto.RegisterType((*GetUserInGroupMembersResp)(nil), "group.GetUserInGroupMembersResp") + proto.RegisterType((*GetGroupMemberUserIDReq)(nil), "group.GetGroupMemberUserIDReq") + proto.RegisterType((*GetGroupMemberUserIDResp)(nil), "group.GetGroupMemberUserIDResp") } // Reference imports to suppress errors if they are not otherwise used. @@ -2656,6 +2734,8 @@ type GroupClient interface { GetGroupAbstractInfo(ctx context.Context, in *GetGroupAbstractInfoReq, opts ...grpc.CallOption) (*GetGroupAbstractInfoResp, error) // 获取某个用户在指定群中的信息 GetUserInGroupMembers(ctx context.Context, in *GetUserInGroupMembersReq, opts ...grpc.CallOption) (*GetUserInGroupMembersResp, error) + // 获取群成员用户ID + GetGroupMemberUserID(ctx context.Context, in *GetGroupMemberUserIDReq, opts ...grpc.CallOption) (*GetGroupMemberUserIDResp, error) } type groupClient struct { @@ -2909,6 +2989,15 @@ func (c *groupClient) GetUserInGroupMembers(ctx context.Context, in *GetUserInGr return out, nil } +func (c *groupClient) GetGroupMemberUserID(ctx context.Context, in *GetGroupMemberUserIDReq, opts ...grpc.CallOption) (*GetGroupMemberUserIDResp, error) { + out := new(GetGroupMemberUserIDResp) + err := grpc.Invoke(ctx, "/group.group/getGroupMemberUserID", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Group service type GroupServer interface { @@ -2964,6 +3053,8 @@ type GroupServer interface { GetGroupAbstractInfo(context.Context, *GetGroupAbstractInfoReq) (*GetGroupAbstractInfoResp, error) // 获取某个用户在指定群中的信息 GetUserInGroupMembers(context.Context, *GetUserInGroupMembersReq) (*GetUserInGroupMembersResp, error) + // 获取群成员用户ID + GetGroupMemberUserID(context.Context, *GetGroupMemberUserIDReq) (*GetGroupMemberUserIDResp, error) } func RegisterGroupServer(s *grpc.Server, srv GroupServer) { @@ -3456,6 +3547,24 @@ func _Group_GetUserInGroupMembers_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Group_GetGroupMemberUserID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGroupMemberUserIDReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupServer).GetGroupMemberUserID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/group.group/GetGroupMemberUserID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupServer).GetGroupMemberUserID(ctx, req.(*GetGroupMemberUserIDReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Group_serviceDesc = grpc.ServiceDesc{ ServiceName: "group.group", HandlerType: (*GroupServer)(nil), @@ -3568,126 +3677,132 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "getUserInGroupMembers", Handler: _Group_GetUserInGroupMembers_Handler, }, + { + MethodName: "getGroupMemberUserID", + Handler: _Group_GetGroupMemberUserID_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_97564bfcd2811fbb) } - -var fileDescriptor_group_97564bfcd2811fbb = []byte{ - // 1795 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdd, 0x53, 0x14, 0x49, - 0x12, 0x8f, 0x1e, 0x04, 0x21, 0x65, 0x04, 0x0a, 0x06, 0x9a, 0x06, 0x01, 0x4b, 0xc2, 0x23, 0xee, - 0x74, 0xb8, 0x50, 0xcf, 0xb8, 0x0f, 0x23, 0x3c, 0x85, 0x13, 0xb9, 0x63, 0xe0, 0xec, 0x51, 0x2f, - 0xce, 0x0d, 0x83, 0x6d, 0x66, 0x8a, 0xb6, 0xa5, 0xa7, 0xbb, 0xe8, 0xea, 0x01, 0x63, 0xc3, 0x7d, - 0xd8, 0x7d, 0xde, 0x8f, 0x87, 0x7d, 0xdc, 0xb7, 0x8d, 0xfd, 0x13, 0xf6, 0x2f, 0xda, 0xbf, 0x64, - 0xa3, 0xab, 0xab, 0x6b, 0xaa, 0xbf, 0x66, 0x70, 0x05, 0x5f, 0x26, 0xa2, 0xb3, 0x32, 0x2b, 0xb3, - 0xf2, 0xa3, 0xf2, 0x97, 0x35, 0x30, 0x65, 0x07, 0x7e, 0x97, 0xae, 0xf3, 0xdf, 0x3a, 0x0d, 0xfc, - 0xd0, 0x47, 0xc3, 0xfc, 0xc3, 0x58, 0xdb, 0xa3, 0xc4, 0xbb, 0xbd, 0xdd, 0xb8, 0xdd, 0x24, 0xc1, - 0x09, 0x09, 0xd6, 0xe9, 0x91, 0xbd, 0xce, 0x19, 0xd6, 0x59, 0xfb, 0x68, 0xff, 0x94, 0xad, 0x9f, - 0xb2, 0x58, 0xc0, 0xa8, 0x0f, 0xe4, 0x0c, 0x2c, 0x4a, 0x49, 0x20, 0xf8, 0xf1, 0x2f, 0x1a, 0x5c, - 0xdd, 0x08, 0x88, 0x15, 0x92, 0xad, 0x48, 0x93, 0x49, 0x8e, 0xd1, 0x0a, 0x5c, 0x71, 0x3c, 0x27, - 0x6c, 0x90, 0xce, 0x01, 0x09, 0x98, 0xae, 0xad, 0x0c, 0xad, 0x8d, 0x99, 0x2a, 0x09, 0xfd, 0x1d, - 0xc6, 0xb8, 0x5d, 0xdb, 0xde, 0xa1, 0xaf, 0x57, 0x56, 0xb4, 0xb5, 0x2b, 0x77, 0x16, 0xeb, 0x8c, - 0x2b, 0xdc, 0xb7, 0xa8, 0xb3, 0x4f, 0xad, 0xc0, 0xea, 0xb0, 0xfa, 0x56, 0xc2, 0x63, 0xf6, 0xd8, - 0x11, 0x86, 0x71, 0xab, 0xdd, 0x71, 0xbc, 0x17, 0x8c, 0x04, 0xdb, 0x9b, 0x4c, 0x1f, 0xe2, 0xdb, - 0xa7, 0x68, 0x91, 0x05, 0xfe, 0xa9, 0x47, 0x82, 0xf8, 0x5b, 0xbf, 0xb4, 0xa2, 0x45, 0x16, 0x28, - 0x24, 0xdc, 0x80, 0x89, 0x94, 0xd5, 0x8c, 0xa6, 0x8d, 0xd2, 0x3e, 0xc8, 0x28, 0x5c, 0x87, 0xc9, - 0x2d, 0x12, 0xf2, 0x25, 0xc6, 0xd7, 0xc8, 0x31, 0x32, 0x60, 0x34, 0x66, 0xd8, 0x4c, 0x7c, 0x20, - 0xbf, 0xf1, 0x33, 0x98, 0xca, 0xf0, 0x33, 0x8a, 0x1e, 0x00, 0xc8, 0x1d, 0x63, 0x91, 0x41, 0x16, - 0x28, 0xfc, 0x78, 0x1f, 0x26, 0x9a, 0x62, 0xcb, 0xc4, 0x82, 0x1d, 0x98, 0x90, 0x0c, 0x4f, 0xfc, - 0xa0, 0x49, 0x42, 0x71, 0x2e, 0xdc, 0x6f, 0xd7, 0x98, 0xd3, 0xcc, 0x8a, 0x62, 0x04, 0x93, 0x69, - 0x05, 0x8c, 0xe2, 0xaf, 0x35, 0x30, 0x92, 0x83, 0x3c, 0xa2, 0xd4, 0x75, 0x5a, 0x56, 0xe8, 0xf8, - 0xde, 0x8e, 0xc3, 0xc2, 0xc8, 0x80, 0x4d, 0x00, 0x6a, 0xd9, 0x8e, 0xc7, 0x89, 0x42, 0xf7, 0x6a, - 0x81, 0x6e, 0x93, 0x1c, 0x77, 0x09, 0x0b, 0xff, 0x2b, 0x79, 0x4d, 0x45, 0x0e, 0x2d, 0x01, 0x1c, - 0x06, 0x7e, 0x47, 0x04, 0xb3, 0xc2, 0x83, 0xa9, 0x50, 0xf0, 0x17, 0xb0, 0x50, 0x6a, 0x03, 0xa3, - 0x68, 0x06, 0x86, 0x43, 0x3f, 0xb4, 0x5c, 0xae, 0xbf, 0x6a, 0xc6, 0x1f, 0xe8, 0x5f, 0x50, 0xb5, - 0x45, 0xc2, 0x46, 0xaa, 0x99, 0x5e, 0xe1, 0xfe, 0x5e, 0x2e, 0xf3, 0x8c, 0xe0, 0x33, 0xd3, 0x52, - 0xf8, 0x3d, 0x2c, 0x6e, 0x91, 0x30, 0x32, 0xc4, 0x24, 0xc7, 0x17, 0xe6, 0x81, 0x59, 0x18, 0xe9, - 0xaa, 0xa7, 0x17, 0x5f, 0xf8, 0x3d, 0x5c, 0xeb, 0xa3, 0xfd, 0xa2, 0xcf, 0xfe, 0x95, 0x06, 0xb5, - 0xe7, 0x81, 0xe5, 0xb1, 0x43, 0x12, 0x70, 0xbe, 0xbd, 0xa8, 0xc0, 0xa2, 0x53, 0xeb, 0x70, 0x59, - 0xa4, 0x3a, 0x57, 0x3c, 0x66, 0x26, 0x9f, 0xe8, 0x26, 0x5c, 0xf5, 0xdd, 0xf6, 0x9e, 0x52, 0x9c, - 0xf1, 0x89, 0x32, 0xd4, 0x88, 0xcf, 0x23, 0xa7, 0x2a, 0xdf, 0x50, 0xcc, 0x97, 0xa6, 0x62, 0x1d, - 0x66, 0x8b, 0x4c, 0x60, 0x14, 0x7f, 0xa7, 0xc1, 0xf8, 0xbf, 0x7d, 0xc7, 0x93, 0xd7, 0x52, 0xb9, - 0x51, 0x4b, 0x00, 0x01, 0x39, 0x6e, 0x10, 0xc6, 0x2c, 0x9b, 0x24, 0x09, 0xd6, 0xa3, 0x44, 0xeb, - 0x6f, 0x7d, 0xc7, 0x6b, 0xfa, 0xdd, 0xa0, 0x45, 0xb8, 0x21, 0xc3, 0xa6, 0x42, 0x41, 0xab, 0x50, - 0x75, 0xbc, 0x13, 0x27, 0xcc, 0x5c, 0x38, 0x69, 0x22, 0x9e, 0x80, 0xaa, 0x62, 0x0f, 0xa3, 0xf8, - 0x47, 0x0d, 0x16, 0xb2, 0x59, 0x1b, 0x2d, 0xf8, 0x1e, 0x23, 0x03, 0x0d, 0xee, 0x57, 0x11, 0xd1, - 0xfa, 0x1b, 0xcb, 0x6b, 0xbb, 0xa4, 0xdd, 0x60, 0xb6, 0xf0, 0x9c, 0x42, 0x89, 0xee, 0xd0, 0xf8, - 0xcb, 0x24, 0xac, 0xeb, 0x86, 0xdc, 0xde, 0x61, 0x33, 0x45, 0xc3, 0x4b, 0xb0, 0x58, 0x6e, 0x1c, - 0xa3, 0x78, 0x0d, 0xc6, 0x9f, 0x75, 0x9d, 0x70, 0xb0, 0x7b, 0xa3, 0x83, 0x2b, 0x9c, 0x8c, 0xe2, - 0xef, 0x35, 0xa8, 0x25, 0x15, 0x1b, 0xb7, 0x84, 0xf3, 0x2d, 0x17, 0xc5, 0x94, 0x4a, 0xda, 0x71, - 0xb3, 0x30, 0x72, 0xe8, 0xb8, 0x21, 0x09, 0x44, 0x14, 0xc5, 0x17, 0xa6, 0x30, 0x5b, 0x64, 0x50, - 0x69, 0x05, 0xfd, 0x13, 0x2e, 0x77, 0x44, 0x7b, 0x8b, 0x6b, 0xe7, 0x66, 0x59, 0xed, 0xc4, 0xdb, - 0x3d, 0xe9, 0xba, 0x2e, 0xbf, 0x34, 0x13, 0x31, 0xbc, 0x93, 0xd5, 0x28, 0xfb, 0x46, 0x79, 0xd8, - 0xf5, 0xb4, 0xd6, 0xb1, 0xde, 0x6e, 0x9f, 0xc1, 0x5c, 0xe1, 0x6e, 0x8c, 0xaa, 0xa6, 0x6a, 0xbf, - 0xcf, 0x54, 0x17, 0xd0, 0x7f, 0x9c, 0xd6, 0x91, 0xc2, 0xd3, 0xdf, 0xcc, 0x55, 0xa8, 0x1e, 0x39, - 0xad, 0x23, 0xd2, 0x4e, 0x5a, 0x74, 0x6c, 0x6c, 0x9a, 0x18, 0x85, 0x22, 0x20, 0x16, 0xf3, 0x3d, - 0x91, 0x9f, 0xe2, 0x0b, 0xd7, 0x60, 0x3a, 0xa7, 0x8d, 0x51, 0xfc, 0x25, 0x4f, 0x99, 0xa8, 0x80, - 0x48, 0x9b, 0xaf, 0x7d, 0xda, 0x1e, 0xd3, 0xe6, 0xe1, 0xca, 0xa9, 0x2f, 0x4d, 0x90, 0x7b, 0x30, - 0xc2, 0xdd, 0x91, 0xe4, 0x47, 0xff, 0x3e, 0x2e, 0x78, 0x31, 0x85, 0x99, 0x6d, 0x7e, 0x67, 0x44, - 0x5a, 0x9f, 0xfb, 0x67, 0xb8, 0xba, 0x7a, 0x5e, 0xac, 0xa8, 0x5e, 0x8c, 0xee, 0xcf, 0xf8, 0xf6, - 0x69, 0xa7, 0x71, 0x52, 0x86, 0x8a, 0xe7, 0xa0, 0x56, 0xa0, 0x91, 0x51, 0x7c, 0x02, 0x33, 0xb2, - 0xa9, 0xba, 0x6e, 0x2f, 0xec, 0x17, 0x5c, 0xa1, 0xf8, 0xff, 0xbd, 0xab, 0x41, 0xd1, 0x7b, 0x2e, - 0x79, 0xfc, 0x93, 0x06, 0xa3, 0x1b, 0x8d, 0x26, 0xe7, 0xf9, 0x18, 0xb4, 0x87, 0xea, 0x80, 0x6c, - 0xd9, 0x6c, 0x22, 0xc7, 0xed, 0x5a, 0x9d, 0xa4, 0x6f, 0x14, 0xac, 0xa0, 0x3f, 0xc2, 0x64, 0x9a, - 0x2a, 0xdb, 0x59, 0x8e, 0x8e, 0xbf, 0xd1, 0x60, 0x5c, 0x42, 0xc3, 0xf3, 0x73, 0xf8, 0xa2, 0x38, - 0xae, 0x62, 0x69, 0x8f, 0xa0, 0x86, 0x63, 0x28, 0x1d, 0x8e, 0x5d, 0xa8, 0x2a, 0xd6, 0x94, 0xa6, - 0xfb, 0x1f, 0x32, 0xe9, 0x3e, 0x51, 0x8f, 0x87, 0x90, 0xc4, 0xdd, 0x32, 0xc3, 0x6f, 0xf7, 0x80, - 0xef, 0x19, 0xae, 0x12, 0xfc, 0x43, 0xae, 0x53, 0xb0, 0x8d, 0x46, 0xf3, 0x53, 0x74, 0x0a, 0x03, - 0x46, 0xbb, 0x49, 0x64, 0x63, 0x9f, 0xc8, 0xef, 0x7c, 0xb7, 0x88, 0x8d, 0xba, 0xc0, 0x6e, 0xf1, - 0x27, 0x98, 0xd8, 0x74, 0x58, 0xc7, 0x61, 0xec, 0x0c, 0xfd, 0x16, 0xc1, 0x64, 0x9a, 0x99, 0x51, - 0xfc, 0x16, 0x50, 0xa3, 0x2b, 0xa6, 0x9d, 0xb3, 0xdc, 0xe1, 0x25, 0x88, 0x33, 0x42, 0x0e, 0x9d, - 0x6e, 0x48, 0xda, 0x4d, 0xd2, 0xf2, 0xbd, 0x36, 0xe3, 0xae, 0xa9, 0x9a, 0x29, 0x5a, 0x74, 0x83, - 0xe7, 0x74, 0x31, 0x8a, 0x77, 0x40, 0xdf, 0xb0, 0xbc, 0x16, 0x71, 0xcf, 0xc3, 0x10, 0xbc, 0x00, - 0xf3, 0x25, 0xbb, 0xc5, 0xd8, 0x44, 0x92, 0x07, 0x62, 0x13, 0x85, 0x93, 0x51, 0x5c, 0x07, 0x94, - 0xd9, 0xb7, 0xff, 0x06, 0x35, 0x98, 0xce, 0xf1, 0x33, 0x8a, 0x1d, 0x98, 0x6f, 0xa6, 0x52, 0x64, - 0xd7, 0x69, 0x1d, 0x79, 0x56, 0x67, 0x00, 0xb0, 0x33, 0x60, 0xd4, 0x13, 0x8c, 0xe2, 0xbc, 0xf2, - 0x5b, 0xf1, 0xc4, 0x50, 0xca, 0x13, 0x8b, 0x60, 0x94, 0xa9, 0x62, 0x14, 0xdf, 0xe3, 0x03, 0x5a, - 0xdc, 0xb8, 0x9a, 0x5d, 0x2a, 0x60, 0x72, 0xd2, 0x3c, 0x7b, 0x7b, 0x6a, 0xa9, 0x3d, 0x9b, 0x7c, - 0xa4, 0x2a, 0x96, 0x62, 0x54, 0xe9, 0x6e, 0xda, 0x07, 0x74, 0xb7, 0xbb, 0xbc, 0x96, 0x7b, 0xdb, - 0x9d, 0x69, 0x52, 0x7e, 0xc9, 0x6b, 0x2d, 0x27, 0xf4, 0xd1, 0xe3, 0xf2, 0xcf, 0x15, 0xa8, 0xa5, - 0xdd, 0x36, 0x18, 0x7f, 0x95, 0x15, 0xc5, 0x5f, 0x95, 0xa8, 0x0d, 0x89, 0x56, 0x62, 0xfb, 0xbe, - 0xed, 0x92, 0xf8, 0x91, 0xe4, 0xa0, 0x7b, 0x58, 0x6f, 0x86, 0x81, 0xe3, 0xd9, 0x2f, 0x2d, 0xb7, - 0x4b, 0x94, 0x98, 0xde, 0x87, 0xcb, 0x87, 0x56, 0x8b, 0xbc, 0x30, 0x77, 0x38, 0x06, 0x1f, 0x24, - 0x98, 0x30, 0xa3, 0xbf, 0xc1, 0x58, 0xe0, 0xbb, 0x64, 0x87, 0x9c, 0x10, 0x57, 0x1f, 0xe6, 0x92, - 0x0b, 0x39, 0xc9, 0x6d, 0x2f, 0xbc, 0x7b, 0x27, 0x16, 0xec, 0x71, 0xa3, 0x5b, 0x50, 0x21, 0xef, - 0xf4, 0x91, 0x33, 0x68, 0xab, 0x90, 0x77, 0xd1, 0x7c, 0x55, 0xe4, 0x25, 0x46, 0xf1, 0x5f, 0x7a, - 0x90, 0xf3, 0xd1, 0x01, 0x0b, 0x03, 0xab, 0x15, 0x9e, 0x25, 0x9e, 0xdf, 0x6a, 0x30, 0x95, 0x13, - 0xea, 0xe3, 0xf3, 0x5b, 0xe2, 0x55, 0x4b, 0xa4, 0x76, 0x37, 0xfa, 0xe5, 0xee, 0xaf, 0x9a, 0xf9, - 0x05, 0xf4, 0x67, 0x98, 0xb6, 0xd3, 0x20, 0xfe, 0xa9, 0xc5, 0xde, 0xf0, 0xa0, 0x5c, 0x32, 0x8b, - 0x96, 0x70, 0x1b, 0xf4, 0xe2, 0x63, 0x30, 0x8a, 0x9e, 0x8a, 0x3e, 0xaf, 0x2e, 0x24, 0x99, 0xa6, - 0x8b, 0x0e, 0x97, 0x97, 0x2c, 0x90, 0xc1, 0xbb, 0xa0, 0xdb, 0xf1, 0xa0, 0xbe, 0xed, 0xa9, 0x7d, - 0xa3, 0x4f, 0x0d, 0xa6, 0xbc, 0x58, 0xc9, 0x78, 0xf1, 0x35, 0xcc, 0x97, 0xec, 0x77, 0x1e, 0x48, - 0xe9, 0xce, 0xaf, 0x93, 0x10, 0x3f, 0x1c, 0xa2, 0x07, 0x70, 0xa5, 0xd5, 0x7b, 0x27, 0x43, 0xb5, - 0xa4, 0xaf, 0xa7, 0x5e, 0xfc, 0x8c, 0xd9, 0x22, 0x32, 0xa3, 0xe8, 0x3e, 0x8c, 0xbd, 0x4d, 0x46, - 0x5e, 0x34, 0x2d, 0x98, 0xd4, 0xa1, 0xdc, 0x98, 0xc9, 0x13, 0x63, 0xb9, 0xe3, 0x64, 0x62, 0x94, - 0x72, 0xea, 0xb4, 0x29, 0xe5, 0x52, 0x83, 0x25, 0x7a, 0x0c, 0x55, 0x5b, 0x7d, 0x56, 0x43, 0x73, - 0x49, 0x94, 0x32, 0x8f, 0x73, 0x86, 0x5e, 0xbc, 0xc0, 0x28, 0x7a, 0x08, 0xe3, 0x4c, 0x79, 0xe6, - 0x42, 0xc9, 0xd9, 0x32, 0x8f, 0x6b, 0xc6, 0x5c, 0x21, 0x9d, 0x51, 0xf4, 0x39, 0xcc, 0xd9, 0xc5, - 0xcf, 0x51, 0xe8, 0x7a, 0x46, 0x6b, 0xfe, 0xc1, 0xc8, 0xc0, 0x83, 0x58, 0x18, 0x45, 0x87, 0x32, - 0xfa, 0xf9, 0x67, 0x1f, 0x74, 0xa3, 0xb7, 0x41, 0xe9, 0xb3, 0x94, 0xb1, 0x3a, 0x98, 0x89, 0x51, - 0xf4, 0x0c, 0x50, 0x98, 0x7b, 0x5c, 0x41, 0x8b, 0x42, 0xb6, 0xf0, 0xe9, 0xc7, 0xb8, 0xd6, 0x67, - 0x95, 0x51, 0xd4, 0x02, 0xdd, 0x2e, 0x79, 0x55, 0x40, 0x38, 0x55, 0x52, 0x85, 0x6f, 0x22, 0xc6, - 0x8d, 0x81, 0x3c, 0xb1, 0xdd, 0x76, 0x6e, 0x9a, 0x97, 0x76, 0x17, 0xbe, 0x3c, 0x48, 0xbb, 0x4b, - 0x9e, 0x01, 0x9e, 0xc3, 0xb4, 0x9d, 0x1f, 0xb0, 0x51, 0xb1, 0x94, 0xcc, 0xb2, 0xa5, 0x7e, 0xcb, - 0xfc, 0x82, 0x99, 0x38, 0x4a, 0xcf, 0xba, 0x68, 0x5e, 0x88, 0xe4, 0x27, 0x6e, 0xc3, 0x28, 0x5b, - 0x92, 0x47, 0xce, 0xcc, 0xa7, 0xea, 0x91, 0xf3, 0x93, 0xb3, 0x7a, 0xe4, 0xa2, 0xc1, 0x76, 0x17, - 0xa6, 0x9c, 0xec, 0x68, 0x88, 0x16, 0x84, 0x4c, 0xd1, 0x98, 0x6a, 0x2c, 0x96, 0x2f, 0xc6, 0x45, - 0x2d, 0x8b, 0x53, 0x16, 0xb5, 0x3a, 0xea, 0xc8, 0xa2, 0x4e, 0x4f, 0x1c, 0xb9, 0x68, 0x46, 0x68, - 0xbb, 0x24, 0x9a, 0x62, 0x3a, 0x28, 0x89, 0xa6, 0x84, 0xe9, 0x0f, 0x61, 0xbc, 0xad, 0x20, 0x64, - 0x59, 0xe3, 0x19, 0x8c, 0x2d, 0x6b, 0x3c, 0x0b, 0xa7, 0xa3, 0xc0, 0x75, 0xd2, 0xb8, 0x53, 0x06, - 0x2e, 0x8f, 0x6e, 0x65, 0xe0, 0x0a, 0xa0, 0x2a, 0x7a, 0x05, 0xb5, 0x56, 0x11, 0x8e, 0x45, 0xcb, - 0xc9, 0x9d, 0x5a, 0x82, 0x99, 0x8d, 0x95, 0xfe, 0x0c, 0xb1, 0xc7, 0xa5, 0x95, 0xd2, 0xe3, 0x2a, - 0xae, 0x95, 0x1e, 0x4f, 0x81, 0xd7, 0xe8, 0x74, 0x19, 0x9b, 0xe4, 0xe9, 0xf2, 0xd8, 0x58, 0x9e, - 0xae, 0x00, 0x06, 0x8b, 0xbb, 0xb0, 0x08, 0x47, 0xaa, 0x77, 0x61, 0x09, 0x3a, 0x55, 0xef, 0xc2, - 0x52, 0x28, 0x1a, 0x67, 0x47, 0x06, 0x1f, 0xaa, 0xd9, 0x91, 0xc7, 0x9b, 0x6a, 0x76, 0x14, 0x01, - 0xcb, 0xd7, 0x30, 0xcb, 0x0a, 0x01, 0x35, 0x5a, 0xc9, 0xdc, 0xf9, 0x39, 0x68, 0x6f, 0x5c, 0x1f, - 0xc0, 0x11, 0x5b, 0xcc, 0x72, 0x90, 0x4a, 0x5a, 0x5c, 0x88, 0x49, 0xa5, 0xc5, 0xc5, 0x58, 0x0c, - 0xfd, 0x0f, 0x66, 0xec, 0x02, 0x10, 0x83, 0xb2, 0xf7, 0x4f, 0x06, 0xa8, 0x19, 0xcb, 0x7d, 0xd7, - 0xe3, 0xec, 0x2c, 0xc4, 0x19, 0x32, 0x3b, 0xcb, 0x50, 0x8d, 0xcc, 0xce, 0x52, 0x98, 0xf2, 0x78, - 0xf9, 0xd5, 0xb5, 0x3d, 0x4a, 0xbc, 0xfd, 0xed, 0x86, 0xf2, 0x27, 0x23, 0x17, 0xfa, 0x07, 0xff, - 0x3d, 0x18, 0xe1, 0xa4, 0xbb, 0xbf, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x23, 0x51, 0x2e, 0xd7, - 0x1c, 0x00, 0x00, +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_66c251c19ca9b483) } + +var fileDescriptor_group_66c251c19ca9b483 = []byte{ + // 1833 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdf, 0x53, 0xdb, 0xce, + 0x11, 0x1f, 0x99, 0x2f, 0x04, 0x36, 0x38, 0xc0, 0x81, 0xc1, 0x08, 0x02, 0xe4, 0xc2, 0xa4, 0x4c, + 0x9b, 0x98, 0x4e, 0x48, 0x33, 0xfd, 0x91, 0x99, 0x34, 0x81, 0x86, 0xd0, 0x62, 0x68, 0xe4, 0x24, + 0x9d, 0xa6, 0x93, 0xa1, 0xc2, 0x3e, 0x14, 0x05, 0x59, 0x3a, 0x74, 0x32, 0x64, 0x3a, 0xe9, 0x43, + 0xfb, 0xdc, 0x1f, 0x0f, 0x7d, 0xec, 0x5b, 0xa7, 0x7f, 0x42, 0xdf, 0xfa, 0xcf, 0x75, 0x74, 0x3a, + 0x9d, 0x4f, 0xd2, 0xc9, 0x26, 0x0d, 0xe4, 0xc5, 0x33, 0xda, 0xdb, 0xbd, 0xdd, 0xdb, 0xdb, 0x1f, + 0x9f, 0x3d, 0xc3, 0x8c, 0x13, 0x06, 0x3d, 0xba, 0xc9, 0x7f, 0x1b, 0x34, 0x0c, 0xa2, 0x00, 0x8d, + 0xf2, 0x0f, 0x73, 0xe3, 0x90, 0x12, 0xff, 0xc1, 0x5e, 0xf3, 0x41, 0x8b, 0x84, 0xe7, 0x24, 0xdc, + 0xa4, 0xa7, 0xce, 0x26, 0x67, 0xd8, 0x64, 0x9d, 0xd3, 0xa3, 0x0b, 0xb6, 0x79, 0xc1, 0x12, 0x01, + 0xb3, 0x31, 0x94, 0x33, 0xb4, 0x29, 0x25, 0xa1, 0xe0, 0xc7, 0xff, 0x31, 0xe0, 0xd6, 0x76, 0x48, + 0xec, 0x88, 0xec, 0xc6, 0x9a, 0x2c, 0x72, 0x86, 0xd6, 0xe0, 0xa6, 0xeb, 0xbb, 0x51, 0x93, 0x74, + 0x8f, 0x49, 0xc8, 0xea, 0xc6, 0xda, 0xc8, 0xc6, 0x84, 0xa5, 0x92, 0xd0, 0x4f, 0x61, 0x82, 0xdb, + 0xb5, 0xe7, 0x9f, 0x04, 0xf5, 0xca, 0x9a, 0xb1, 0x71, 0xf3, 0xe1, 0x72, 0x83, 0x71, 0x85, 0x47, + 0x36, 0x75, 0x8f, 0xa8, 0x1d, 0xda, 0x5d, 0xd6, 0xd8, 0x4d, 0x79, 0xac, 0x3e, 0x3b, 0xc2, 0x30, + 0x69, 0x77, 0xba, 0xae, 0xff, 0x86, 0x91, 0x70, 0x6f, 0x87, 0xd5, 0x47, 0xf8, 0xf6, 0x19, 0x5a, + 0x6c, 0x41, 0x70, 0xe1, 0x93, 0x30, 0xf9, 0xae, 0x7f, 0xb7, 0x66, 0xc4, 0x16, 0x28, 0x24, 0xdc, + 0x84, 0xa9, 0x8c, 0xd5, 0x8c, 0x66, 0x8d, 0x32, 0xbe, 0xc8, 0x28, 0xdc, 0x80, 0xe9, 0x5d, 0x12, + 0xf1, 0x25, 0xc6, 0xd7, 0xc8, 0x19, 0x32, 0x61, 0x3c, 0x61, 0xd8, 0x49, 0x7d, 0x20, 0xbf, 0xf1, + 0x2b, 0x98, 0xc9, 0xf1, 0x33, 0x8a, 0x9e, 0x00, 0xc8, 0x1d, 0x13, 0x91, 0x61, 0x16, 0x28, 0xfc, + 0xf8, 0x08, 0xa6, 0x5a, 0x62, 0xcb, 0xd4, 0x82, 0x7d, 0x98, 0x92, 0x0c, 0x2f, 0x82, 0xb0, 0x45, + 0x22, 0x71, 0x2e, 0x3c, 0x68, 0xd7, 0x84, 0xd3, 0xca, 0x8b, 0x62, 0x04, 0xd3, 0x59, 0x05, 0x8c, + 0xe2, 0x3f, 0x1b, 0x60, 0xa6, 0x07, 0x79, 0x46, 0xa9, 0xe7, 0xb6, 0xed, 0xc8, 0x0d, 0xfc, 0x7d, + 0x97, 0x45, 0xb1, 0x01, 0x3b, 0x00, 0xd4, 0x76, 0x5c, 0x9f, 0x13, 0x85, 0xee, 0x75, 0x8d, 0x6e, + 0x8b, 0x9c, 0xf5, 0x08, 0x8b, 0x7e, 0x2d, 0x79, 0x2d, 0x45, 0x0e, 0xad, 0x00, 0x9c, 0x84, 0x41, + 0x57, 0x5c, 0x66, 0x85, 0x5f, 0xa6, 0x42, 0xc1, 0x7f, 0x80, 0xa5, 0x52, 0x1b, 0x18, 0x45, 0x73, + 0x30, 0x1a, 0x05, 0x91, 0xed, 0x71, 0xfd, 0x55, 0x2b, 0xf9, 0x40, 0xbf, 0x80, 0xaa, 0x23, 0x02, + 0x36, 0x56, 0xcd, 0xea, 0x15, 0xee, 0xef, 0xd5, 0x32, 0xcf, 0x08, 0x3e, 0x2b, 0x2b, 0x85, 0x3f, + 0xc3, 0xf2, 0x2e, 0x89, 0x62, 0x43, 0x2c, 0x72, 0x76, 0x6d, 0x1e, 0x98, 0x87, 0xb1, 0x9e, 0x7a, + 0x7a, 0xf1, 0x85, 0x3f, 0xc3, 0xed, 0x01, 0xda, 0xaf, 0xfb, 0xec, 0x7f, 0x32, 0xa0, 0xf6, 0x3a, + 0xb4, 0x7d, 0x76, 0x42, 0x42, 0xce, 0x77, 0x18, 0x27, 0x58, 0x7c, 0xea, 0x3a, 0xdc, 0x10, 0xa1, + 0xce, 0x15, 0x4f, 0x58, 0xe9, 0x27, 0xba, 0x07, 0xb7, 0x02, 0xaf, 0x73, 0xa8, 0x24, 0x67, 0x72, + 0xa2, 0x1c, 0x35, 0xe6, 0xf3, 0xc9, 0x85, 0xca, 0x37, 0x92, 0xf0, 0x65, 0xa9, 0xb8, 0x0e, 0xf3, + 0x3a, 0x13, 0x18, 0xc5, 0x7f, 0x33, 0x60, 0xf2, 0x97, 0x81, 0xeb, 0xcb, 0xb2, 0x54, 0x6e, 0xd4, + 0x0a, 0x40, 0x48, 0xce, 0x9a, 0x84, 0x31, 0xdb, 0x21, 0x69, 0x80, 0xf5, 0x29, 0xf1, 0xfa, 0xc7, + 0xc0, 0xf5, 0x5b, 0x41, 0x2f, 0x6c, 0x13, 0x6e, 0xc8, 0xa8, 0xa5, 0x50, 0xd0, 0x3a, 0x54, 0x5d, + 0xff, 0xdc, 0x8d, 0x72, 0x05, 0x27, 0x4b, 0xc4, 0x53, 0x50, 0x55, 0xec, 0x61, 0x14, 0xff, 0xd3, + 0x80, 0xa5, 0x7c, 0xd4, 0xc6, 0x0b, 0x81, 0xcf, 0xc8, 0x50, 0x83, 0x07, 0x65, 0x44, 0xbc, 0xfe, + 0xc1, 0xf6, 0x3b, 0x1e, 0xe9, 0x34, 0x99, 0x23, 0x3c, 0xa7, 0x50, 0xe2, 0x1a, 0x9a, 0x7c, 0x59, + 0x84, 0xf5, 0xbc, 0x88, 0xdb, 0x3b, 0x6a, 0x65, 0x68, 0x78, 0x05, 0x96, 0xcb, 0x8d, 0x63, 0x14, + 0x6f, 0xc0, 0xe4, 0xab, 0x9e, 0x1b, 0x0d, 0x77, 0x6f, 0x7c, 0x70, 0x85, 0x93, 0x51, 0xfc, 0x77, + 0x03, 0x6a, 0x69, 0xc6, 0x26, 0x2d, 0xe1, 0x6a, 0xd3, 0x45, 0x31, 0xa5, 0x92, 0x75, 0xdc, 0x3c, + 0x8c, 0x9d, 0xb8, 0x5e, 0x44, 0x42, 0x71, 0x8b, 0xe2, 0x0b, 0x53, 0x98, 0xd7, 0x19, 0x54, 0x9a, + 0x41, 0x3f, 0x87, 0x1b, 0x5d, 0xd1, 0xde, 0x92, 0xdc, 0xb9, 0x57, 0x96, 0x3b, 0xc9, 0x76, 0x2f, + 0x7a, 0x9e, 0xc7, 0x8b, 0x66, 0x2a, 0x86, 0xf7, 0xf3, 0x1a, 0x65, 0xdf, 0x28, 0xbf, 0xf6, 0x7a, + 0x56, 0xeb, 0x44, 0x7f, 0xb7, 0xdf, 0xc1, 0x82, 0x76, 0x37, 0x46, 0x55, 0x53, 0x8d, 0xff, 0xcf, + 0x54, 0x0f, 0xd0, 0xaf, 0xdc, 0xf6, 0xa9, 0xc2, 0x33, 0xd8, 0xcc, 0x75, 0xa8, 0x9e, 0xba, 0xed, + 0x53, 0xd2, 0x49, 0x5b, 0x74, 0x62, 0x6c, 0x96, 0x18, 0x5f, 0x45, 0x48, 0x6c, 0x16, 0xf8, 0x22, + 0x3e, 0xc5, 0x17, 0xae, 0xc1, 0x6c, 0x41, 0x1b, 0xa3, 0xf8, 0x8f, 0x3c, 0x64, 0xe2, 0x04, 0x22, + 0x1d, 0xbe, 0xf6, 0x6d, 0x7b, 0x4c, 0x87, 0x5f, 0x57, 0x41, 0x7d, 0x69, 0x80, 0x3c, 0x82, 0x31, + 0xee, 0x8e, 0x34, 0x3e, 0x06, 0xf7, 0x71, 0xc1, 0x8b, 0x29, 0xcc, 0xed, 0xf1, 0x9a, 0x11, 0x6b, + 0x7d, 0x1d, 0x5c, 0xa2, 0x74, 0xf5, 0xbd, 0x58, 0x51, 0xbd, 0x18, 0xd7, 0xcf, 0xa4, 0xfa, 0x74, + 0xb2, 0x38, 0x29, 0x47, 0xc5, 0x0b, 0x50, 0xd3, 0x68, 0x64, 0x14, 0x9f, 0xc3, 0x9c, 0x6c, 0xaa, + 0x9e, 0xd7, 0xbf, 0xf6, 0x6b, 0xce, 0x50, 0xfc, 0xdb, 0x7e, 0x69, 0x50, 0xf4, 0x5e, 0x49, 0x1c, + 0xff, 0xcb, 0x80, 0xf1, 0xed, 0x66, 0x8b, 0xf3, 0x7c, 0x0d, 0xda, 0x43, 0x0d, 0x40, 0x8e, 0x6c, + 0x36, 0xb1, 0xe3, 0x0e, 0xec, 0x6e, 0xda, 0x37, 0x34, 0x2b, 0xe8, 0xfb, 0x30, 0x9d, 0xa5, 0xca, + 0x76, 0x56, 0xa0, 0xe3, 0xbf, 0x18, 0x30, 0x29, 0xa1, 0xe1, 0xd5, 0x39, 0x7c, 0x59, 0x1c, 0x57, + 0xb1, 0xb4, 0x4f, 0x50, 0xaf, 0x63, 0x24, 0x7b, 0x1d, 0x07, 0x50, 0x55, 0xac, 0x29, 0x0d, 0xf7, + 0xef, 0xe5, 0xc2, 0x7d, 0xaa, 0x91, 0x0c, 0x21, 0xa9, 0xbb, 0x65, 0x84, 0x3f, 0xe8, 0x03, 0xdf, + 0x4b, 0x94, 0x12, 0xfc, 0x8f, 0x42, 0xa7, 0x60, 0xdb, 0xcd, 0xd6, 0xb7, 0xe8, 0x14, 0x26, 0x8c, + 0xf7, 0xd2, 0x9b, 0x4d, 0x7c, 0x22, 0xbf, 0x8b, 0xdd, 0x22, 0x31, 0xea, 0x1a, 0xbb, 0xc5, 0x0f, + 0x60, 0x6a, 0xc7, 0x65, 0x5d, 0x97, 0xb1, 0x4b, 0xf4, 0x5b, 0x04, 0xd3, 0x59, 0x66, 0x46, 0xf1, + 0x47, 0x40, 0xcd, 0x9e, 0x98, 0x76, 0x2e, 0x53, 0xc3, 0x4b, 0x10, 0x67, 0x8c, 0x1c, 0xba, 0xbd, + 0x88, 0x74, 0x5a, 0xa4, 0x1d, 0xf8, 0x1d, 0xc6, 0x5d, 0x53, 0xb5, 0x32, 0xb4, 0xb8, 0x82, 0x17, + 0x74, 0x31, 0x8a, 0xf7, 0xa1, 0xbe, 0x6d, 0xfb, 0x6d, 0xe2, 0x5d, 0x85, 0x21, 0x78, 0x09, 0x16, + 0x4b, 0x76, 0x4b, 0xb0, 0x89, 0x24, 0x0f, 0xc5, 0x26, 0x0a, 0x27, 0xa3, 0xb8, 0x01, 0x28, 0xb7, + 0xef, 0xe0, 0x0d, 0x6a, 0x30, 0x5b, 0xe0, 0x67, 0x14, 0xbb, 0xb0, 0xd8, 0xca, 0x84, 0xc8, 0x81, + 0xdb, 0x3e, 0xf5, 0xed, 0xee, 0x10, 0x60, 0x67, 0xc2, 0xb8, 0x2f, 0x18, 0xc5, 0x79, 0xe5, 0xb7, + 0xe2, 0x89, 0x91, 0x8c, 0x27, 0x96, 0xc1, 0x2c, 0x53, 0xc5, 0x28, 0x7e, 0xc4, 0x07, 0xb4, 0xa4, + 0x71, 0xb5, 0x7a, 0x54, 0xc0, 0xe4, 0xb4, 0x79, 0xf6, 0xf7, 0x34, 0x32, 0x7b, 0xb6, 0xf8, 0x48, + 0xa5, 0x97, 0x62, 0x54, 0xe9, 0x6e, 0xc6, 0x17, 0x74, 0xb7, 0x2d, 0x9e, 0xcb, 0xfd, 0xed, 0x2e, + 0x35, 0x29, 0xbf, 0xe5, 0xb9, 0x56, 0x10, 0xfa, 0xea, 0x71, 0xf9, 0xdf, 0x15, 0xa8, 0x65, 0xdd, + 0x36, 0x1c, 0x7f, 0x95, 0x25, 0xc5, 0x8f, 0x95, 0x5b, 0x1b, 0x11, 0xad, 0xc4, 0x09, 0x02, 0xc7, + 0x23, 0xc9, 0x23, 0xc9, 0x71, 0xef, 0xa4, 0xd1, 0x8a, 0x42, 0xd7, 0x77, 0xde, 0xda, 0x5e, 0x8f, + 0x28, 0x77, 0xfa, 0x18, 0x6e, 0x9c, 0xd8, 0x6d, 0xf2, 0xc6, 0xda, 0xe7, 0x18, 0x7c, 0x98, 0x60, + 0xca, 0x8c, 0x7e, 0x02, 0x13, 0x61, 0xe0, 0x91, 0x7d, 0x72, 0x4e, 0xbc, 0xfa, 0x28, 0x97, 0x5c, + 0x2a, 0x48, 0xee, 0xf9, 0xd1, 0xd6, 0xc3, 0x44, 0xb0, 0xcf, 0x8d, 0xee, 0x43, 0x85, 0x7c, 0xaa, + 0x8f, 0x5d, 0x42, 0x5b, 0x85, 0x7c, 0x8a, 0xe7, 0x2b, 0x9d, 0x97, 0x18, 0xc5, 0x3f, 0xea, 0x43, + 0xce, 0x67, 0xc7, 0x2c, 0x0a, 0xed, 0x76, 0x74, 0x99, 0xfb, 0xfc, 0xab, 0x01, 0x33, 0x05, 0xa1, + 0x01, 0x3e, 0xbf, 0x2f, 0x5e, 0xb5, 0x44, 0x68, 0xf7, 0xe2, 0x5f, 0xee, 0xfe, 0xaa, 0x55, 0x5c, + 0x40, 0x3f, 0x84, 0x59, 0x27, 0x0b, 0xe2, 0x5f, 0xda, 0xec, 0x03, 0xbf, 0x94, 0xef, 0x2c, 0xdd, + 0x12, 0xee, 0x40, 0x5d, 0x7f, 0x0c, 0x46, 0xd1, 0x4b, 0xd1, 0xe7, 0xd5, 0x85, 0x34, 0xd2, 0xea, + 0xa2, 0xc3, 0x15, 0x25, 0x35, 0x32, 0xf8, 0x80, 0x6b, 0xe1, 0x2d, 0xde, 0x57, 0xfb, 0xc6, 0x80, + 0x1c, 0xcc, 0x78, 0xb1, 0x92, 0xf3, 0xe2, 0x7b, 0x58, 0x2c, 0xd9, 0xef, 0x4a, 0x90, 0xd2, 0x56, + 0x7e, 0x9c, 0x48, 0xc0, 0xc9, 0xe0, 0x4a, 0xf8, 0xa8, 0xef, 0xc9, 0xac, 0x10, 0xa3, 0xb1, 0x54, + 0x4f, 0xe0, 0xd0, 0x24, 0x20, 0xd2, 0xcf, 0x87, 0xff, 0x9d, 0x81, 0xe4, 0x8d, 0x12, 0x3d, 0x81, + 0x9b, 0xed, 0xfe, 0x93, 0x1c, 0xaa, 0xa5, 0x10, 0x22, 0xf3, 0xb8, 0x68, 0xce, 0xeb, 0xc8, 0x8c, + 0xa2, 0xc7, 0x30, 0xf1, 0x31, 0x9d, 0xae, 0xd1, 0xac, 0x60, 0x52, 0xe7, 0x7f, 0x73, 0xae, 0x48, + 0x4c, 0xe4, 0xce, 0xd2, 0xe1, 0x54, 0xca, 0xa9, 0x83, 0xad, 0x94, 0xcb, 0xcc, 0xb0, 0xe8, 0x39, + 0x54, 0x1d, 0xf5, 0x05, 0x0f, 0x2d, 0xa4, 0x01, 0x91, 0x7b, 0x07, 0x34, 0xeb, 0xfa, 0x05, 0x46, + 0xd1, 0x53, 0x98, 0x64, 0xca, 0x8b, 0x1a, 0x4a, 0xcf, 0x96, 0x7b, 0xc7, 0x33, 0x17, 0xb4, 0x74, + 0x46, 0xd1, 0xef, 0x61, 0xc1, 0xd1, 0xbf, 0x7c, 0xa1, 0x3b, 0x39, 0xad, 0xc5, 0xb7, 0x29, 0x13, + 0x0f, 0x63, 0x61, 0x14, 0x9d, 0xc0, 0xa2, 0x53, 0xf6, 0xc2, 0x84, 0xee, 0xf6, 0x37, 0x28, 0x7d, + 0x01, 0x33, 0xd7, 0x87, 0x33, 0x31, 0x8a, 0x5e, 0x01, 0x8a, 0x0a, 0xef, 0x38, 0x68, 0x59, 0xc8, + 0x6a, 0x5f, 0x99, 0xcc, 0xdb, 0x03, 0x56, 0x19, 0x45, 0x6d, 0xa8, 0x3b, 0x25, 0x0f, 0x18, 0x08, + 0x67, 0xb2, 0x57, 0xfb, 0xfc, 0x62, 0xde, 0x1d, 0xca, 0x93, 0xd8, 0xed, 0x14, 0x1e, 0x0e, 0xa4, + 0xdd, 0xda, 0x47, 0x0e, 0x69, 0x77, 0xc9, 0x8b, 0xc3, 0x6b, 0x98, 0x75, 0x8a, 0xb3, 0x3c, 0xd2, + 0x4b, 0xc9, 0x28, 0x5b, 0x19, 0xb4, 0xcc, 0x6b, 0xd9, 0xd4, 0x69, 0x76, 0xac, 0x46, 0x8b, 0x42, + 0xa4, 0x38, 0xdc, 0x9b, 0x66, 0xd9, 0x92, 0x3c, 0x72, 0x6e, 0x14, 0x56, 0x8f, 0x5c, 0x1c, 0xd2, + 0xd5, 0x23, 0xeb, 0x66, 0xe8, 0x03, 0x98, 0x71, 0xf3, 0x53, 0x28, 0x5a, 0x12, 0x32, 0xba, 0x89, + 0xd8, 0x5c, 0x2e, 0x5f, 0x4c, 0x92, 0x5a, 0x26, 0xa7, 0x4c, 0x6a, 0x75, 0xaa, 0x92, 0x49, 0x9d, + 0x1d, 0x6e, 0x0a, 0xb7, 0x19, 0x03, 0xfb, 0x92, 0xdb, 0x14, 0x83, 0x48, 0xc9, 0x6d, 0xca, 0x89, + 0xe0, 0x29, 0x4c, 0x76, 0x14, 0x30, 0x2e, 0x73, 0x3c, 0x07, 0xe7, 0x65, 0x8e, 0xe7, 0x91, 0x7b, + 0x7c, 0x71, 0xdd, 0x2c, 0xc4, 0x95, 0x17, 0x57, 0x04, 0xd2, 0xf2, 0xe2, 0x34, 0xa8, 0x18, 0xbd, + 0x83, 0x5a, 0x5b, 0x07, 0x99, 0xd1, 0x6a, 0x5a, 0x53, 0x4b, 0xe0, 0xb9, 0xb9, 0x36, 0x98, 0x21, + 0xf1, 0xb8, 0xb4, 0x52, 0x7a, 0x5c, 0x85, 0xd0, 0xd2, 0xe3, 0x19, 0x9c, 0x1c, 0x9f, 0x2e, 0x67, + 0x93, 0x3c, 0x5d, 0x11, 0x86, 0xcb, 0xd3, 0x69, 0x10, 0xb7, 0xa8, 0x85, 0x3a, 0xc8, 0xaa, 0xd6, + 0xc2, 0x12, 0x20, 0xac, 0xd6, 0xc2, 0x52, 0xd4, 0x9b, 0x44, 0x47, 0x0e, 0x8a, 0xaa, 0xd1, 0x51, + 0x84, 0xb6, 0x6a, 0x74, 0xe8, 0x30, 0xec, 0x7b, 0x98, 0x67, 0x5a, 0xec, 0x8e, 0xd6, 0x72, 0x35, + 0xbf, 0x30, 0x45, 0x98, 0x77, 0x86, 0x70, 0x24, 0x16, 0xb3, 0x02, 0x7a, 0x93, 0x16, 0x6b, 0xe1, + 0xaf, 0xb4, 0x58, 0x0f, 0xfb, 0xd0, 0x6f, 0x60, 0xce, 0xd1, 0xe0, 0x25, 0x94, 0xaf, 0x3f, 0x39, + 0x4c, 0x68, 0xae, 0x0e, 0x5c, 0x4f, 0xa2, 0xd3, 0xd1, 0x41, 0x1a, 0xb4, 0x9a, 0x6d, 0x20, 0x05, + 0x00, 0x25, 0xa3, 0xb3, 0x1c, 0x11, 0x29, 0x46, 0xab, 0xd0, 0x04, 0xe9, 0x8b, 0xa6, 0x04, 0x3b, + 0x05, 0xa3, 0xf3, 0xb8, 0xe6, 0xf9, 0xea, 0xbb, 0xdb, 0x87, 0x94, 0xf8, 0x47, 0x7b, 0x4d, 0xe5, + 0x8f, 0x52, 0x2e, 0xf3, 0x33, 0xfe, 0x7b, 0x3c, 0xc6, 0x49, 0x5b, 0xff, 0x0b, 0x00, 0x00, 0xff, + 0xff, 0xfe, 0x40, 0x04, 0x8f, 0x9b, 0x1d, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index 75da6054d..227577a30 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -281,14 +281,24 @@ message GetGroupAbstractInfoResp{ repeated GroupAbstractInfo groupAbstractInfos = 1; } -message getUserInGroupMembersReq { +message GetUserInGroupMembersReq { string userID = 1; repeated string groupIDs = 2; } -message getUserInGroupMembersResp{ +message GetUserInGroupMembersResp{ repeated server_api_params.GroupMemberFullInfo members = 1; } +message GetGroupMemberUserIDReq{ + string groupID = 1; +} + +message GetGroupMemberUserIDResp{ + repeated string userIDs = 1; +} + + + service group{ //创建群 rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -344,7 +354,9 @@ service group{ //获取群信息hash值 rpc getGroupAbstractInfo(GetGroupAbstractInfoReq) returns (GetGroupAbstractInfoResp); //获取某个用户在指定群中的信息 - rpc getUserInGroupMembers(getUserInGroupMembersReq) returns (getUserInGroupMembersResp); + rpc getUserInGroupMembers(GetUserInGroupMembersReq) returns (GetUserInGroupMembersResp); + //获取群成员用户ID + rpc getGroupMemberUserID(GetGroupMemberUserIDReq) returns (GetGroupMemberUserIDResp); } From 29b05499dfbc4e74087bfeb29a3befd482c4e8d2 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 9 Feb 2023 16:35:15 +0800 Subject: [PATCH 3/7] group rpc --- internal/rpc/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 4f7206948..9ab8067c7 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -75,7 +75,7 @@ func NewGroupServer(port int) *groupServer { //conns, err := g.registerCenter.GetConns(config.Config.RpcRegisterName.OpenImConversationName) - g.GroupInterface = controller.NewGroupInterface(controller.NewGroupDatabase(mysql.GormConn(), redis.GetClient(), mongo.GetClient())) + g.GroupInterface = controller.NewGroupInterface(mysql.GormConn(), redis.GetClient(), mongo.GetClient()) return &g } From 5da11952740b6e522ef360530f50aa23b880fd70 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 9 Feb 2023 17:54:31 +0800 Subject: [PATCH 4/7] group cache --- pkg/common/db/cache/group.go | 14 +++-- pkg/common/db/controller/group.go | 92 ++++++++++++++++++++++++++----- 2 files changed, 87 insertions(+), 19 deletions(-) diff --git a/pkg/common/db/cache/group.go b/pkg/common/db/cache/group.go index eb94ccb22..58746ac34 100644 --- a/pkg/common/db/cache/group.go +++ b/pkg/common/db/cache/group.go @@ -37,19 +37,18 @@ type GroupCache interface { BatchDelJoinedSuperGroupIDs(ctx context.Context, userIDs []string, fn func(ctx context.Context, userIDs []string) error) (err error) GetJoinedSuperGroupIDs(ctx context.Context, userID string, fn func(ctx context.Context, userID string) (joinedSuperGroupIDs []string, err error)) (joinedSuperGroupIDs []string, err error) - DelJoinedSuperGroupIDs(ctx context.Context, userID string, fn func(ctx context.Context, userID string) error) (err error) + DelJoinedSuperGroupIDs(ctx context.Context, userID string) (err error) GetGroupMembersHash(ctx context.Context, groupID string, fn func(ctx context.Context, groupID string) (hashCodeUint64 uint64, err error)) (hashCodeUint64 uint64, err error) DelGroupMembersHash(ctx context.Context, groupID string) (err error) GetGroupMemberIDs(ctx context.Context, groupID string, fn func(ctx context.Context, groupID string) (groupMemberIDs []string, err error)) (groupMemberIDs []string, err error) - DelGroupMemberIDs(ctx context.Context, groupID string) + DelGroupMemberIDs(ctx context.Context, groupID string) error GetJoinedGroupIDs(ctx context.Context, userID string, fn func(ctx context.Context, userID string) (joinedGroupIDs []string, err error)) (joinedGroupIDs []string, err error) DelJoinedGroupIDs(ctx context.Context, userID string) (err error) GetGroupMemberInfo(ctx context.Context, groupID, userID string, fn func(ctx context.Context, groupID, userID string) (groupMember *relationTb.GroupMemberModel, err error)) (groupMember *relationTb.GroupMemberModel, err error) - GetGroupMembersInfo(ctx context.Context, count, offset int32, groupID string, fn func(ctx context.Context, count, offset int32, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error)) (groupMembers []*relationTb.GroupMemberModel, err error) DelGroupMemberInfo(ctx context.Context, groupID, userID string) (err error) GetGroupMemberNum(ctx context.Context, groupID string, fn func(ctx context.Context, groupID string) (num int, err error)) (num int, err error) @@ -117,7 +116,7 @@ func (g *GroupCacheRedis) GetGroupsInfo(ctx context.Context, groupIDs []string) return groups, nil } -func (g *GroupCacheRedis) GetGroupInfo(ctx context.Context, groupID string) (group *relation.GroupGorm, err error) { +func (g *GroupCacheRedis) GetGroupInfo(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) { getGroup := func() (string, error) { groupInfo, err := g.group.Take(ctx, groupID) if err != nil { @@ -129,7 +128,7 @@ func (g *GroupCacheRedis) GetGroupInfo(ctx context.Context, groupID string) (gro } return string(bytes), nil } - group = &relation.GroupGorm{} + group = &relationTb.GroupModel{} defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group) }() @@ -339,6 +338,11 @@ func (g *GroupCacheRedis) GetGroupMemberInfo(ctx context.Context, groupID, userI return groupMember, utils.Wrap(err, "") } +func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, groupID, userIDs []string) (groupMember *relationTb.GroupMemberModel, err error) { + + return nil, err +} + func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, count, offset int32, groupID string) (groupMembers []*relation.GroupMember, err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "count", count, "offset", offset, "groupID", groupID, "groupMember", groupMembers) diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index e0acce579..f84857625 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -236,12 +236,34 @@ type GroupDataBase struct { groupRequestDB relationTb.GroupRequestModelInterface db *gorm.DB - cache *cache.GroupCache + //cache cache.GroupCache + cache *cache.GroupCacheRedis mongoDB *unrelation.SuperGroupMongoDriver } +func (g *GroupDataBase) delGroupMemberCache(ctx context.Context, groupID string, userIDs []string) error { + for _, userID := range userIDs { + if err := g.cache.DelJoinedGroupIDs(ctx, userID); err != nil { + return err + } + if err := g.cache.DelJoinedSuperGroupIDs(ctx, userID); err != nil { + return err + } + } + if err := g.cache.DelGroupMemberIDs(ctx, groupID); err != nil { + return err + } + if err := g.cache.DelGroupMemberNum(ctx, groupID); err != nil { + return err + } + if err := g.cache.DelGroupMembersHash(ctx, groupID); err != nil { + return err + } + return nil +} + func (g *GroupDataBase) FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error) { - return g.groupMemberDB.FindMemberUserID(ctx, groupID) + return g.cache.GetGroupMemberIDs(ctx, groupID) } func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error { @@ -263,11 +285,11 @@ func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relationTb.Gr } func (g *GroupDataBase) TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) { - return g.groupDB.Take(ctx, groupID) + return g.cache.GetGroupInfo(ctx, groupID) } func (g *GroupDataBase) FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) { - return g.groupDB.Find(ctx, groupIDs) + return g.cache.GetGroupsInfo(ctx, groupIDs) } func (g *GroupDataBase) SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupModel, error) { @@ -275,7 +297,15 @@ func (g *GroupDataBase) SearchGroup(ctx context.Context, keyword string, pageNum } func (g *GroupDataBase) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error { - return g.groupDB.UpdateMap(ctx, groupID, data) + return g.db.Transaction(func(tx *gorm.DB) error { + if err := g.groupDB.UpdateMap(ctx, groupID, data, tx); err != nil { + return err + } + if err := g.cache.DelGroupInfo(ctx, groupID); err != nil { + return err + } + return nil + }) } func (g *GroupDataBase) DismissGroup(ctx context.Context, groupID string) error { @@ -283,13 +313,22 @@ func (g *GroupDataBase) DismissGroup(ctx context.Context, groupID string) error if err := g.groupDB.UpdateStatus(ctx, groupID, constant.GroupStatusDismissed, tx); err != nil { return err } - return g.groupMemberDB.DeleteGroup(ctx, []string{groupID}, tx) - + if err := g.groupMemberDB.DeleteGroup(ctx, []string{groupID}, tx); err != nil { + return err + } + userIDs, err := g.cache.GetGroupMemberIDs(ctx, groupID) + if err != nil { + return err + } + if err := g.delGroupMemberCache(ctx, groupID, userIDs); err != nil { + return err + } + return nil }) } func (g *GroupDataBase) TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) { - return g.groupMemberDB.Take(ctx, groupID, userID) + return g.cache.GetGroupMemberInfo(ctx, groupID, userID) } func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) { @@ -297,6 +336,7 @@ func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*re } func (g *GroupDataBase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) { + //g.cache.GetGroupMembersInfo() return g.groupMemberDB.Find(ctx, groupIDs, userIDs, roleLevels) } @@ -309,19 +349,32 @@ func (g *GroupDataBase) SearchGroupMember(ctx context.Context, keyword string, g } func (g *GroupDataBase) HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationTb.GroupMemberModel) error { - if member == nil { - return g.groupRequestDB.UpdateHandler(ctx, groupID, userID, handledMsg, handleResult) - } return g.db.Transaction(func(tx *gorm.DB) error { if err := g.groupRequestDB.UpdateHandler(ctx, groupID, userID, handledMsg, handleResult, tx); err != nil { return err } - return g.groupMemberDB.Create(ctx, []*relationTb.GroupMemberModel{member}, tx) + if member != nil { + if err := g.groupMemberDB.Create(ctx, []*relationTb.GroupMemberModel{member}, tx); err != nil { + return err + } + if err := g.delGroupMemberCache(ctx, groupID, []string{userID}); err != nil { + return err + } + } + return nil }) } func (g *GroupDataBase) DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error { - return g.groupMemberDB.Delete(ctx, groupID, userIDs) + return g.db.Transaction(func(tx *gorm.DB) error { + if err := g.groupMemberDB.Delete(ctx, groupID, userIDs, tx); err != nil { + return err + } + if err := g.delGroupMemberCache(ctx, groupID, userIDs); err != nil { + return err + } + return nil + }) } func (g *GroupDataBase) MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string][]string, error) { @@ -348,12 +401,23 @@ func (g *GroupDataBase) TransferGroupOwner(ctx context.Context, groupID string, if rowsAffected != 1 { return utils.Wrap(fmt.Errorf("newOwnerUserID %s rowsAffected = %d", newOwnerUserID, rowsAffected), "") } + if err := g.delGroupMemberCache(ctx, groupID, []string{oldOwnerUserID, newOwnerUserID}); err != nil { + return err + } return nil }) } func (g *GroupDataBase) UpdateGroupMember(ctx context.Context, groupID, userID string, data map[string]any) error { - return g.groupMemberDB.Update(ctx, groupID, userID, data) + return g.db.Transaction(func(tx *gorm.DB) error { + if err := g.groupMemberDB.Update(ctx, groupID, userID, data, tx); err != nil { + return err + } + if err := g.cache.DelGroupMemberInfo(ctx, groupID, userID); err != nil { + return err + } + return nil + }) } func (g *GroupDataBase) CreateGroupRequest(ctx context.Context, requests []*relationTb.GroupRequestModel) error { From d26daa23f14aec206f0791f65e73500e5413127a Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Feb 2023 17:55:59 +0800 Subject: [PATCH 5/7] `Error code standardization` --- internal/common/rpc_server/a.go | 1 + internal/rpc/auth/auth.go | 28 +++++++----- pkg/common/config/config.go | 9 ---- pkg/common/db/cache/redis.go | 20 ++++----- pkg/common/db/cache/token.go | 75 ++++++++++++++++++++++++++++++++ pkg/common/db/controller/auth.go | 33 ++++++++++++-- 6 files changed, 132 insertions(+), 34 deletions(-) create mode 100644 pkg/common/db/cache/token.go diff --git a/internal/common/rpc_server/a.go b/internal/common/rpc_server/a.go index 75223eaf6..107c0cbf8 100644 --- a/internal/common/rpc_server/a.go +++ b/internal/common/rpc_server/a.go @@ -36,6 +36,7 @@ func NewRpcServer(registerIPInConfig string, port int, registerName string, zkSe return nil, err } s.RegisterCenter = zkClient + return s, nil } diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index eb0e35d5f..f723731e4 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -5,6 +5,7 @@ import ( "Open_IM/internal/common/rpc_server" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db/cache" "Open_IM/pkg/common/db/controller" "Open_IM/pkg/common/log" promePkg "Open_IM/pkg/common/prometheus" @@ -23,8 +24,11 @@ func NewRpcAuthServer(port int) *rpcAuth { if err != nil { panic(err) } + var redis cache.RedisClient + redis.InitRedis() return &rpcAuth{ - RpcServer: r, + RpcServer: r, + AuthInterface: controller.NewAuthController(redis.GetClient(), config.Config.TokenPolicy.AccessSecret, config.Config.TokenPolicy.AccessExpire), } } @@ -64,7 +68,7 @@ func (s *rpcAuth) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbA if _, err := check.GetUsersInfo(ctx, req.UserID); err != nil { return nil, err } - token, err := s.CreateToken(ctx, req.UserID, int(req.PlatformID), config.Config.TokenPolicy.AccessExpire) + token, err := s.CreateToken(ctx, req.UserID, constant.PlatformIDToName(int(req.PlatformID))) if err != nil { return nil, err } @@ -73,39 +77,41 @@ func (s *rpcAuth) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbA return &resp, nil } -func (s *rpcAuth) parseToken(ctx context.Context, tokensString, operationID string) (claims *tokenverify.Claims, err error) { +func (s *rpcAuth) parseToken(ctx context.Context, tokensString string) (claims *tokenverify.Claims, err error) { claims, err = tokenverify.GetClaimFromToken(tokensString) if err != nil { return nil, utils.Wrap(err, "") } - m, err := s.GetTokens(ctx, claims.UID, claims.Platform) + m, err := s.GetTokensWithoutError(ctx, claims.UID, claims.Platform) if err != nil { return nil, err } - + if len(m) == 0 { + return nil, constant.ErrTokenNotExist.Wrap() + } if v, ok := m[tokensString]; ok { switch v { case constant.NormalToken: return claims, nil case constant.KickedToken: - return nil, utils.Wrap(constant.ErrTokenKicked, "this token has been kicked by other same terminal ") + return nil, constant.ErrTokenKicked.Wrap() default: return nil, utils.Wrap(constant.ErrTokenUnknown, "") } } - return nil, utils.Wrap(constant.ErrTokenNotExist, "redis token map not find") + return nil, constant.ErrTokenNotExist.Wrap() } -func (s *rpcAuth) ParseToken(ctx context.Context, req *pbAuth.ParseTokenReq) (*pbAuth.ParseTokenResp, error) { - resp := pbAuth.ParseTokenResp{} - claims, err := s.parseToken(ctx, req.Token, req.OperationID) +func (s *rpcAuth) ParseToken(ctx context.Context, req *pbAuth.ParseTokenReq) (resp *pbAuth.ParseTokenResp, err error) { + resp = &pbAuth.ParseTokenResp{} + claims, err := s.parseToken(ctx, req.Token) if err != nil { return nil, err } resp.UserID = claims.UID resp.Platform = claims.Platform resp.ExpireTimeSeconds = claims.ExpiresAt.Unix() - return &resp, nil + return resp, nil } func (s *rpcAuth) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 647887063..35a3f93f5 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -665,15 +665,6 @@ func initConfig(config interface{}, configName, configPath string) { func InitConfig(configPath string) { initConfig(&Config, "config.yaml", configPath) initConfig(&UsualConfig, "usualConfig.yaml", configPath) - if Config.Etcd.UserName == "" { - Config.Etcd.UserName = UsualConfig.Etcd.UserName - } - if Config.Etcd.Password == "" { - Config.Etcd.Password = UsualConfig.Etcd.Password - } - if Config.Etcd.Secret == "" { - Config.Etcd.Secret = UsualConfig.Etcd.Secret - } if Config.Mysql.DBUserName == "" { Config.Mysql.DBUserName = UsualConfig.Mysql.DBUserName diff --git a/pkg/common/db/cache/redis.go b/pkg/common/db/cache/redis.go index f9b090f2e..cf06782ce 100644 --- a/pkg/common/db/cache/redis.go +++ b/pkg/common/db/cache/redis.go @@ -20,10 +20,10 @@ import ( ) const ( - userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq - appleDeviceToken = "DEVICE_TOKEN" - userMinSeq = "REDIS_USER_MIN_SEQ:" - uidPidToken = "UID_PID_TOKEN_STATUS:" + userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq + appleDeviceToken = "DEVICE_TOKEN" + userMinSeq = "REDIS_USER_MIN_SEQ:" + getuiToken = "GETUI_TOKEN" getuiTaskID = "GETUI_TASK_ID" messageCache = "MESSAGE_CACHE:" @@ -94,33 +94,33 @@ func NewRedisClient(rdb redis.UniversalClient) *RedisClient { return &RedisClient{rdb: rdb} } -//Perform seq auto-increment operation of user messages +// Perform seq auto-increment operation of user messages func (r *RedisClient) IncrUserSeq(uid string) (uint64, error) { key := userIncrSeq + uid seq, err := r.rdb.Incr(context.Background(), key).Result() return uint64(seq), err } -//Get the largest Seq +// Get the largest Seq func (r *RedisClient) GetUserMaxSeq(uid string) (uint64, error) { key := userIncrSeq + uid seq, err := r.rdb.Get(context.Background(), key).Result() return uint64(utils.StringToInt(seq)), err } -//set the largest Seq +// set the largest Seq func (r *RedisClient) SetUserMaxSeq(uid string, maxSeq uint64) error { key := userIncrSeq + uid return r.rdb.Set(context.Background(), key, maxSeq, 0).Err() } -//Set the user's minimum seq +// Set the user's minimum seq func (r *RedisClient) SetUserMinSeq(uid string, minSeq uint32) (err error) { key := userMinSeq + uid return r.rdb.Set(context.Background(), key, minSeq, 0).Err() } -//Get the smallest Seq +// Get the smallest Seq func (r *RedisClient) GetUserMinSeq(uid string) (uint64, error) { key := userMinSeq + uid seq, err := r.rdb.Get(context.Background(), key).Result() @@ -159,7 +159,7 @@ func (r *RedisClient) SetGroupMinSeq(groupID string, minSeq uint32) error { return r.rdb.Set(context.Background(), key, minSeq, 0).Err() } -//Store userid and platform class to redis +// Store userid and platform class to redis func (r *RedisClient) AddTokenFlag(userID string, platformID int, token string, flag int) error { key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID) log2.NewDebug("", "add token key is ", key) diff --git a/pkg/common/db/cache/token.go b/pkg/common/db/cache/token.go new file mode 100644 index 000000000..2aba43a0e --- /dev/null +++ b/pkg/common/db/cache/token.go @@ -0,0 +1,75 @@ +package cache + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/tokenverify" + "Open_IM/pkg/utils" + "context" + go_redis "github.com/go-redis/redis/v8" + "github.com/golang-jwt/jwt/v4" +) + +const ( + uidPidToken = "UID_PID_TOKEN_STATUS:" +) + +type Token interface { + //结果为空 不返回错误 + GetTokensWithoutError(ctx context.Context, userID, platform string) (map[string]int, error) + //创建token + CreateToken(ctx context.Context, userID string, platformID int) (string, error) +} + +type TokenRedis struct { + RedisClient *RedisClient + AccessSecret string + AccessExpire int64 +} + +func NewTokenRedis(redisClient *RedisClient, accessSecret string, accessExpire int64) *TokenRedis { + return &TokenRedis{redisClient, accessSecret, accessExpire} +} + +// 结果为空 不返回错误 +func (t *TokenRedis) GetTokensWithoutError(ctx context.Context, userID, platform string) (map[string]int, error) { + key := uidPidToken + userID + ":" + platform + m, err := t.RedisClient.GetClient().HGetAll(context.Background(), key).Result() + if err != nil && err == go_redis.Nil { + return nil, nil + } + mm := make(map[string]int) + for k, v := range m { + mm[k] = utils.StringToInt(v) + } + return mm, utils.Wrap(err, "") +} + +// 创建token +func (t *TokenRedis) CreateToken(ctx context.Context, userID string, platform string) (string, error) { + tokens, err := t.GetTokensWithoutError(ctx, userID, platform) + if err != nil { + return "", err + } + var deleteTokenKey []string + for k, v := range tokens { + _, err = tokenverify.GetClaimFromToken(k) + if err != nil || v != constant.NormalToken { + deleteTokenKey = append(deleteTokenKey, k) + } + } + if len(deleteTokenKey) != 0 { + key := uidPidToken + userID + ":" + platform + err := t.RedisClient.GetClient().HDel(context.Background(), key, deleteTokenKey...).Err() + if err != nil { + return "", err + } + } + claims := tokenverify.BuildClaims(userID, platform, t.AccessExpire) + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + tokenString, err := token.SignedString([]byte(t.AccessSecret)) + if err != nil { + return "", utils.Wrap(err, "") + } + key := uidPidToken + userID + ":" + platform + return "", utils.Wrap(t.RedisClient.GetClient().HSet(context.Background(), key, tokenString, constant.NormalToken).Err(), "") +} diff --git a/pkg/common/db/controller/auth.go b/pkg/common/db/controller/auth.go index 9c9bcf6df..eba88fd7d 100644 --- a/pkg/common/db/controller/auth.go +++ b/pkg/common/db/controller/auth.go @@ -1,9 +1,34 @@ package controller -import "context" +import ( + "Open_IM/pkg/common/db/cache" + "context" + "github.com/go-redis/redis/v8" +) type AuthInterface interface { - GetTokens(ctx context.Context, userID, platform string) (map[string]int, error) - DeleteToken(ctx context.Context, userID, platform string) error - CreateToken(ctx context.Context, userID string, platformID int, ttl int64) (string, error) + //结果为空 不返回错误 + GetTokensWithoutError(ctx context.Context, userID, platform string) (map[string]int, error) + + //创建token + CreateToken(ctx context.Context, userID string, platform string) (string, error) +} + +type AuthController struct { + database *cache.TokenRedis +} + +func NewAuthController(rdb redis.UniversalClient, accessSecret string, accessExpire int64) *AuthController { + cache.NewRedisClient(rdb) + return &AuthController{database: cache.NewTokenRedis(cache.NewRedisClient(rdb), accessSecret, accessExpire)} +} + +// 结果为空 不返回错误 +func (a *AuthController) GetTokensWithoutError(ctx context.Context, userID, platform string) (map[string]int, error) { + return a.database.GetTokensWithoutError(ctx, userID, platform) +} + +// 创建token +func (a *AuthController) CreateToken(ctx context.Context, userID string, platform string) (string, error) { + return a.database.CreateToken(ctx, userID, platform) } From 0198a628dad9cba62c243606c468413ae3615071 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Thu, 9 Feb 2023 18:05:19 +0800 Subject: [PATCH 6/7] `Error code standardization` --- internal/common/rpc_server/{a.go => register.go} | 0 internal/rpc/group/copy.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename internal/common/rpc_server/{a.go => register.go} (100%) diff --git a/internal/common/rpc_server/a.go b/internal/common/rpc_server/register.go similarity index 100% rename from internal/common/rpc_server/a.go rename to internal/common/rpc_server/register.go diff --git a/internal/rpc/group/copy.go b/internal/rpc/group/copy.go index ba24f9109..631fab2e4 100644 --- a/internal/rpc/group/copy.go +++ b/internal/rpc/group/copy.go @@ -84,7 +84,7 @@ func DbToPbGroupRequest(m *relation.GroupRequestModel, user *open_im_sdk.PublicU func DbToPbGroupAbstractInfo(groupID string, groupMemberNumber int32, groupMemberListHash uint64) *pbGroup.GroupAbstractInfo { return &pbGroup.GroupAbstractInfo{ GroupID: groupID, - GroupMemberNumber: groupMemberNumber, + GroupMemberNumber: uint32(groupMemberNumber), GroupMemberListHash: groupMemberListHash, } } From d6d6afb788a2c7d5b486dd0cca00b7ea91427b0c Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 9 Feb 2023 19:40:45 +0800 Subject: [PATCH 7/7] group update batch --- cmd/open_im_api/docs/docs.go | 4 +- internal/api/auth/auth.go | 3 +- internal/api/friend/friend.go | 8 +- internal/api/group/group.go | 14 +- internal/api/group/super_group.go | 4 +- internal/api/manage/management_chat.go | 5 +- internal/api/office/work_moments.go | 3 +- internal/api/user/user.go | 3 +- internal/msggateway/gate/validate.go | 10 +- .../sdk/tpns-server-sdk-go/go/auth/auth.go | 2 +- internal/rpc/group/callback.go | 2 +- internal/rpc/group/db_map.go | 2 +- internal/rpc/group/group.go | 88 ++- pkg/apistruct/friend.go | 10 +- pkg/apistruct/group.go | 2 +- pkg/common/db/cache/conversation.go | 23 - pkg/common/db/cache/group.go | 45 +- pkg/common/db/cache/utils.go | 49 ++ pkg/common/db/controller/group.go | 39 +- pkg/common/log/file_line_hk.go | 2 +- pkg/proto/group/group.pb.go | 556 ++++++++---------- pkg/proto/group/group.proto | 18 +- 22 files changed, 426 insertions(+), 466 deletions(-) create mode 100644 pkg/common/db/cache/utils.go diff --git a/cmd/open_im_api/docs/docs.go b/cmd/open_im_api/docs/docs.go index 8b711dfe1..01f61ab1d 100644 --- a/cmd/open_im_api/docs/docs.go +++ b/cmd/open_im_api/docs/docs.go @@ -117,7 +117,7 @@ const docTemplate = `{ { "type": "object", "properties": { - "Data": { + "Map": { "$ref": "#/definitions/api_struct.ExpireTime" } } @@ -4369,7 +4369,7 @@ const docTemplate = `{ { "type": "object", "properties": { - "Data": { + "Map": { "type": "array", "items": { "$ref": "#/definitions/server_api_params.PublicUserInfo" diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index d699fbf63..a6148617a 100644 --- a/internal/api/auth/auth.go +++ b/internal/api/auth/auth.go @@ -6,7 +6,6 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/common/tokenverify" - "Open_IM/pkg/getcdv3" rpc "Open_IM/pkg/proto/auth" open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -149,7 +148,7 @@ func UserToken(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.ParseTokenReq true "secret为openIM密钥, 详细见服务端config.yaml secret字段
platform为平台ID" // @Produce json -// @Success 0 {object} api.ParseTokenResp{Data=api.ExpireTime} +// @Success 0 {object} api.ParseTokenResp{Map=api.ExpireTime} // @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" // @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /auth/parse_token [post] diff --git a/internal/api/friend/friend.go b/internal/api/friend/friend.go index 0c0fa3d60..b990b0f59 100644 --- a/internal/api/friend/friend.go +++ b/internal/api/friend/friend.go @@ -343,7 +343,7 @@ package friend // utils.CopyStructFields(&black, v) // resp.BlackUserInfoList = append(resp.BlackUserInfoList, &black) // } -// resp.Data = jsonData.JsonDataList(resp.BlackUserInfoList) +// resp.Map = jsonData.JsonDataList(resp.BlackUserInfoList) // log.NewInfo(req.CommID.OperationID, "GetBlacklist api return ", resp) // c.JSON(http.StatusOK, resp) //} @@ -561,7 +561,7 @@ package friend // } // // resp := api.GetFriendListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FriendInfoList: RpcResp.FriendInfoList} -// resp.Data = jsonData.JsonDataList(resp.FriendInfoList) +// resp.Map = jsonData.JsonDataList(resp.FriendInfoList) // log.NewInfo(req.CommID.OperationID, "GetFriendList api return ", resp) // c.JSON(http.StatusOK, resp) // //c.JSON(http.StatusOK, resp) @@ -618,7 +618,7 @@ package friend // } // // resp := api.GetFriendApplyListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FriendRequestList: RpcResp.FriendRequestList} -// resp.Data = jsonData.JsonDataList(resp.FriendRequestList) +// resp.Map = jsonData.JsonDataList(resp.FriendRequestList) // log.NewInfo(req.CommID.OperationID, "GetFriendApplyList api return ", resp) // c.JSON(http.StatusOK, resp) //} @@ -672,7 +672,7 @@ package friend // return // } // resp := api.GetSelfApplyListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FriendRequestList: RpcResp.FriendRequestList} -// resp.Data = jsonData.JsonDataList(resp.FriendRequestList) +// resp.Map = jsonData.JsonDataList(resp.FriendRequestList) // log.NewInfo(req.CommID.OperationID, "GetSelfApplyList api return ", resp) // c.JSON(http.StatusOK, resp) //} diff --git a/internal/api/group/group.go b/internal/api/group/group.go index 21811a7bc..014fa94b9 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -142,7 +142,7 @@ package group // } // // memberListResp := api.GetGroupMembersInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList} -// memberListResp.Data = jsonData.JsonDataList(RpcResp.MemberList) +// memberListResp.Map = jsonData.JsonDataList(RpcResp.MemberList) // log.NewInfo(req.OperationID, "GetGroupMembersInfo api return ", memberListResp) // c.JSON(http.StatusOK, memberListResp) //} @@ -186,7 +186,7 @@ package group // } // // memberListResp := api.GetGroupMemberListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList, NextSeq: RpcResp.NextSeq} -// memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList) +// memberListResp.Map = jsonData.JsonDataList(memberListResp.MemberList) // // log.NewInfo(req.OperationID, "FindGroupMemberAll api return ", memberListResp) // c.JSON(http.StatusOK, memberListResp) @@ -243,7 +243,7 @@ package group // } // // memberListResp := api.GetGroupAllMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList} -// memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList) +// memberListResp.Map = jsonData.JsonDataList(memberListResp.MemberList) // log.NewInfo(req.OperationID, "GetGroupAllMember api return ", len(memberListResp.MemberList)) // c.JSON(http.StatusOK, memberListResp) //} @@ -298,7 +298,7 @@ package group // } // // GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupInfoList: RpcResp.GroupList} -// GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) +// GroupListResp.Map = jsonData.JsonDataList(GroupListResp.GroupInfoList) // log.NewInfo(req.OperationID, "FindJoinedGroup api return ", GroupListResp) // c.JSON(http.StatusOK, GroupListResp) //} @@ -437,7 +437,7 @@ package group //// resp := api.CreateGroupResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}} //// if RpcResp.ErrCode == 0 { //// utils.CopyStructFields(&resp.GroupInfo, RpcResp.GroupInfo) -//// resp.Data = jsonData.JsonDataOne(&resp.GroupInfo) +//// resp.Map = jsonData.JsonDataOne(&resp.GroupInfo) //// } //// log.NewInfo(req.OperationID, "CreateGroup api return ", resp) //// c.JSON(http.StatusOK, resp) @@ -496,7 +496,7 @@ package group // } // // resp := api.GetGroupApplicationListResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}, GroupRequestList: reply.GroupRequestList} -// resp.Data = jsonData.JsonDataList(resp.GroupRequestList) +// resp.Map = jsonData.JsonDataList(resp.GroupRequestList) // log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp) // c.JSON(http.StatusOK, resp) //} @@ -567,7 +567,7 @@ package group // } // // resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupInfoList: RpcResp.GroupInfoList} -// resp.Data = jsonData.JsonDataList(resp.GroupInfoList) +// resp.Map = jsonData.JsonDataList(resp.GroupInfoList) // log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) // c.JSON(http.StatusOK, resp) //} diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go index 5d6c9c2d7..10858d706 100644 --- a/internal/api/group/super_group.go +++ b/internal/api/group/super_group.go @@ -46,7 +46,7 @@ package group // return // } // GroupListResp := api.GetJoinedSuperGroupListResp{GetJoinedGroupListResp: api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList}} -// GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList) +// GroupListResp.Map = jsonData.JsonDataList(GroupListResp.GroupInfoList) // log.NewInfo(req.OperationID, "GetJoinedSuperGroupList api return ", GroupListResp) // c.JSON(http.StatusOK, GroupListResp) //} @@ -83,7 +83,7 @@ package group // } // // resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}} -// resp.Data = jsonData.JsonDataList(resp.GroupInfoList) +// resp.Map = jsonData.JsonDataList(resp.GroupInfoList) // log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp) // c.JSON(http.StatusOK, resp) //} diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 8a06f6468..9c38231f7 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -13,7 +13,6 @@ import ( "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" "Open_IM/pkg/common/tokenverify" - "Open_IM/pkg/getcdv3" pbChat "Open_IM/pkg/proto/msg" open_im_sdk "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -165,7 +164,7 @@ func ManagementSendMsg(c *gin.Context) { } if err := mapstructure.WeakDecode(params.Content, &data); err != nil { c.JSON(http.StatusOK, gin.H{"errCode": 401, "errMsg": err.Error()}) - log.Error(c.PostForm("operationID"), "content to Data struct err", err.Error()) + log.Error(c.PostForm("operationID"), "content to Map struct err", err.Error()) return } else if err := validate.Struct(data); err != nil { c.JSON(http.StatusOK, gin.H{"errCode": 403, "errMsg": err.Error()}) @@ -298,7 +297,7 @@ func ManagementBatchSendMsg(c *gin.Context) { } if err := mapstructure.WeakDecode(params.Content, &data); err != nil { c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()}) - log.Error(c.PostForm("operationID"), "content to Data struct err", err.Error()) + log.Error(c.PostForm("operationID"), "content to Map struct err", err.Error()) return } else if err := validate.Struct(data); err != nil { c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()}) diff --git a/internal/api/office/work_moments.go b/internal/api/office/work_moments.go index ab07fa0bd..89cf76782 100644 --- a/internal/api/office/work_moments.go +++ b/internal/api/office/work_moments.go @@ -5,7 +5,6 @@ import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/log" "Open_IM/pkg/common/tokenverify" - "Open_IM/pkg/getcdv3" pbOffice "Open_IM/pkg/proto/office" pbCommon "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" @@ -565,7 +564,7 @@ func GetUserFriendWorkMoments(c *gin.Context) { if err := utils.CopyStructFields(&resp, respPb.CommonResp); err != nil { log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) } - //if err := utils.CopyStructFields(&resp.Data.WorkMoments, respPb.WorkMoments); err != nil { + //if err := utils.CopyStructFields(&resp.Map.WorkMoments, respPb.WorkMoments); err != nil { // log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error()) //} resp.Data.WorkMoments = []*api.WorkMoment{} diff --git a/internal/api/user/user.go b/internal/api/user/user.go index 5a0b39e01..837edba79 100644 --- a/internal/api/user/user.go +++ b/internal/api/user/user.go @@ -7,7 +7,6 @@ import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" "Open_IM/pkg/common/tokenverify" - "Open_IM/pkg/getcdv3" cacheRpc "Open_IM/pkg/proto/cache" pbRelay "Open_IM/pkg/proto/relay" open_im_sdk "Open_IM/pkg/proto/sdk_ws" @@ -156,7 +155,7 @@ func GetBlackIDListFromCache(c *gin.Context) { // @Param token header string true "im token" // @Param req body api.GetUsersInfoReq true "请求体" // @Produce json -// @Success 0 {object} api.GetUsersInfoResp{Data=[]open_im_sdk.PublicUserInfo} +// @Success 0 {object} api.GetUsersInfoResp{Map=[]open_im_sdk.PublicUserInfo} // @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误" // @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等" // @Router /user/get_users_info [post] diff --git a/internal/msggateway/gate/validate.go b/internal/msggateway/gate/validate.go index 51a665122..cbe986d93 100644 --- a/internal/msggateway/gate/validate.go +++ b/internal/msggateway/gate/validate.go @@ -62,7 +62,7 @@ func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass boo case constant.WSGetNewestSeq: data := open_im_sdk.GetMaxAndMinSeqReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Map struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { @@ -74,7 +74,7 @@ func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass boo case constant.WSSendMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Map struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { @@ -86,7 +86,7 @@ func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass boo case constant.WSSendSignalMsg: data := pbRtc.SignalReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Map struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { @@ -98,7 +98,7 @@ func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass boo case constant.WSPullMsgBySeqList: data := open_im_sdk.PullMessageBySeqListReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Map struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { @@ -110,7 +110,7 @@ func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass boo case constant.WsSetBackgroundStatus: data := open_im_sdk.SetAppBackgroundStatusReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Data struct err", err.Error(), r) + log.Error(operationID, "Decode Map struct err", err.Error(), r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { diff --git a/internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go b/internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go index 5b8a486b0..0a3c07531 100644 --- a/internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go +++ b/internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go @@ -49,7 +49,7 @@ func GenSign(timeStamp uint64, accessId string, secretKey, requestBody string) s signBody := strconv.Itoa(int(timeStamp)) + accessId + requestBody // Create a new HMAC by defining the hash type and the key (as byte array) h := hmac.New(sha256.New, []byte(secretKey)) - // Write Data to it + // Write Map to it h.Write([]byte(signBody)) // Get result and encode as hexadecimal string diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index e60186d8b..b437e8702 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -119,7 +119,7 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, grou return err } -func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (err error) { +func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfo) (err error) { defer func() { tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "req", *req) }() diff --git a/internal/rpc/group/db_map.go b/internal/rpc/group/db_map.go index ebdf9a8f0..2393cfc75 100644 --- a/internal/rpc/group/db_map.go +++ b/internal/rpc/group/db_map.go @@ -44,7 +44,7 @@ func UpdateGroupMemberMutedTimeMap(t time.Time) map[string]any { } } -func UpdateGroupMemberMap(req *pbGroup.SetGroupMemberInfoReq) map[string]any { +func UpdateGroupMemberMap(req *pbGroup.SetGroupMemberInfo) map[string]any { m := make(map[string]any) if req.Nickname != nil { m["nickname"] = req.Nickname.Value diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 9ab8067c7..d7d65e069 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -30,7 +30,6 @@ import ( "github.com/OpenIMSDK/openKeeper" "google.golang.org/grpc" - "google.golang.org/protobuf/types/known/wrapperspb" ) type groupServer struct { @@ -951,50 +950,79 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu return resp, nil } -func (s *groupServer) SetGroupMemberNickname(ctx context.Context, req *pbGroup.SetGroupMemberNicknameReq) (*pbGroup.SetGroupMemberNicknameResp, error) { - _, err := s.SetGroupMemberInfo(ctx, &pbGroup.SetGroupMemberInfoReq{GroupID: req.GroupID, UserID: req.UserID, Nickname: wrapperspb.String(req.Nickname)}) - if err != nil { - return nil, err - } - return &pbGroup.SetGroupMemberNicknameResp{}, nil -} - func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfoReq) (*pbGroup.SetGroupMemberInfoResp, error) { resp := &pbGroup.SetGroupMemberInfoResp{} - if req.RoleLevel != nil && req.RoleLevel.Value == constant.GroupOwner { - return nil, constant.ErrNoPermission.Wrap("set group owner") + if len(req.Members) == 0 { + return nil, constant.ErrArgs.Wrap("members empty") } - group, err := s.GroupInterface.TakeGroup(ctx, req.GroupID) + duplicateMap := make(map[[2]string]struct{}) + userIDMap := make(map[string]struct{}) + groupIDMap := make(map[string]struct{}) + for _, member := range req.Members { + key := [...]string{member.GroupID, member.UserID} + if _, ok := duplicateMap[key]; ok { + return nil, constant.ErrArgs.Wrap("group user duplicate") + } + duplicateMap[key] = struct{}{} + userIDMap[member.UserID] = struct{}{} + groupIDMap[member.GroupID] = struct{}{} + } + groupIDs := utils.Keys(groupIDMap) + userIDs := utils.Keys(userIDMap) + members, err := s.GroupInterface.FindGroupMember(ctx, groupIDs, append(userIDs, tracelog.GetOpUserID(ctx)), nil) if err != nil { return nil, err } - if group.Status == constant.GroupStatusDismissed { - return nil, constant.ErrArgs.Wrap("group status is dismissed") + for _, member := range members { + delete(duplicateMap, [...]string{member.GroupID, member.UserID}) } - member, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, req.UserID) - if err != nil { - return nil, err + if len(duplicateMap) > 0 { + return nil, constant.ErrArgs.Wrap("group not found or user not in group") } - if tracelog.GetOpUserID(ctx) == req.UserID { - if req.RoleLevel != nil { - return nil, constant.ErrArgs.Wrap("update role level") + memberMap := utils.SliceToMap(members, func(e *relationTb.GroupMemberModel) [2]string { + return [...]string{e.GroupID, e.UserID} + }) + if !tokenverify.IsAppManagerUid(ctx) { + opUserID := tracelog.GetOpUserID(ctx) + for _, member := range members { + if member.UserID == opUserID { + continue + } + opMember, ok := memberMap[[...]string{member.GroupID, member.UserID}] + if !ok { + return nil, constant.ErrArgs.Wrap(fmt.Sprintf("user %s not in group %s", opUserID, member.GroupID)) + } + if member.RoleLevel >= opMember.RoleLevel { + return nil, constant.ErrNoPermission.Wrap(fmt.Sprintf("group %s : %s RoleLevel %d >= %s RoleLevel %d", member.GroupID, member.UserID, member.RoleLevel, opMember.UserID, opMember.RoleLevel)) + } } - } else if !tokenverify.IsAppManagerUid(ctx) { - opMember, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx)) - if err != nil { - return nil, err + } + for _, member := range req.Members { + if member.RoleLevel == nil { + continue } - if opMember.RoleLevel <= member.RoleLevel { - return nil, constant.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) + if memberMap[[...]string{member.GroupID, member.UserID}].RoleLevel == constant.GroupOwner { + return nil, constant.ErrArgs.Wrap(fmt.Sprintf("group %s user %s is owner", member.GroupID, member.UserID)) } } - if err := CallbackBeforeSetGroupMemberInfo(ctx, req); err != nil { - return nil, err + for i := 0; i < len(req.Members); i++ { + if err := CallbackBeforeSetGroupMemberInfo(ctx, req.Members[i]); err != nil { + return nil, err + } } - if err := s.GroupInterface.UpdateGroupMember(ctx, req.GroupID, req.UserID, UpdateGroupMemberMap(req)); err != nil { + err = s.GroupInterface.UpdateGroupMembers(ctx, utils.Slice(req.Members, func(e *pbGroup.SetGroupMemberInfo) *controller.BatchUpdateGroupMember { + return &controller.BatchUpdateGroupMember{ + GroupID: e.GroupID, + UserID: e.UserID, + Map: UpdateGroupMemberMap(e), + } + })) + if err != nil { return nil, err } - chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID) + for _, member := range req.Members { + chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), member.GroupID, member.UserID) + } return resp, nil } diff --git a/pkg/apistruct/friend.go b/pkg/apistruct/friend.go index 9558e69c5..746753c4a 100644 --- a/pkg/apistruct/friend.go +++ b/pkg/apistruct/friend.go @@ -58,7 +58,7 @@ package apistruct //type GetBlackListResp struct { // CommResp // BlackUserInfoList []*open_im_sdk.PublicUserInfo `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} // ////type PublicUserInfo struct { @@ -100,7 +100,7 @@ package apistruct //type GetFriendsInfoResp struct { // CommResp // FriendInfoList []*open_im_sdk.FriendInfo `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} // //type GetFriendListReq struct { @@ -110,7 +110,7 @@ package apistruct //type GetFriendListResp struct { // CommResp // FriendInfoList []*open_im_sdk.FriendInfo `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} // //type GetFriendApplyListReq struct { @@ -120,7 +120,7 @@ package apistruct //type GetFriendApplyListResp struct { // CommResp // FriendRequestList []*open_im_sdk.FriendRequest `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} // //type GetSelfApplyListReq struct { @@ -130,7 +130,7 @@ package apistruct //type GetSelfApplyListResp struct { // CommResp // FriendRequestList []*open_im_sdk.FriendRequest `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} type FriendInfo struct { diff --git a/pkg/apistruct/group.go b/pkg/apistruct/group.go index e799204fc..0bdf9b4c4 100644 --- a/pkg/apistruct/group.go +++ b/pkg/apistruct/group.go @@ -92,7 +92,7 @@ type GetGroupAllMemberResp struct { //type GetGroupAllMemberListBySplitResp struct { // CommResp // MemberList []*open_im_sdk.GroupMemberFullInfo `json:"-"` -// Data []map[string]interface{} `json:"data" swaggerignore:"true"` +// Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} type CreateGroupReq struct { diff --git a/pkg/common/db/cache/conversation.go b/pkg/common/db/cache/conversation.go index 65681edb7..4d40143a1 100644 --- a/pkg/common/db/cache/conversation.go +++ b/pkg/common/db/cache/conversation.go @@ -148,29 +148,6 @@ func (c *ConversationRedis) GetUserConversationIDs1(ctx context.Context, ownerUs // return t, nil //} -func GetCache[T any](ctx context.Context, rcClient *rockscache.Client, key string, expire time.Duration, fn func(ctx context.Context) (T, error)) (T, error) { - v, err := rcClient.Fetch(key, expire, func() (string, error) { - v, err := fn(ctx) - if err != nil { - return "", err - } - bs, err := json.Marshal(v) - if err != nil { - return "", utils.Wrap(err, "") - } - return string(bs), nil - }) - var t T - if err != nil { - return t, err - } - err = json.Unmarshal([]byte(v), &t) - if err != nil { - return t, utils.Wrap(err, "") - } - return t, nil -} - func (c *ConversationRedis) DelUserConversationIDs(ctx context.Context, ownerUserID string) (err error) { defer func() { tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID) diff --git a/pkg/common/db/cache/group.go b/pkg/common/db/cache/group.go index 58746ac34..2b9c2c04e 100644 --- a/pkg/common/db/cache/group.go +++ b/pkg/common/db/cache/group.go @@ -56,16 +56,16 @@ type GroupCache interface { } type GroupCacheRedis struct { - group *relation.GroupGorm - groupMember *relation.GroupMemberGorm - groupRequest *relation.GroupRequestGorm + group relationTb.GroupModelInterface + groupMember relationTb.GroupMemberModelInterface + groupRequest relationTb.GroupRequestModelInterface mongoDB *unrelation.SuperGroupMongoDriver expireTime time.Duration redisClient *RedisClient rcClient *rockscache.Client } -func NewGroupCacheRedis(rdb redis.UniversalClient, groupDB *relation.GroupGorm, groupMemberDB *relation.GroupMemberGorm, groupRequestDB *relation.GroupRequestGorm, mongoClient *unrelation.SuperGroupMongoDriver, opts rockscache.Options) *GroupCacheRedis { +func NewGroupCacheRedis(rdb redis.UniversalClient, groupDB relationTb.GroupModelInterface, groupMemberDB relationTb.GroupMemberModelInterface, groupRequestDB relationTb.GroupRequestModelInterface, mongoClient *unrelation.SuperGroupMongoDriver, opts rockscache.Options) *GroupCacheRedis { return &GroupCacheRedis{rcClient: rockscache.NewClient(rdb, opts), expireTime: groupExpireTime, group: groupDB, groupMember: groupMemberDB, groupRequest: groupRequestDB, redisClient: NewRedisClient(rdb), mongoDB: mongoClient, @@ -105,39 +105,16 @@ func (g *GroupCacheRedis) getGroupMemberNumKey(groupID string) string { } // / groupInfo -func (g *GroupCacheRedis) GetGroupsInfo(ctx context.Context, groupIDs []string) (groups []*relation.Group, err error) { - for _, groupID := range groupIDs { - group, err := g.GetGroupInfo(ctx, groupID) - if err != nil { - return nil, err - } - groups = append(groups, group) - } - return groups, nil +func (g *GroupCacheRedis) GetGroupsInfo(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) { + return GetCacheFor(ctx, g.rcClient, groupIDs, func(ctx context.Context, groupID string) (*relationTb.GroupModel, error) { + return g.GetGroupInfo(ctx, groupID) + }) } func (g *GroupCacheRedis) GetGroupInfo(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) { - getGroup := func() (string, error) { - groupInfo, err := g.group.Take(ctx, groupID) - if err != nil { - return "", utils.Wrap(err, "") - } - bytes, err := json.Marshal(groupInfo) - if err != nil { - return "", utils.Wrap(err, "") - } - return string(bytes), nil - } - group = &relationTb.GroupModel{} - defer func() { - tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group) - }() - groupStr, err := g.rcClient.Fetch(g.getGroupInfoKey(groupID), g.expireTime, getGroup) - if err != nil { - return nil, err - } - err = json.Unmarshal([]byte(groupStr), group) - return group, utils.Wrap(err, "") + return GetCache(ctx, g.rcClient, g.getGroupInfoKey(groupID), g.expireTime, func(ctx context.Context) (*relationTb.GroupModel, error) { + return g.group.Take(ctx, groupID) + }) } func (g *GroupCacheRedis) DelGroupInfo(ctx context.Context, groupID string) (err error) { diff --git a/pkg/common/db/cache/utils.go b/pkg/common/db/cache/utils.go new file mode 100644 index 000000000..237ee07f8 --- /dev/null +++ b/pkg/common/db/cache/utils.go @@ -0,0 +1,49 @@ +package cache + +import ( + "Open_IM/pkg/utils" + "context" + "encoding/json" + "github.com/dtm-labs/rockscache" + "time" +) + +func GetCache[T any](ctx context.Context, rcClient *rockscache.Client, key string, expire time.Duration, fn func(ctx context.Context) (T, error)) (T, error) { + var t T + var write bool + v, err := rcClient.Fetch(key, expire, func() (s string, err error) { + t, err = fn(ctx) + if err != nil { + return "", err + } + bs, err := json.Marshal(t) + if err != nil { + return "", utils.Wrap(err, "") + } + write = true + return string(bs), nil + }) + if err != nil { + return t, err + } + if write { + return t, nil + } + err = json.Unmarshal([]byte(v), &t) + if err != nil { + return t, utils.Wrap(err, "") + } + return t, nil +} + +func GetCacheFor[E any, T any](ctx context.Context, rcClient *rockscache.Client, list []E, fn func(ctx context.Context, item E) (T, error)) ([]T, error) { + rs := make([]T, 0, len(list)) + for _, e := range list { + r, err := fn(ctx, e) + if err != nil { + return nil, err + } + rs = append(rs, r) + } + return rs, nil +} diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index f84857625..4edb6e4fa 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -19,6 +19,12 @@ import ( //type GroupInterface GroupDataBaseInterface +type BatchUpdateGroupMember struct { + GroupID string + UserID string + Map map[string]any +} + type GroupInterface interface { CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) @@ -38,7 +44,8 @@ type GroupInterface interface { MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string][]string, error) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error // 转让群 - UpdateGroupMember(ctx context.Context, groupID, userID string, data map[string]any) error + UpdateGroupMember(ctx context.Context, groupID string, userID string, data map[string]any) error + UpdateGroupMembers(ctx context.Context, data []*BatchUpdateGroupMember) error // GroupRequest CreateGroupRequest(ctx context.Context, requests []*relationTb.GroupRequestModel) error TakeGroupRequest(ctx context.Context, groupID string, userID string) (*relationTb.GroupRequestModel, error) @@ -130,7 +137,11 @@ func (g *GroupController) TransferGroupOwner(ctx context.Context, groupID string return g.database.TransferGroupOwner(ctx, groupID, oldOwnerUserID, newOwnerUserID, roleLevel) } -func (g *GroupController) UpdateGroupMember(ctx context.Context, groupID, userID string, data map[string]any) error { +func (g *GroupController) UpdateGroupMembers(ctx context.Context, data []*BatchUpdateGroupMember) error { + return g.database.UpdateGroupMembers(ctx, data) +} + +func (g *GroupController) UpdateGroupMember(ctx context.Context, groupID string, userID string, data map[string]any) error { return g.database.UpdateGroupMember(ctx, groupID, userID, data) } @@ -146,9 +157,6 @@ func (g *GroupController) PageGroupRequestUser(ctx context.Context, userID strin return g.database.PageGroupRequestUser(ctx, userID, pageNumber, showNumber) } -// func (g *GroupController) TakeSuperGroup(ctx context.Context, groupID string) (superGroup *unrelationTb.SuperGroupModel, err error) { -// return g.database.TakeSuperGroup(ctx, groupID) -// } func (g *GroupController) FindSuperGroup(ctx context.Context, groupIDs []string) ([]*unrelationTb.SuperGroupModel, error) { return g.database.FindSuperGroup(ctx, groupIDs) } @@ -192,7 +200,8 @@ type GroupDataBaseInterface interface { MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string][]string, error) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error // 转让群 - UpdateGroupMember(ctx context.Context, groupID, userID string, data map[string]any) error + UpdateGroupMember(ctx context.Context, groupID string, userID string, data map[string]any) error + UpdateGroupMembers(ctx context.Context, data []*BatchUpdateGroupMember) error // GroupRequest CreateGroupRequest(ctx context.Context, requests []*relationTb.GroupRequestModel) error TakeGroupRequest(ctx context.Context, groupID string, userID string) (*relationTb.GroupRequestModel, error) @@ -217,7 +226,7 @@ func NewGroupDatabase(db *gorm.DB, rdb redis.UniversalClient, mgoClient *mongo.C groupMemberDB: groupMemberDB, groupRequestDB: groupRequestDB, db: &newDB, - cache: cache.NewGroupCache(rdb, groupDB, groupMemberDB, groupRequestDB, SuperGroupMongoDriver, rockscache.Options{ + cache: cache.NewGroupCacheRedis(rdb, groupDB, groupMemberDB, groupRequestDB, SuperGroupMongoDriver, rockscache.Options{ RandomExpireAdjustment: 0.2, DisableCacheRead: false, DisableCacheDelete: false, @@ -408,7 +417,7 @@ func (g *GroupDataBase) TransferGroupOwner(ctx context.Context, groupID string, }) } -func (g *GroupDataBase) UpdateGroupMember(ctx context.Context, groupID, userID string, data map[string]any) error { +func (g *GroupDataBase) UpdateGroupMember(ctx context.Context, groupID string, userID string, data map[string]any) error { return g.db.Transaction(func(tx *gorm.DB) error { if err := g.groupMemberDB.Update(ctx, groupID, userID, data, tx); err != nil { return err @@ -420,6 +429,20 @@ func (g *GroupDataBase) UpdateGroupMember(ctx context.Context, groupID, userID s }) } +func (g *GroupDataBase) UpdateGroupMembers(ctx context.Context, data []*BatchUpdateGroupMember) error { + return g.db.Transaction(func(tx *gorm.DB) error { + for _, item := range data { + if err := g.groupMemberDB.Update(ctx, item.GroupID, item.UserID, item.Map, tx); err != nil { + return err + } + if err := g.cache.DelGroupMemberInfo(ctx, item.GroupID, item.UserID); err != nil { + return err + } + } + return nil + }) +} + func (g *GroupDataBase) CreateGroupRequest(ctx context.Context, requests []*relationTb.GroupRequestModel) error { return g.groupRequestDB.Create(ctx, requests) } diff --git a/pkg/common/log/file_line_hk.go b/pkg/common/log/file_line_hk.go index 1a609d9be..793d10c06 100644 --- a/pkg/common/log/file_line_hk.go +++ b/pkg/common/log/file_line_hk.go @@ -24,7 +24,7 @@ func (f *fileHook) Levels() []logrus.Level { } //func (f *fileHook) Fire(entry *logrus.Entry) error { -// entry.Data["FilePath"] = findCaller(6) +// entry.Map["FilePath"] = findCaller(6) // utils.GetSelfFuncName() // return nil //} diff --git a/pkg/proto/group/group.pb.go b/pkg/proto/group/group.pb.go index 4a54cc4ee..6de5b0628 100644 --- a/pkg/proto/group/group.pb.go +++ b/pkg/proto/group/group.pb.go @@ -39,7 +39,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_66c251c19ca9b483, []int{0} + return fileDescriptor_group_b971ad66a8171801, []int{0} } func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) @@ -98,7 +98,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_66c251c19ca9b483, []int{1} + return fileDescriptor_group_b971ad66a8171801, []int{1} } func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) @@ -136,7 +136,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_66c251c19ca9b483, []int{2} + return fileDescriptor_group_b971ad66a8171801, []int{2} } func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) @@ -174,7 +174,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_66c251c19ca9b483, []int{3} + return fileDescriptor_group_b971ad66a8171801, []int{3} } func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) @@ -212,7 +212,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_66c251c19ca9b483, []int{4} + return fileDescriptor_group_b971ad66a8171801, []int{4} } func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) @@ -249,7 +249,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{5} + return fileDescriptor_group_b971ad66a8171801, []int{5} } func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) @@ -281,7 +281,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_66c251c19ca9b483, []int{6} + return fileDescriptor_group_b971ad66a8171801, []int{6} } func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) @@ -327,7 +327,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_66c251c19ca9b483, []int{7} + return fileDescriptor_group_b971ad66a8171801, []int{7} } func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) @@ -373,7 +373,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{8} + return fileDescriptor_group_b971ad66a8171801, []int{8} } func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) @@ -419,7 +419,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{9} + return fileDescriptor_group_b971ad66a8171801, []int{9} } func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) @@ -466,7 +466,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_66c251c19ca9b483, []int{10} + return fileDescriptor_group_b971ad66a8171801, []int{10} } func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) @@ -517,7 +517,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{} func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{11} + return fileDescriptor_group_b971ad66a8171801, []int{11} } func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) @@ -551,7 +551,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_66c251c19ca9b483, []int{12} + return fileDescriptor_group_b971ad66a8171801, []int{12} } func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) @@ -609,7 +609,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{13} + return fileDescriptor_group_b971ad66a8171801, []int{13} } func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) @@ -643,7 +643,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_66c251c19ca9b483, []int{14} + return fileDescriptor_group_b971ad66a8171801, []int{14} } func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) @@ -701,7 +701,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{15} + return fileDescriptor_group_b971ad66a8171801, []int{15} } func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) @@ -732,7 +732,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_66c251c19ca9b483, []int{16} + return fileDescriptor_group_b971ad66a8171801, []int{16} } func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) @@ -769,7 +769,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{17} + return fileDescriptor_group_b971ad66a8171801, []int{17} } func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) @@ -802,7 +802,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_66c251c19ca9b483, []int{18} + return fileDescriptor_group_b971ad66a8171801, []int{18} } func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) @@ -855,7 +855,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_66c251c19ca9b483, []int{19} + return fileDescriptor_group_b971ad66a8171801, []int{19} } func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) @@ -901,7 +901,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_66c251c19ca9b483, []int{20} + return fileDescriptor_group_b971ad66a8171801, []int{20} } func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) @@ -946,7 +946,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_66c251c19ca9b483, []int{21} + return fileDescriptor_group_b971ad66a8171801, []int{21} } func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) @@ -986,7 +986,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_66c251c19ca9b483, []int{22} + return fileDescriptor_group_b971ad66a8171801, []int{22} } func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) @@ -1037,7 +1037,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_66c251c19ca9b483, []int{23} + return fileDescriptor_group_b971ad66a8171801, []int{23} } func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) @@ -1069,7 +1069,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_66c251c19ca9b483, []int{24} + return fileDescriptor_group_b971ad66a8171801, []int{24} } func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) @@ -1115,7 +1115,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_66c251c19ca9b483, []int{25} + return fileDescriptor_group_b971ad66a8171801, []int{25} } func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) @@ -1162,7 +1162,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_66c251c19ca9b483, []int{26} + return fileDescriptor_group_b971ad66a8171801, []int{26} } func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) @@ -1213,7 +1213,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_66c251c19ca9b483, []int{27} + return fileDescriptor_group_b971ad66a8171801, []int{27} } func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) @@ -1245,7 +1245,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_66c251c19ca9b483, []int{28} + return fileDescriptor_group_b971ad66a8171801, []int{28} } func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) @@ -1290,7 +1290,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_66c251c19ca9b483, []int{29} + return fileDescriptor_group_b971ad66a8171801, []int{29} } func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) @@ -1330,7 +1330,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} } func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{30} + return fileDescriptor_group_b971ad66a8171801, []int{30} } func (m *CMSGroup) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CMSGroup.Unmarshal(m, b) @@ -1384,7 +1384,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{31} + return fileDescriptor_group_b971ad66a8171801, []int{31} } func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) @@ -1437,7 +1437,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{32} + return fileDescriptor_group_b971ad66a8171801, []int{32} } func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) @@ -1482,7 +1482,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{33} + return fileDescriptor_group_b971ad66a8171801, []int{33} } func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) @@ -1522,7 +1522,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{34} + return fileDescriptor_group_b971ad66a8171801, []int{34} } func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) @@ -1575,7 +1575,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{} func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{35} + return fileDescriptor_group_b971ad66a8171801, []int{35} } func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) @@ -1620,7 +1620,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{36} + return fileDescriptor_group_b971ad66a8171801, []int{36} } func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) @@ -1657,7 +1657,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{37} + return fileDescriptor_group_b971ad66a8171801, []int{37} } func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) @@ -1690,7 +1690,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{38} + return fileDescriptor_group_b971ad66a8171801, []int{38} } func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) @@ -1741,7 +1741,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{39} + return fileDescriptor_group_b971ad66a8171801, []int{39} } func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) @@ -1773,7 +1773,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{40} + return fileDescriptor_group_b971ad66a8171801, []int{40} } func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) @@ -1817,7 +1817,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{41} + return fileDescriptor_group_b971ad66a8171801, []int{41} } func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) @@ -1848,7 +1848,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{42} + return fileDescriptor_group_b971ad66a8171801, []int{42} } func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) @@ -1885,7 +1885,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{43} + return fileDescriptor_group_b971ad66a8171801, []int{43} } func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) @@ -1916,7 +1916,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{44} + return fileDescriptor_group_b971ad66a8171801, []int{44} } func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) @@ -1953,7 +1953,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{45} + return fileDescriptor_group_b971ad66a8171801, []int{45} } func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) @@ -1973,90 +1973,6 @@ func (m *CancelMuteGroupResp) XXX_DiscardUnknown() { var xxx_messageInfo_CancelMuteGroupResp proto.InternalMessageInfo -type SetGroupMemberNicknameReq struct { - GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - Nickname string `protobuf:"bytes,2,opt,name=nickname" json:"nickname,omitempty"` - UserID string `protobuf:"bytes,3,opt,name=userID" json:"userID,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknameReq{} } -func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } -func (*SetGroupMemberNicknameReq) ProtoMessage() {} -func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{46} -} -func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) -} -func (m *SetGroupMemberNicknameReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SetGroupMemberNicknameReq.Marshal(b, m, deterministic) -} -func (dst *SetGroupMemberNicknameReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetGroupMemberNicknameReq.Merge(dst, src) -} -func (m *SetGroupMemberNicknameReq) XXX_Size() int { - return xxx_messageInfo_SetGroupMemberNicknameReq.Size(m) -} -func (m *SetGroupMemberNicknameReq) XXX_DiscardUnknown() { - xxx_messageInfo_SetGroupMemberNicknameReq.DiscardUnknown(m) -} - -var xxx_messageInfo_SetGroupMemberNicknameReq proto.InternalMessageInfo - -func (m *SetGroupMemberNicknameReq) GetGroupID() string { - if m != nil { - return m.GroupID - } - return "" -} - -func (m *SetGroupMemberNicknameReq) GetNickname() string { - if m != nil { - return m.Nickname - } - return "" -} - -func (m *SetGroupMemberNicknameReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -type SetGroupMemberNicknameResp struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNicknameResp{} } -func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } -func (*SetGroupMemberNicknameResp) ProtoMessage() {} -func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{47} -} -func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) -} -func (m *SetGroupMemberNicknameResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SetGroupMemberNicknameResp.Marshal(b, m, deterministic) -} -func (dst *SetGroupMemberNicknameResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetGroupMemberNicknameResp.Merge(dst, src) -} -func (m *SetGroupMemberNicknameResp) XXX_Size() int { - return xxx_messageInfo_SetGroupMemberNicknameResp.Size(m) -} -func (m *SetGroupMemberNicknameResp) XXX_DiscardUnknown() { - xxx_messageInfo_SetGroupMemberNicknameResp.DiscardUnknown(m) -} - -var xxx_messageInfo_SetGroupMemberNicknameResp proto.InternalMessageInfo - type GetJoinedSuperGroupListReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -2068,7 +1984,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{48} + return fileDescriptor_group_b971ad66a8171801, []int{46} } func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) @@ -2106,7 +2022,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{49} + return fileDescriptor_group_b971ad66a8171801, []int{47} } func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) @@ -2144,7 +2060,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} } func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoReq) ProtoMessage() {} func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{50} + return fileDescriptor_group_b971ad66a8171801, []int{48} } func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) @@ -2182,7 +2098,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{} func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupsInfoResp) ProtoMessage() {} func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{51} + return fileDescriptor_group_b971ad66a8171801, []int{49} } func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) @@ -2209,7 +2125,7 @@ func (m *GetSuperGroupsInfoResp) GetGroupInfos() []*sdk_ws.GroupInfo { return nil } -type SetGroupMemberInfoReq struct { +type SetGroupMemberInfo struct { GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` Nickname *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=nickname" json:"nickname,omitempty"` @@ -2221,72 +2137,110 @@ type SetGroupMemberInfoReq struct { XXX_sizecache int32 `json:"-"` } -func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } -func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } -func (*SetGroupMemberInfoReq) ProtoMessage() {} -func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{52} +func (m *SetGroupMemberInfo) Reset() { *m = SetGroupMemberInfo{} } +func (m *SetGroupMemberInfo) String() string { return proto.CompactTextString(m) } +func (*SetGroupMemberInfo) ProtoMessage() {} +func (*SetGroupMemberInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_group_b971ad66a8171801, []int{50} } -func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) +func (m *SetGroupMemberInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGroupMemberInfo.Unmarshal(m, b) } -func (m *SetGroupMemberInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SetGroupMemberInfoReq.Marshal(b, m, deterministic) +func (m *SetGroupMemberInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGroupMemberInfo.Marshal(b, m, deterministic) } -func (dst *SetGroupMemberInfoReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_SetGroupMemberInfoReq.Merge(dst, src) +func (dst *SetGroupMemberInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGroupMemberInfo.Merge(dst, src) } -func (m *SetGroupMemberInfoReq) XXX_Size() int { - return xxx_messageInfo_SetGroupMemberInfoReq.Size(m) +func (m *SetGroupMemberInfo) XXX_Size() int { + return xxx_messageInfo_SetGroupMemberInfo.Size(m) } -func (m *SetGroupMemberInfoReq) XXX_DiscardUnknown() { - xxx_messageInfo_SetGroupMemberInfoReq.DiscardUnknown(m) +func (m *SetGroupMemberInfo) XXX_DiscardUnknown() { + xxx_messageInfo_SetGroupMemberInfo.DiscardUnknown(m) } -var xxx_messageInfo_SetGroupMemberInfoReq proto.InternalMessageInfo +var xxx_messageInfo_SetGroupMemberInfo proto.InternalMessageInfo -func (m *SetGroupMemberInfoReq) GetGroupID() string { +func (m *SetGroupMemberInfo) GetGroupID() string { if m != nil { return m.GroupID } return "" } -func (m *SetGroupMemberInfoReq) GetUserID() string { +func (m *SetGroupMemberInfo) GetUserID() string { if m != nil { return m.UserID } return "" } -func (m *SetGroupMemberInfoReq) GetNickname() *wrapperspb.StringValue { +func (m *SetGroupMemberInfo) GetNickname() *wrapperspb.StringValue { if m != nil { return m.Nickname } return nil } -func (m *SetGroupMemberInfoReq) GetFaceURL() *wrapperspb.StringValue { +func (m *SetGroupMemberInfo) GetFaceURL() *wrapperspb.StringValue { if m != nil { return m.FaceURL } return nil } -func (m *SetGroupMemberInfoReq) GetRoleLevel() *wrapperspb.Int32Value { +func (m *SetGroupMemberInfo) GetRoleLevel() *wrapperspb.Int32Value { if m != nil { return m.RoleLevel } return nil } -func (m *SetGroupMemberInfoReq) GetEx() *wrapperspb.StringValue { +func (m *SetGroupMemberInfo) GetEx() *wrapperspb.StringValue { if m != nil { return m.Ex } return nil } +type SetGroupMemberInfoReq struct { + Members []*SetGroupMemberInfo `protobuf:"bytes,1,rep,name=members" json:"members,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} } +func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } +func (*SetGroupMemberInfoReq) ProtoMessage() {} +func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { + return fileDescriptor_group_b971ad66a8171801, []int{51} +} +func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) +} +func (m *SetGroupMemberInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGroupMemberInfoReq.Marshal(b, m, deterministic) +} +func (dst *SetGroupMemberInfoReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGroupMemberInfoReq.Merge(dst, src) +} +func (m *SetGroupMemberInfoReq) XXX_Size() int { + return xxx_messageInfo_SetGroupMemberInfoReq.Size(m) +} +func (m *SetGroupMemberInfoReq) XXX_DiscardUnknown() { + xxx_messageInfo_SetGroupMemberInfoReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGroupMemberInfoReq proto.InternalMessageInfo + +func (m *SetGroupMemberInfoReq) GetMembers() []*SetGroupMemberInfo { + if m != nil { + return m.Members + } + return nil +} + type SetGroupMemberInfoResp struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2297,7 +2251,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{} func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{53} + return fileDescriptor_group_b971ad66a8171801, []int{52} } func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) @@ -2328,7 +2282,7 @@ func (m *GetGroupAbstractInfoReq) Reset() { *m = GetGroupAbstractInfoReq func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) } func (*GetGroupAbstractInfoReq) ProtoMessage() {} func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{54} + return fileDescriptor_group_b971ad66a8171801, []int{53} } func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b) @@ -2368,7 +2322,7 @@ func (m *GroupAbstractInfo) Reset() { *m = GroupAbstractInfo{} } func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) } func (*GroupAbstractInfo) ProtoMessage() {} func (*GroupAbstractInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{55} + return fileDescriptor_group_b971ad66a8171801, []int{54} } func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b) @@ -2420,7 +2374,7 @@ func (m *GetGroupAbstractInfoResp) Reset() { *m = GetGroupAbstractInfoRe func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) } func (*GetGroupAbstractInfoResp) ProtoMessage() {} func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{56} + return fileDescriptor_group_b971ad66a8171801, []int{55} } func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b) @@ -2459,7 +2413,7 @@ func (m *GetUserInGroupMembersReq) Reset() { *m = GetUserInGroupMembersR func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) } func (*GetUserInGroupMembersReq) ProtoMessage() {} func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{57} + return fileDescriptor_group_b971ad66a8171801, []int{56} } func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b) @@ -2504,7 +2458,7 @@ func (m *GetUserInGroupMembersResp) Reset() { *m = GetUserInGroupMembers func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) } func (*GetUserInGroupMembersResp) ProtoMessage() {} func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{58} + return fileDescriptor_group_b971ad66a8171801, []int{57} } func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b) @@ -2542,7 +2496,7 @@ func (m *GetGroupMemberUserIDReq) Reset() { *m = GetGroupMemberUserIDReq func (m *GetGroupMemberUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberUserIDReq) ProtoMessage() {} func (*GetGroupMemberUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{59} + return fileDescriptor_group_b971ad66a8171801, []int{58} } func (m *GetGroupMemberUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberUserIDReq.Unmarshal(m, b) @@ -2580,7 +2534,7 @@ func (m *GetGroupMemberUserIDResp) Reset() { *m = GetGroupMemberUserIDRe func (m *GetGroupMemberUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetGroupMemberUserIDResp) ProtoMessage() {} func (*GetGroupMemberUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_group_66c251c19ca9b483, []int{60} + return fileDescriptor_group_b971ad66a8171801, []int{59} } func (m *GetGroupMemberUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetGroupMemberUserIDResp.Unmarshal(m, b) @@ -2654,12 +2608,11 @@ func init() { proto.RegisterType((*MuteGroupResp)(nil), "group.MuteGroupResp") proto.RegisterType((*CancelMuteGroupReq)(nil), "group.CancelMuteGroupReq") proto.RegisterType((*CancelMuteGroupResp)(nil), "group.CancelMuteGroupResp") - proto.RegisterType((*SetGroupMemberNicknameReq)(nil), "group.SetGroupMemberNicknameReq") - proto.RegisterType((*SetGroupMemberNicknameResp)(nil), "group.SetGroupMemberNicknameResp") proto.RegisterType((*GetJoinedSuperGroupListReq)(nil), "group.GetJoinedSuperGroupListReq") proto.RegisterType((*GetJoinedSuperGroupListResp)(nil), "group.GetJoinedSuperGroupListResp") proto.RegisterType((*GetSuperGroupsInfoReq)(nil), "group.GetSuperGroupsInfoReq") proto.RegisterType((*GetSuperGroupsInfoResp)(nil), "group.GetSuperGroupsInfoResp") + proto.RegisterType((*SetGroupMemberInfo)(nil), "group.SetGroupMemberInfo") proto.RegisterType((*SetGroupMemberInfoReq)(nil), "group.SetGroupMemberInfoReq") proto.RegisterType((*SetGroupMemberInfoResp)(nil), "group.SetGroupMemberInfoResp") proto.RegisterType((*GetGroupAbstractInfoReq)(nil), "group.GetGroupAbstractInfoReq") @@ -2727,7 +2680,6 @@ type GroupClient interface { // 获取指定的超级群信息 GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroupsInfoReq, opts ...grpc.CallOption) (*GetSuperGroupsInfoResp, error) // 设置群成员昵称 - SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) // 设置群成员信息 SetGroupMemberInfo(ctx context.Context, in *SetGroupMemberInfoReq, opts ...grpc.CallOption) (*SetGroupMemberInfoResp, error) // 获取群信息hash值 @@ -2953,15 +2905,6 @@ func (c *groupClient) GetSuperGroupsInfo(ctx context.Context, in *GetSuperGroups return out, nil } -func (c *groupClient) SetGroupMemberNickname(ctx context.Context, in *SetGroupMemberNicknameReq, opts ...grpc.CallOption) (*SetGroupMemberNicknameResp, error) { - out := new(SetGroupMemberNicknameResp) - err := grpc.Invoke(ctx, "/group.group/setGroupMemberNickname", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *groupClient) SetGroupMemberInfo(ctx context.Context, in *SetGroupMemberInfoReq, opts ...grpc.CallOption) (*SetGroupMemberInfoResp, error) { out := new(SetGroupMemberInfoResp) err := grpc.Invoke(ctx, "/group.group/setGroupMemberInfo", in, out, c.cc, opts...) @@ -3046,7 +2989,6 @@ type GroupServer interface { // 获取指定的超级群信息 GetSuperGroupsInfo(context.Context, *GetSuperGroupsInfoReq) (*GetSuperGroupsInfoResp, error) // 设置群成员昵称 - SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) // 设置群成员信息 SetGroupMemberInfo(context.Context, *SetGroupMemberInfoReq) (*SetGroupMemberInfoResp, error) // 获取群信息hash值 @@ -3475,24 +3417,6 @@ func _Group_GetSuperGroupsInfo_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _Group_SetGroupMemberNickname_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetGroupMemberNicknameReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupServer).SetGroupMemberNickname(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/group.group/SetGroupMemberNickname", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupServer).SetGroupMemberNickname(ctx, req.(*SetGroupMemberNicknameReq)) - } - return interceptor(ctx, in, info, handler) -} - func _Group_SetGroupMemberInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetGroupMemberInfoReq) if err := dec(in); err != nil { @@ -3661,10 +3585,6 @@ var _Group_serviceDesc = grpc.ServiceDesc{ MethodName: "getSuperGroupsInfo", Handler: _Group_GetSuperGroupsInfo_Handler, }, - { - MethodName: "setGroupMemberNickname", - Handler: _Group_SetGroupMemberNickname_Handler, - }, { MethodName: "setGroupMemberInfo", Handler: _Group_SetGroupMemberInfo_Handler, @@ -3686,123 +3606,121 @@ var _Group_serviceDesc = grpc.ServiceDesc{ Metadata: "group/group.proto", } -func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_66c251c19ca9b483) } - -var fileDescriptor_group_66c251c19ca9b483 = []byte{ - // 1833 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xdf, 0x53, 0xdb, 0xce, - 0x11, 0x1f, 0x99, 0x2f, 0x04, 0x36, 0x38, 0xc0, 0x81, 0xc1, 0x08, 0x02, 0xe4, 0xc2, 0xa4, 0x4c, - 0x9b, 0x98, 0x4e, 0x48, 0x33, 0xfd, 0x91, 0x99, 0x34, 0x81, 0x86, 0xd0, 0x62, 0x68, 0xe4, 0x24, - 0x9d, 0xa6, 0x93, 0xa1, 0xc2, 0x3e, 0x14, 0x05, 0x59, 0x3a, 0x74, 0x32, 0x64, 0x3a, 0xe9, 0x43, - 0xfb, 0xdc, 0x1f, 0x0f, 0x7d, 0xec, 0x5b, 0xa7, 0x7f, 0x42, 0xdf, 0xfa, 0xcf, 0x75, 0x74, 0x3a, - 0x9d, 0x4f, 0xd2, 0xc9, 0x26, 0x0d, 0xe4, 0xc5, 0x33, 0xda, 0xdb, 0xbd, 0xdd, 0xdb, 0xdb, 0x1f, - 0x9f, 0x3d, 0xc3, 0x8c, 0x13, 0x06, 0x3d, 0xba, 0xc9, 0x7f, 0x1b, 0x34, 0x0c, 0xa2, 0x00, 0x8d, - 0xf2, 0x0f, 0x73, 0xe3, 0x90, 0x12, 0xff, 0xc1, 0x5e, 0xf3, 0x41, 0x8b, 0x84, 0xe7, 0x24, 0xdc, - 0xa4, 0xa7, 0xce, 0x26, 0x67, 0xd8, 0x64, 0x9d, 0xd3, 0xa3, 0x0b, 0xb6, 0x79, 0xc1, 0x12, 0x01, - 0xb3, 0x31, 0x94, 0x33, 0xb4, 0x29, 0x25, 0xa1, 0xe0, 0xc7, 0xff, 0x31, 0xe0, 0xd6, 0x76, 0x48, - 0xec, 0x88, 0xec, 0xc6, 0x9a, 0x2c, 0x72, 0x86, 0xd6, 0xe0, 0xa6, 0xeb, 0xbb, 0x51, 0x93, 0x74, - 0x8f, 0x49, 0xc8, 0xea, 0xc6, 0xda, 0xc8, 0xc6, 0x84, 0xa5, 0x92, 0xd0, 0x4f, 0x61, 0x82, 0xdb, - 0xb5, 0xe7, 0x9f, 0x04, 0xf5, 0xca, 0x9a, 0xb1, 0x71, 0xf3, 0xe1, 0x72, 0x83, 0x71, 0x85, 0x47, - 0x36, 0x75, 0x8f, 0xa8, 0x1d, 0xda, 0x5d, 0xd6, 0xd8, 0x4d, 0x79, 0xac, 0x3e, 0x3b, 0xc2, 0x30, - 0x69, 0x77, 0xba, 0xae, 0xff, 0x86, 0x91, 0x70, 0x6f, 0x87, 0xd5, 0x47, 0xf8, 0xf6, 0x19, 0x5a, - 0x6c, 0x41, 0x70, 0xe1, 0x93, 0x30, 0xf9, 0xae, 0x7f, 0xb7, 0x66, 0xc4, 0x16, 0x28, 0x24, 0xdc, - 0x84, 0xa9, 0x8c, 0xd5, 0x8c, 0x66, 0x8d, 0x32, 0xbe, 0xc8, 0x28, 0xdc, 0x80, 0xe9, 0x5d, 0x12, - 0xf1, 0x25, 0xc6, 0xd7, 0xc8, 0x19, 0x32, 0x61, 0x3c, 0x61, 0xd8, 0x49, 0x7d, 0x20, 0xbf, 0xf1, - 0x2b, 0x98, 0xc9, 0xf1, 0x33, 0x8a, 0x9e, 0x00, 0xc8, 0x1d, 0x13, 0x91, 0x61, 0x16, 0x28, 0xfc, - 0xf8, 0x08, 0xa6, 0x5a, 0x62, 0xcb, 0xd4, 0x82, 0x7d, 0x98, 0x92, 0x0c, 0x2f, 0x82, 0xb0, 0x45, - 0x22, 0x71, 0x2e, 0x3c, 0x68, 0xd7, 0x84, 0xd3, 0xca, 0x8b, 0x62, 0x04, 0xd3, 0x59, 0x05, 0x8c, - 0xe2, 0x3f, 0x1b, 0x60, 0xa6, 0x07, 0x79, 0x46, 0xa9, 0xe7, 0xb6, 0xed, 0xc8, 0x0d, 0xfc, 0x7d, - 0x97, 0x45, 0xb1, 0x01, 0x3b, 0x00, 0xd4, 0x76, 0x5c, 0x9f, 0x13, 0x85, 0xee, 0x75, 0x8d, 0x6e, - 0x8b, 0x9c, 0xf5, 0x08, 0x8b, 0x7e, 0x2d, 0x79, 0x2d, 0x45, 0x0e, 0xad, 0x00, 0x9c, 0x84, 0x41, - 0x57, 0x5c, 0x66, 0x85, 0x5f, 0xa6, 0x42, 0xc1, 0x7f, 0x80, 0xa5, 0x52, 0x1b, 0x18, 0x45, 0x73, - 0x30, 0x1a, 0x05, 0x91, 0xed, 0x71, 0xfd, 0x55, 0x2b, 0xf9, 0x40, 0xbf, 0x80, 0xaa, 0x23, 0x02, - 0x36, 0x56, 0xcd, 0xea, 0x15, 0xee, 0xef, 0xd5, 0x32, 0xcf, 0x08, 0x3e, 0x2b, 0x2b, 0x85, 0x3f, - 0xc3, 0xf2, 0x2e, 0x89, 0x62, 0x43, 0x2c, 0x72, 0x76, 0x6d, 0x1e, 0x98, 0x87, 0xb1, 0x9e, 0x7a, - 0x7a, 0xf1, 0x85, 0x3f, 0xc3, 0xed, 0x01, 0xda, 0xaf, 0xfb, 0xec, 0x7f, 0x32, 0xa0, 0xf6, 0x3a, - 0xb4, 0x7d, 0x76, 0x42, 0x42, 0xce, 0x77, 0x18, 0x27, 0x58, 0x7c, 0xea, 0x3a, 0xdc, 0x10, 0xa1, - 0xce, 0x15, 0x4f, 0x58, 0xe9, 0x27, 0xba, 0x07, 0xb7, 0x02, 0xaf, 0x73, 0xa8, 0x24, 0x67, 0x72, - 0xa2, 0x1c, 0x35, 0xe6, 0xf3, 0xc9, 0x85, 0xca, 0x37, 0x92, 0xf0, 0x65, 0xa9, 0xb8, 0x0e, 0xf3, - 0x3a, 0x13, 0x18, 0xc5, 0x7f, 0x33, 0x60, 0xf2, 0x97, 0x81, 0xeb, 0xcb, 0xb2, 0x54, 0x6e, 0xd4, - 0x0a, 0x40, 0x48, 0xce, 0x9a, 0x84, 0x31, 0xdb, 0x21, 0x69, 0x80, 0xf5, 0x29, 0xf1, 0xfa, 0xc7, - 0xc0, 0xf5, 0x5b, 0x41, 0x2f, 0x6c, 0x13, 0x6e, 0xc8, 0xa8, 0xa5, 0x50, 0xd0, 0x3a, 0x54, 0x5d, - 0xff, 0xdc, 0x8d, 0x72, 0x05, 0x27, 0x4b, 0xc4, 0x53, 0x50, 0x55, 0xec, 0x61, 0x14, 0xff, 0xd3, - 0x80, 0xa5, 0x7c, 0xd4, 0xc6, 0x0b, 0x81, 0xcf, 0xc8, 0x50, 0x83, 0x07, 0x65, 0x44, 0xbc, 0xfe, - 0xc1, 0xf6, 0x3b, 0x1e, 0xe9, 0x34, 0x99, 0x23, 0x3c, 0xa7, 0x50, 0xe2, 0x1a, 0x9a, 0x7c, 0x59, - 0x84, 0xf5, 0xbc, 0x88, 0xdb, 0x3b, 0x6a, 0x65, 0x68, 0x78, 0x05, 0x96, 0xcb, 0x8d, 0x63, 0x14, - 0x6f, 0xc0, 0xe4, 0xab, 0x9e, 0x1b, 0x0d, 0x77, 0x6f, 0x7c, 0x70, 0x85, 0x93, 0x51, 0xfc, 0x77, - 0x03, 0x6a, 0x69, 0xc6, 0x26, 0x2d, 0xe1, 0x6a, 0xd3, 0x45, 0x31, 0xa5, 0x92, 0x75, 0xdc, 0x3c, - 0x8c, 0x9d, 0xb8, 0x5e, 0x44, 0x42, 0x71, 0x8b, 0xe2, 0x0b, 0x53, 0x98, 0xd7, 0x19, 0x54, 0x9a, - 0x41, 0x3f, 0x87, 0x1b, 0x5d, 0xd1, 0xde, 0x92, 0xdc, 0xb9, 0x57, 0x96, 0x3b, 0xc9, 0x76, 0x2f, - 0x7a, 0x9e, 0xc7, 0x8b, 0x66, 0x2a, 0x86, 0xf7, 0xf3, 0x1a, 0x65, 0xdf, 0x28, 0xbf, 0xf6, 0x7a, - 0x56, 0xeb, 0x44, 0x7f, 0xb7, 0xdf, 0xc1, 0x82, 0x76, 0x37, 0x46, 0x55, 0x53, 0x8d, 0xff, 0xcf, - 0x54, 0x0f, 0xd0, 0xaf, 0xdc, 0xf6, 0xa9, 0xc2, 0x33, 0xd8, 0xcc, 0x75, 0xa8, 0x9e, 0xba, 0xed, - 0x53, 0xd2, 0x49, 0x5b, 0x74, 0x62, 0x6c, 0x96, 0x18, 0x5f, 0x45, 0x48, 0x6c, 0x16, 0xf8, 0x22, - 0x3e, 0xc5, 0x17, 0xae, 0xc1, 0x6c, 0x41, 0x1b, 0xa3, 0xf8, 0x8f, 0x3c, 0x64, 0xe2, 0x04, 0x22, - 0x1d, 0xbe, 0xf6, 0x6d, 0x7b, 0x4c, 0x87, 0x5f, 0x57, 0x41, 0x7d, 0x69, 0x80, 0x3c, 0x82, 0x31, - 0xee, 0x8e, 0x34, 0x3e, 0x06, 0xf7, 0x71, 0xc1, 0x8b, 0x29, 0xcc, 0xed, 0xf1, 0x9a, 0x11, 0x6b, - 0x7d, 0x1d, 0x5c, 0xa2, 0x74, 0xf5, 0xbd, 0x58, 0x51, 0xbd, 0x18, 0xd7, 0xcf, 0xa4, 0xfa, 0x74, - 0xb2, 0x38, 0x29, 0x47, 0xc5, 0x0b, 0x50, 0xd3, 0x68, 0x64, 0x14, 0x9f, 0xc3, 0x9c, 0x6c, 0xaa, - 0x9e, 0xd7, 0xbf, 0xf6, 0x6b, 0xce, 0x50, 0xfc, 0xdb, 0x7e, 0x69, 0x50, 0xf4, 0x5e, 0x49, 0x1c, - 0xff, 0xcb, 0x80, 0xf1, 0xed, 0x66, 0x8b, 0xf3, 0x7c, 0x0d, 0xda, 0x43, 0x0d, 0x40, 0x8e, 0x6c, - 0x36, 0xb1, 0xe3, 0x0e, 0xec, 0x6e, 0xda, 0x37, 0x34, 0x2b, 0xe8, 0xfb, 0x30, 0x9d, 0xa5, 0xca, - 0x76, 0x56, 0xa0, 0xe3, 0xbf, 0x18, 0x30, 0x29, 0xa1, 0xe1, 0xd5, 0x39, 0x7c, 0x59, 0x1c, 0x57, - 0xb1, 0xb4, 0x4f, 0x50, 0xaf, 0x63, 0x24, 0x7b, 0x1d, 0x07, 0x50, 0x55, 0xac, 0x29, 0x0d, 0xf7, - 0xef, 0xe5, 0xc2, 0x7d, 0xaa, 0x91, 0x0c, 0x21, 0xa9, 0xbb, 0x65, 0x84, 0x3f, 0xe8, 0x03, 0xdf, - 0x4b, 0x94, 0x12, 0xfc, 0x8f, 0x42, 0xa7, 0x60, 0xdb, 0xcd, 0xd6, 0xb7, 0xe8, 0x14, 0x26, 0x8c, - 0xf7, 0xd2, 0x9b, 0x4d, 0x7c, 0x22, 0xbf, 0x8b, 0xdd, 0x22, 0x31, 0xea, 0x1a, 0xbb, 0xc5, 0x0f, - 0x60, 0x6a, 0xc7, 0x65, 0x5d, 0x97, 0xb1, 0x4b, 0xf4, 0x5b, 0x04, 0xd3, 0x59, 0x66, 0x46, 0xf1, - 0x47, 0x40, 0xcd, 0x9e, 0x98, 0x76, 0x2e, 0x53, 0xc3, 0x4b, 0x10, 0x67, 0x8c, 0x1c, 0xba, 0xbd, - 0x88, 0x74, 0x5a, 0xa4, 0x1d, 0xf8, 0x1d, 0xc6, 0x5d, 0x53, 0xb5, 0x32, 0xb4, 0xb8, 0x82, 0x17, - 0x74, 0x31, 0x8a, 0xf7, 0xa1, 0xbe, 0x6d, 0xfb, 0x6d, 0xe2, 0x5d, 0x85, 0x21, 0x78, 0x09, 0x16, - 0x4b, 0x76, 0x4b, 0xb0, 0x89, 0x24, 0x0f, 0xc5, 0x26, 0x0a, 0x27, 0xa3, 0xb8, 0x01, 0x28, 0xb7, - 0xef, 0xe0, 0x0d, 0x6a, 0x30, 0x5b, 0xe0, 0x67, 0x14, 0xbb, 0xb0, 0xd8, 0xca, 0x84, 0xc8, 0x81, - 0xdb, 0x3e, 0xf5, 0xed, 0xee, 0x10, 0x60, 0x67, 0xc2, 0xb8, 0x2f, 0x18, 0xc5, 0x79, 0xe5, 0xb7, - 0xe2, 0x89, 0x91, 0x8c, 0x27, 0x96, 0xc1, 0x2c, 0x53, 0xc5, 0x28, 0x7e, 0xc4, 0x07, 0xb4, 0xa4, - 0x71, 0xb5, 0x7a, 0x54, 0xc0, 0xe4, 0xb4, 0x79, 0xf6, 0xf7, 0x34, 0x32, 0x7b, 0xb6, 0xf8, 0x48, - 0xa5, 0x97, 0x62, 0x54, 0xe9, 0x6e, 0xc6, 0x17, 0x74, 0xb7, 0x2d, 0x9e, 0xcb, 0xfd, 0xed, 0x2e, - 0x35, 0x29, 0xbf, 0xe5, 0xb9, 0x56, 0x10, 0xfa, 0xea, 0x71, 0xf9, 0xdf, 0x15, 0xa8, 0x65, 0xdd, - 0x36, 0x1c, 0x7f, 0x95, 0x25, 0xc5, 0x8f, 0x95, 0x5b, 0x1b, 0x11, 0xad, 0xc4, 0x09, 0x02, 0xc7, - 0x23, 0xc9, 0x23, 0xc9, 0x71, 0xef, 0xa4, 0xd1, 0x8a, 0x42, 0xd7, 0x77, 0xde, 0xda, 0x5e, 0x8f, - 0x28, 0x77, 0xfa, 0x18, 0x6e, 0x9c, 0xd8, 0x6d, 0xf2, 0xc6, 0xda, 0xe7, 0x18, 0x7c, 0x98, 0x60, - 0xca, 0x8c, 0x7e, 0x02, 0x13, 0x61, 0xe0, 0x91, 0x7d, 0x72, 0x4e, 0xbc, 0xfa, 0x28, 0x97, 0x5c, - 0x2a, 0x48, 0xee, 0xf9, 0xd1, 0xd6, 0xc3, 0x44, 0xb0, 0xcf, 0x8d, 0xee, 0x43, 0x85, 0x7c, 0xaa, - 0x8f, 0x5d, 0x42, 0x5b, 0x85, 0x7c, 0x8a, 0xe7, 0x2b, 0x9d, 0x97, 0x18, 0xc5, 0x3f, 0xea, 0x43, - 0xce, 0x67, 0xc7, 0x2c, 0x0a, 0xed, 0x76, 0x74, 0x99, 0xfb, 0xfc, 0xab, 0x01, 0x33, 0x05, 0xa1, - 0x01, 0x3e, 0xbf, 0x2f, 0x5e, 0xb5, 0x44, 0x68, 0xf7, 0xe2, 0x5f, 0xee, 0xfe, 0xaa, 0x55, 0x5c, - 0x40, 0x3f, 0x84, 0x59, 0x27, 0x0b, 0xe2, 0x5f, 0xda, 0xec, 0x03, 0xbf, 0x94, 0xef, 0x2c, 0xdd, - 0x12, 0xee, 0x40, 0x5d, 0x7f, 0x0c, 0x46, 0xd1, 0x4b, 0xd1, 0xe7, 0xd5, 0x85, 0x34, 0xd2, 0xea, - 0xa2, 0xc3, 0x15, 0x25, 0x35, 0x32, 0xf8, 0x80, 0x6b, 0xe1, 0x2d, 0xde, 0x57, 0xfb, 0xc6, 0x80, - 0x1c, 0xcc, 0x78, 0xb1, 0x92, 0xf3, 0xe2, 0x7b, 0x58, 0x2c, 0xd9, 0xef, 0x4a, 0x90, 0xd2, 0x56, - 0x7e, 0x9c, 0x48, 0xc0, 0xc9, 0xe0, 0x4a, 0xf8, 0xa8, 0xef, 0xc9, 0xac, 0x10, 0xa3, 0xb1, 0x54, - 0x4f, 0xe0, 0xd0, 0x24, 0x20, 0xd2, 0xcf, 0x87, 0xff, 0x9d, 0x81, 0xe4, 0x8d, 0x12, 0x3d, 0x81, - 0x9b, 0xed, 0xfe, 0x93, 0x1c, 0xaa, 0xa5, 0x10, 0x22, 0xf3, 0xb8, 0x68, 0xce, 0xeb, 0xc8, 0x8c, - 0xa2, 0xc7, 0x30, 0xf1, 0x31, 0x9d, 0xae, 0xd1, 0xac, 0x60, 0x52, 0xe7, 0x7f, 0x73, 0xae, 0x48, - 0x4c, 0xe4, 0xce, 0xd2, 0xe1, 0x54, 0xca, 0xa9, 0x83, 0xad, 0x94, 0xcb, 0xcc, 0xb0, 0xe8, 0x39, - 0x54, 0x1d, 0xf5, 0x05, 0x0f, 0x2d, 0xa4, 0x01, 0x91, 0x7b, 0x07, 0x34, 0xeb, 0xfa, 0x05, 0x46, - 0xd1, 0x53, 0x98, 0x64, 0xca, 0x8b, 0x1a, 0x4a, 0xcf, 0x96, 0x7b, 0xc7, 0x33, 0x17, 0xb4, 0x74, - 0x46, 0xd1, 0xef, 0x61, 0xc1, 0xd1, 0xbf, 0x7c, 0xa1, 0x3b, 0x39, 0xad, 0xc5, 0xb7, 0x29, 0x13, - 0x0f, 0x63, 0x61, 0x14, 0x9d, 0xc0, 0xa2, 0x53, 0xf6, 0xc2, 0x84, 0xee, 0xf6, 0x37, 0x28, 0x7d, - 0x01, 0x33, 0xd7, 0x87, 0x33, 0x31, 0x8a, 0x5e, 0x01, 0x8a, 0x0a, 0xef, 0x38, 0x68, 0x59, 0xc8, - 0x6a, 0x5f, 0x99, 0xcc, 0xdb, 0x03, 0x56, 0x19, 0x45, 0x6d, 0xa8, 0x3b, 0x25, 0x0f, 0x18, 0x08, - 0x67, 0xb2, 0x57, 0xfb, 0xfc, 0x62, 0xde, 0x1d, 0xca, 0x93, 0xd8, 0xed, 0x14, 0x1e, 0x0e, 0xa4, - 0xdd, 0xda, 0x47, 0x0e, 0x69, 0x77, 0xc9, 0x8b, 0xc3, 0x6b, 0x98, 0x75, 0x8a, 0xb3, 0x3c, 0xd2, - 0x4b, 0xc9, 0x28, 0x5b, 0x19, 0xb4, 0xcc, 0x6b, 0xd9, 0xd4, 0x69, 0x76, 0xac, 0x46, 0x8b, 0x42, - 0xa4, 0x38, 0xdc, 0x9b, 0x66, 0xd9, 0x92, 0x3c, 0x72, 0x6e, 0x14, 0x56, 0x8f, 0x5c, 0x1c, 0xd2, - 0xd5, 0x23, 0xeb, 0x66, 0xe8, 0x03, 0x98, 0x71, 0xf3, 0x53, 0x28, 0x5a, 0x12, 0x32, 0xba, 0x89, - 0xd8, 0x5c, 0x2e, 0x5f, 0x4c, 0x92, 0x5a, 0x26, 0xa7, 0x4c, 0x6a, 0x75, 0xaa, 0x92, 0x49, 0x9d, - 0x1d, 0x6e, 0x0a, 0xb7, 0x19, 0x03, 0xfb, 0x92, 0xdb, 0x14, 0x83, 0x48, 0xc9, 0x6d, 0xca, 0x89, - 0xe0, 0x29, 0x4c, 0x76, 0x14, 0x30, 0x2e, 0x73, 0x3c, 0x07, 0xe7, 0x65, 0x8e, 0xe7, 0x91, 0x7b, - 0x7c, 0x71, 0xdd, 0x2c, 0xc4, 0x95, 0x17, 0x57, 0x04, 0xd2, 0xf2, 0xe2, 0x34, 0xa8, 0x18, 0xbd, - 0x83, 0x5a, 0x5b, 0x07, 0x99, 0xd1, 0x6a, 0x5a, 0x53, 0x4b, 0xe0, 0xb9, 0xb9, 0x36, 0x98, 0x21, - 0xf1, 0xb8, 0xb4, 0x52, 0x7a, 0x5c, 0x85, 0xd0, 0xd2, 0xe3, 0x19, 0x9c, 0x1c, 0x9f, 0x2e, 0x67, - 0x93, 0x3c, 0x5d, 0x11, 0x86, 0xcb, 0xd3, 0x69, 0x10, 0xb7, 0xa8, 0x85, 0x3a, 0xc8, 0xaa, 0xd6, - 0xc2, 0x12, 0x20, 0xac, 0xd6, 0xc2, 0x52, 0xd4, 0x9b, 0x44, 0x47, 0x0e, 0x8a, 0xaa, 0xd1, 0x51, - 0x84, 0xb6, 0x6a, 0x74, 0xe8, 0x30, 0xec, 0x7b, 0x98, 0x67, 0x5a, 0xec, 0x8e, 0xd6, 0x72, 0x35, - 0xbf, 0x30, 0x45, 0x98, 0x77, 0x86, 0x70, 0x24, 0x16, 0xb3, 0x02, 0x7a, 0x93, 0x16, 0x6b, 0xe1, - 0xaf, 0xb4, 0x58, 0x0f, 0xfb, 0xd0, 0x6f, 0x60, 0xce, 0xd1, 0xe0, 0x25, 0x94, 0xaf, 0x3f, 0x39, - 0x4c, 0x68, 0xae, 0x0e, 0x5c, 0x4f, 0xa2, 0xd3, 0xd1, 0x41, 0x1a, 0xb4, 0x9a, 0x6d, 0x20, 0x05, - 0x00, 0x25, 0xa3, 0xb3, 0x1c, 0x11, 0x29, 0x46, 0xab, 0xd0, 0x04, 0xe9, 0x8b, 0xa6, 0x04, 0x3b, - 0x05, 0xa3, 0xf3, 0xb8, 0xe6, 0xf9, 0xea, 0xbb, 0xdb, 0x87, 0x94, 0xf8, 0x47, 0x7b, 0x4d, 0xe5, - 0x8f, 0x52, 0x2e, 0xf3, 0x33, 0xfe, 0x7b, 0x3c, 0xc6, 0x49, 0x5b, 0xff, 0x0b, 0x00, 0x00, 0xff, - 0xff, 0xfe, 0x40, 0x04, 0x8f, 0x9b, 0x1d, 0x00, 0x00, +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_b971ad66a8171801) } + +var fileDescriptor_group_b971ad66a8171801 = []byte{ + // 1808 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5f, 0x53, 0xdc, 0xc8, + 0x11, 0x2f, 0x2d, 0x06, 0x43, 0x9b, 0x35, 0x30, 0xb0, 0x20, 0x04, 0x06, 0x32, 0xa6, 0x1c, 0x2a, + 0xb1, 0x97, 0x94, 0x71, 0x5c, 0xf9, 0xe3, 0x2a, 0xc7, 0x86, 0x18, 0x93, 0xb0, 0x10, 0xb4, 0xb6, + 0x53, 0x71, 0x2a, 0x45, 0xc4, 0xee, 0x20, 0xcb, 0x68, 0xa5, 0x41, 0xa3, 0x05, 0xd7, 0x95, 0xef, + 0xe1, 0xee, 0xf9, 0xfe, 0x3c, 0xdc, 0xe3, 0x3d, 0xdd, 0x7d, 0x86, 0xfb, 0x38, 0xf7, 0x61, 0xae, + 0x34, 0x92, 0x66, 0x47, 0xd2, 0x68, 0x17, 0x9f, 0xc1, 0x2f, 0x5b, 0xa5, 0x9e, 0xee, 0xe9, 0x9e, + 0x9e, 0xfe, 0xf3, 0xeb, 0x59, 0x98, 0xb2, 0x03, 0xbf, 0x4b, 0xd7, 0xf9, 0x6f, 0x9d, 0x06, 0x7e, + 0xe8, 0xa3, 0x61, 0xfe, 0x61, 0xac, 0xed, 0x53, 0xe2, 0xdd, 0xdb, 0x69, 0xdc, 0x6b, 0x92, 0xe0, + 0x8c, 0x04, 0xeb, 0xf4, 0xc4, 0x5e, 0xe7, 0x0c, 0xeb, 0xac, 0x7d, 0x72, 0x78, 0xce, 0xd6, 0xcf, + 0x59, 0x2c, 0x60, 0xd4, 0x07, 0x72, 0x06, 0x16, 0xa5, 0x24, 0x48, 0xf8, 0xf1, 0x4f, 0x1a, 0xdc, + 0xdc, 0x0c, 0x88, 0x15, 0x92, 0xed, 0x48, 0x93, 0x49, 0x4e, 0xd1, 0x0a, 0xdc, 0x70, 0x3c, 0x27, + 0x6c, 0x90, 0xce, 0x11, 0x09, 0x98, 0xae, 0xad, 0x0c, 0xad, 0x8d, 0x99, 0x32, 0x09, 0xfd, 0x05, + 0xc6, 0xb8, 0x5d, 0x3b, 0xde, 0xb1, 0xaf, 0x57, 0x56, 0xb4, 0xb5, 0x1b, 0xf7, 0x17, 0xeb, 0x8c, + 0x2b, 0x3c, 0xb4, 0xa8, 0x73, 0x48, 0xad, 0xc0, 0xea, 0xb0, 0xfa, 0x76, 0xca, 0x63, 0xf6, 0xd8, + 0x11, 0x86, 0x71, 0xab, 0xdd, 0x71, 0xbc, 0x97, 0x8c, 0x04, 0x3b, 0x5b, 0x4c, 0x1f, 0xe2, 0xdb, + 0x67, 0x68, 0x91, 0x05, 0xfe, 0xb9, 0x47, 0x82, 0xf8, 0x5b, 0xbf, 0xb6, 0xa2, 0x45, 0x16, 0x48, + 0x24, 0xdc, 0x80, 0x89, 0x8c, 0xd5, 0x8c, 0x66, 0x8d, 0xd2, 0x3e, 0xc8, 0x28, 0x5c, 0x87, 0xc9, + 0x6d, 0x12, 0xf2, 0x25, 0xc6, 0xd7, 0xc8, 0x29, 0x32, 0x60, 0x34, 0x66, 0xd8, 0x4a, 0x7d, 0x20, + 0xbe, 0xf1, 0x01, 0x4c, 0xe5, 0xf8, 0x19, 0x45, 0x8f, 0x00, 0xc4, 0x8e, 0xb1, 0xc8, 0x20, 0x0b, + 0x24, 0x7e, 0x7c, 0x08, 0x13, 0xcd, 0x64, 0xcb, 0xd4, 0x82, 0x5d, 0x98, 0x10, 0x0c, 0xcf, 0xfc, + 0xa0, 0x49, 0xc2, 0xe4, 0x5c, 0xb8, 0xdf, 0xae, 0x31, 0xa7, 0x99, 0x17, 0xc5, 0x08, 0x26, 0xb3, + 0x0a, 0x18, 0xc5, 0x5f, 0x6a, 0x60, 0xa4, 0x07, 0x79, 0x42, 0xa9, 0xeb, 0xb4, 0xac, 0xd0, 0xf1, + 0xbd, 0x5d, 0x87, 0x85, 0x91, 0x01, 0x5b, 0x00, 0xd4, 0xb2, 0x1d, 0x8f, 0x13, 0x13, 0xdd, 0xab, + 0x0a, 0xdd, 0x26, 0x39, 0xed, 0x12, 0x16, 0xfe, 0x4b, 0xf0, 0x9a, 0x92, 0x1c, 0x5a, 0x02, 0x38, + 0x0e, 0xfc, 0x4e, 0x72, 0x99, 0x15, 0x7e, 0x99, 0x12, 0x05, 0x7f, 0x06, 0x0b, 0xa5, 0x36, 0x30, + 0x8a, 0x66, 0x60, 0x38, 0xf4, 0x43, 0xcb, 0xe5, 0xfa, 0xab, 0x66, 0xfc, 0x81, 0xfe, 0x0e, 0x55, + 0x3b, 0x09, 0xd8, 0x48, 0x35, 0xd3, 0x2b, 0xdc, 0xdf, 0xcb, 0x65, 0x9e, 0x49, 0xf8, 0xcc, 0xac, + 0x14, 0x7e, 0x0f, 0x8b, 0xdb, 0x24, 0x8c, 0x0c, 0x31, 0xc9, 0xe9, 0x95, 0x79, 0x60, 0x16, 0x46, + 0xba, 0xf2, 0xe9, 0x93, 0x2f, 0xfc, 0x1e, 0x6e, 0xf5, 0xd1, 0x7e, 0xd5, 0x67, 0xff, 0x42, 0x83, + 0xda, 0x8b, 0xc0, 0xf2, 0xd8, 0x31, 0x09, 0x38, 0xdf, 0x7e, 0x94, 0x60, 0xd1, 0xa9, 0x75, 0xb8, + 0x9e, 0x84, 0x3a, 0x57, 0x3c, 0x66, 0xa6, 0x9f, 0xe8, 0x0e, 0xdc, 0xf4, 0xdd, 0xf6, 0xbe, 0x94, + 0x9c, 0xf1, 0x89, 0x72, 0xd4, 0x88, 0xcf, 0x23, 0xe7, 0x32, 0xdf, 0x50, 0xcc, 0x97, 0xa5, 0x62, + 0x1d, 0x66, 0x55, 0x26, 0x30, 0x8a, 0xbf, 0xd1, 0x60, 0xfc, 0x1f, 0xbe, 0xe3, 0x89, 0xb2, 0x54, + 0x6e, 0xd4, 0x12, 0x40, 0x40, 0x4e, 0x1b, 0x84, 0x31, 0xcb, 0x26, 0x69, 0x80, 0xf5, 0x28, 0xd1, + 0xfa, 0x5b, 0xdf, 0xf1, 0x9a, 0x7e, 0x37, 0x68, 0x11, 0x6e, 0xc8, 0xb0, 0x29, 0x51, 0xd0, 0x2a, + 0x54, 0x1d, 0xef, 0xcc, 0x09, 0x73, 0x05, 0x27, 0x4b, 0xc4, 0x13, 0x50, 0x95, 0xec, 0x61, 0x14, + 0x7f, 0xaf, 0xc1, 0x42, 0x3e, 0x6a, 0xa3, 0x05, 0xdf, 0x63, 0x64, 0xa0, 0xc1, 0xfd, 0x32, 0x22, + 0x5a, 0x7f, 0x63, 0x79, 0x6d, 0x97, 0xb4, 0x1b, 0xcc, 0x4e, 0x3c, 0x27, 0x51, 0xa2, 0x1a, 0x1a, + 0x7f, 0x99, 0x84, 0x75, 0xdd, 0x90, 0xdb, 0x3b, 0x6c, 0x66, 0x68, 0x78, 0x09, 0x16, 0xcb, 0x8d, + 0x63, 0x14, 0xaf, 0xc1, 0xf8, 0x41, 0xd7, 0x09, 0x07, 0xbb, 0x37, 0x3a, 0xb8, 0xc4, 0xc9, 0x28, + 0xfe, 0x56, 0x83, 0x5a, 0x9a, 0xb1, 0x71, 0x4b, 0xb8, 0xdc, 0x74, 0x91, 0x4c, 0xa9, 0x64, 0x1d, + 0x37, 0x0b, 0x23, 0xc7, 0x8e, 0x1b, 0x92, 0x20, 0xb9, 0xc5, 0xe4, 0x0b, 0x53, 0x98, 0x55, 0x19, + 0x54, 0x9a, 0x41, 0x7f, 0x83, 0xeb, 0x9d, 0xa4, 0xbd, 0xc5, 0xb9, 0x73, 0xa7, 0x2c, 0x77, 0xe2, + 0xed, 0x9e, 0x75, 0x5d, 0x97, 0x17, 0xcd, 0x54, 0x0c, 0xef, 0xe6, 0x35, 0x8a, 0xbe, 0x51, 0x7e, + 0xed, 0x7a, 0x56, 0xeb, 0x58, 0x6f, 0xb7, 0xff, 0xc2, 0x9c, 0x72, 0x37, 0x46, 0x65, 0x53, 0xb5, + 0x5f, 0x67, 0xaa, 0x0b, 0xe8, 0x9f, 0x4e, 0xeb, 0x44, 0xe2, 0xe9, 0x6f, 0xe6, 0x2a, 0x54, 0x4f, + 0x9c, 0xd6, 0x09, 0x69, 0xa7, 0x2d, 0x3a, 0x36, 0x36, 0x4b, 0x8c, 0xae, 0x22, 0x20, 0x16, 0xf3, + 0xbd, 0x24, 0x3e, 0x93, 0x2f, 0x5c, 0x83, 0xe9, 0x82, 0x36, 0x46, 0xf1, 0xe7, 0x3c, 0x64, 0xa2, + 0x04, 0x22, 0x6d, 0xbe, 0xf6, 0x69, 0x7b, 0x4c, 0x9b, 0x5f, 0x57, 0x41, 0x7d, 0x69, 0x80, 0x3c, + 0x80, 0x11, 0xee, 0x8e, 0x34, 0x3e, 0xfa, 0xf7, 0xf1, 0x84, 0x17, 0x53, 0x98, 0xd9, 0xe1, 0x35, + 0x23, 0xd2, 0xfa, 0xc2, 0xbf, 0x40, 0xe9, 0xea, 0x79, 0xb1, 0x22, 0x7b, 0x31, 0xaa, 0x9f, 0x71, + 0xf5, 0x69, 0x67, 0x71, 0x52, 0x8e, 0x8a, 0xe7, 0xa0, 0xa6, 0xd0, 0xc8, 0x28, 0x3e, 0x83, 0x19, + 0xd1, 0x54, 0x5d, 0xb7, 0x77, 0xed, 0x57, 0x9c, 0xa1, 0xf8, 0x3f, 0xbd, 0xd2, 0x20, 0xe9, 0xbd, + 0x94, 0x38, 0xfe, 0x51, 0x83, 0xd1, 0xcd, 0x46, 0x93, 0xf3, 0x7c, 0x0c, 0xda, 0x43, 0x75, 0x40, + 0xb6, 0x68, 0x36, 0x91, 0xe3, 0xf6, 0xac, 0x4e, 0xda, 0x37, 0x14, 0x2b, 0xe8, 0x77, 0x30, 0x99, + 0xa5, 0x8a, 0x76, 0x56, 0xa0, 0xe3, 0xaf, 0x34, 0x18, 0x17, 0xd0, 0xf0, 0xf2, 0x1c, 0xbe, 0x98, + 0x1c, 0x57, 0xb2, 0xb4, 0x47, 0x90, 0xaf, 0x63, 0x28, 0x7b, 0x1d, 0x7b, 0x50, 0x95, 0xac, 0x29, + 0x0d, 0xf7, 0xdf, 0xe6, 0xc2, 0x7d, 0xa2, 0x1e, 0x0f, 0x21, 0xa9, 0xbb, 0x45, 0x84, 0xdf, 0xeb, + 0x01, 0xdf, 0x0b, 0x94, 0x12, 0xfc, 0x5d, 0xa1, 0x53, 0xb0, 0xcd, 0x46, 0xf3, 0x53, 0x74, 0x0a, + 0x03, 0x46, 0xbb, 0xe9, 0xcd, 0xc6, 0x3e, 0x11, 0xdf, 0xc5, 0x6e, 0x11, 0x1b, 0x75, 0x85, 0xdd, + 0xe2, 0xf7, 0x30, 0xb1, 0xe5, 0xb0, 0x8e, 0xc3, 0xd8, 0x05, 0xfa, 0x2d, 0x82, 0xc9, 0x2c, 0x33, + 0xa3, 0xf8, 0x2d, 0xa0, 0x46, 0x37, 0x99, 0x76, 0x2e, 0x52, 0xc3, 0x4b, 0x10, 0x67, 0x84, 0x1c, + 0x3a, 0xdd, 0x90, 0xb4, 0x9b, 0xa4, 0xe5, 0x7b, 0x6d, 0xc6, 0x5d, 0x53, 0x35, 0x33, 0xb4, 0xa8, + 0x82, 0x17, 0x74, 0x31, 0x8a, 0x77, 0x41, 0xdf, 0xb4, 0xbc, 0x16, 0x71, 0x2f, 0xc3, 0x10, 0xbc, + 0x00, 0xf3, 0x25, 0xbb, 0xc5, 0xd8, 0x44, 0x90, 0x07, 0x62, 0x13, 0x89, 0x93, 0x51, 0x5c, 0x07, + 0x94, 0xdb, 0xb7, 0xff, 0x06, 0x35, 0x98, 0x2e, 0xf0, 0x33, 0x8a, 0x1f, 0xf0, 0xb9, 0x28, 0xee, + 0x17, 0xcd, 0x2e, 0x4d, 0xd0, 0x69, 0xda, 0xb3, 0x7a, 0x87, 0xd2, 0x32, 0x87, 0x6a, 0xf2, 0x49, + 0x46, 0x2d, 0xc5, 0xa8, 0xd4, 0x54, 0xb4, 0x0f, 0x68, 0x2a, 0x1b, 0x3c, 0x85, 0x7a, 0xdb, 0x5d, + 0x68, 0x40, 0x7d, 0xc5, 0x43, 0xbc, 0x20, 0xf4, 0xd1, 0x53, 0xea, 0x0f, 0x15, 0x40, 0xcd, 0x4c, + 0xee, 0xf0, 0x8a, 0xfa, 0xe1, 0x81, 0xf8, 0x27, 0x18, 0xf5, 0x9c, 0xd6, 0x89, 0x97, 0xe6, 0x67, + 0x64, 0x84, 0xed, 0xfb, 0xb6, 0x4b, 0xe2, 0x87, 0x89, 0xa3, 0xee, 0x71, 0xbd, 0x19, 0x06, 0x8e, + 0x67, 0xbf, 0xb2, 0xdc, 0x2e, 0x31, 0x05, 0x37, 0x7a, 0x08, 0xd7, 0x8f, 0xad, 0x16, 0x79, 0x69, + 0xee, 0x72, 0xdc, 0x3b, 0x48, 0x30, 0x65, 0x46, 0x7f, 0x86, 0xb1, 0xc0, 0x77, 0xc9, 0x2e, 0x39, + 0x23, 0xae, 0x3e, 0xcc, 0x25, 0x17, 0x0a, 0x92, 0x3b, 0x5e, 0xb8, 0x71, 0x3f, 0x16, 0xec, 0x71, + 0xa3, 0xbb, 0x50, 0x21, 0xef, 0xf4, 0x91, 0x0b, 0x68, 0xab, 0x90, 0x77, 0x78, 0x17, 0x6a, 0x45, + 0x17, 0x45, 0x17, 0xb6, 0x91, 0x6f, 0x81, 0xf3, 0x49, 0x99, 0x55, 0xb0, 0x8b, 0xd2, 0xa1, 0xc3, + 0xac, 0x6a, 0x37, 0x46, 0xf1, 0x1f, 0x7b, 0xa0, 0xf1, 0xc9, 0x11, 0x0b, 0x03, 0xab, 0x15, 0x5e, + 0x24, 0x34, 0xbe, 0xd6, 0x60, 0xaa, 0x20, 0xd4, 0xe7, 0x06, 0xef, 0x26, 0xef, 0x52, 0xb1, 0xf6, + 0xbd, 0x6e, 0xf4, 0xcb, 0x2f, 0xb3, 0x6a, 0x16, 0x17, 0xd0, 0x1f, 0x60, 0xda, 0xce, 0xc2, 0xf0, + 0xe7, 0x16, 0x7b, 0xc3, 0xaf, 0xf8, 0x9a, 0xa9, 0x5a, 0xc2, 0x6d, 0xd0, 0xd5, 0xc7, 0x60, 0x14, + 0x3d, 0x4f, 0x3a, 0xb5, 0xbc, 0x90, 0x3a, 0x4f, 0x4f, 0x9c, 0x57, 0x94, 0x54, 0xc8, 0xe0, 0x3d, + 0xae, 0x85, 0x37, 0x69, 0x4f, 0xae, 0xfc, 0x7d, 0xd2, 0x39, 0xe3, 0xc5, 0x4a, 0xce, 0x8b, 0xff, + 0x83, 0xf9, 0x92, 0xfd, 0x2e, 0x05, 0xeb, 0x6c, 0xe4, 0x07, 0x82, 0x18, 0x5e, 0xf4, 0xaf, 0x65, + 0x0f, 0x7a, 0x9e, 0xcc, 0x0a, 0x31, 0x1a, 0x49, 0x75, 0x13, 0x24, 0x19, 0x07, 0x44, 0xfa, 0x79, + 0xff, 0xe7, 0x49, 0x88, 0x5f, 0x19, 0xd1, 0x23, 0xb8, 0xd1, 0xea, 0x3d, 0xaa, 0xa1, 0x5a, 0x0a, + 0x02, 0x32, 0xcf, 0x83, 0xc6, 0xac, 0x8a, 0xcc, 0x28, 0x7a, 0x08, 0x63, 0x6f, 0xd3, 0xf9, 0x18, + 0x4d, 0x27, 0x4c, 0xf2, 0x04, 0x6f, 0xcc, 0x14, 0x89, 0xb1, 0xdc, 0x69, 0x3a, 0x5e, 0x0a, 0x39, + 0x79, 0x34, 0x15, 0x72, 0x99, 0x29, 0x14, 0x3d, 0x85, 0xaa, 0x2d, 0xbf, 0xc1, 0xa1, 0xb9, 0x34, + 0x20, 0x72, 0x2f, 0x79, 0x86, 0xae, 0x5e, 0x60, 0x14, 0x3d, 0x86, 0x71, 0x26, 0xbd, 0x89, 0xa1, + 0xd9, 0x5c, 0x42, 0xa6, 0x3b, 0xcc, 0x29, 0xe9, 0x8c, 0xa2, 0xff, 0xc3, 0x9c, 0xad, 0x7e, 0xbb, + 0x42, 0xbf, 0xc9, 0x69, 0x2d, 0xbe, 0x2e, 0x19, 0x78, 0x10, 0x0b, 0xa3, 0xe8, 0x18, 0xe6, 0xed, + 0xb2, 0x37, 0x22, 0x74, 0xbb, 0xb7, 0x41, 0xe9, 0x1b, 0x96, 0xb1, 0x3a, 0x98, 0x89, 0x51, 0x74, + 0x00, 0x28, 0x2c, 0xbc, 0xc4, 0xa0, 0xc5, 0x44, 0x56, 0xf9, 0x4e, 0x64, 0xdc, 0xea, 0xb3, 0xca, + 0x28, 0x6a, 0x81, 0x6e, 0x97, 0x3c, 0x41, 0x20, 0x9c, 0xc9, 0x5e, 0xe5, 0x03, 0x8a, 0x71, 0x7b, + 0x20, 0x4f, 0x6c, 0xb7, 0x5d, 0x18, 0xfd, 0x85, 0xdd, 0xca, 0x67, 0x0a, 0x61, 0x77, 0xc9, 0x9b, + 0xc1, 0x0b, 0x98, 0xb6, 0x8b, 0xd3, 0x38, 0x52, 0x4b, 0x89, 0x28, 0x5b, 0xea, 0xb7, 0xcc, 0x6b, + 0xd9, 0xc4, 0x49, 0x76, 0x30, 0x46, 0x69, 0xfd, 0x2f, 0x8e, 0xe7, 0x86, 0x51, 0xb6, 0x24, 0x8e, + 0x9c, 0x1b, 0x66, 0xe5, 0x23, 0x17, 0xc7, 0x6c, 0xf9, 0xc8, 0xaa, 0x29, 0x78, 0x0f, 0xa6, 0x9c, + 0xfc, 0x1c, 0x89, 0x16, 0x12, 0x19, 0xd5, 0x4c, 0x6b, 0x2c, 0x96, 0x2f, 0xc6, 0x49, 0x2d, 0x92, + 0x53, 0x24, 0xb5, 0x3c, 0x17, 0x89, 0xa4, 0xce, 0x8e, 0x27, 0x85, 0xdb, 0x8c, 0xa0, 0x79, 0xc9, + 0x6d, 0x26, 0xa3, 0x44, 0xc9, 0x6d, 0x0a, 0x4c, 0xff, 0x18, 0xc6, 0xdb, 0x12, 0x9c, 0x16, 0x39, + 0x9e, 0x03, 0xe4, 0x22, 0xc7, 0xf3, 0xd8, 0x3b, 0xba, 0xb8, 0x4e, 0x16, 0xa4, 0x8a, 0x8b, 0x2b, + 0x42, 0x61, 0x71, 0x71, 0x0a, 0x5c, 0x8b, 0x5e, 0x43, 0xad, 0xa5, 0x02, 0xbd, 0x68, 0x39, 0xad, + 0xa9, 0x25, 0x00, 0xdb, 0x58, 0xe9, 0xcf, 0x10, 0x7b, 0x5c, 0x58, 0x29, 0x3c, 0x2e, 0x83, 0x60, + 0xe1, 0xf1, 0x0c, 0xd2, 0x8d, 0x4e, 0x97, 0xb3, 0x49, 0x9c, 0xae, 0x08, 0xa4, 0xc5, 0xe9, 0x14, + 0x98, 0x39, 0xa9, 0x85, 0x2a, 0xf4, 0x2b, 0xd7, 0xc2, 0x12, 0x4c, 0x2d, 0xd7, 0xc2, 0x52, 0x00, + 0x1d, 0x47, 0x47, 0x0e, 0xd5, 0xca, 0xd1, 0x51, 0x44, 0xc9, 0x72, 0x74, 0xa8, 0xe0, 0xf0, 0x01, + 0x20, 0x56, 0xc4, 0xb3, 0x8b, 0xe5, 0xc0, 0x4c, 0xda, 0x52, 0x8d, 0xcb, 0xd0, 0xbf, 0x61, 0xc6, + 0x56, 0x00, 0x1a, 0x94, 0x2f, 0x10, 0x39, 0xd0, 0x66, 0x2c, 0xf7, 0x5d, 0x8f, 0xc3, 0xc7, 0x56, + 0x61, 0x0e, 0xb4, 0x9c, 0xad, 0xf0, 0x05, 0x84, 0x23, 0xc2, 0xa7, 0x1c, 0xb2, 0x48, 0x46, 0xcb, + 0xd8, 0x01, 0xa9, 0xab, 0x9a, 0x40, 0x23, 0x05, 0xa3, 0xf3, 0xc0, 0xe3, 0xe9, 0xf2, 0xeb, 0x5b, + 0xfb, 0x94, 0x78, 0x87, 0x3b, 0x0d, 0xe9, 0xbf, 0x48, 0x2e, 0xf3, 0x57, 0xfe, 0x7b, 0x34, 0xc2, + 0x49, 0x1b, 0xbf, 0x04, 0x00, 0x00, 0xff, 0xff, 0x19, 0x28, 0x60, 0x4b, 0xfe, 0x1c, 0x00, 0x00, } diff --git a/pkg/proto/group/group.proto b/pkg/proto/group/group.proto index 227577a30..160cc06a8 100644 --- a/pkg/proto/group/group.proto +++ b/pkg/proto/group/group.proto @@ -227,17 +227,6 @@ message CancelMuteGroupReq{ message CancelMuteGroupResp{ } - - - -message SetGroupMemberNicknameReq{ - string groupID = 1; - string nickname = 2; - string userID = 3; -} -message SetGroupMemberNicknameResp{ -} - message GetJoinedSuperGroupListReq { string userID = 1; } @@ -254,7 +243,7 @@ message GetSuperGroupsInfoResp { repeated server_api_params.GroupInfo groupInfos = 1; } -message SetGroupMemberInfoReq{ +message SetGroupMemberInfo{ string groupID = 1; string userID = 2; google.protobuf.StringValue nickname = 3; @@ -263,6 +252,10 @@ message SetGroupMemberInfoReq{ google.protobuf.StringValue ex = 6; } +message SetGroupMemberInfoReq{ + repeated SetGroupMemberInfo members = 1; +} + message SetGroupMemberInfoResp{ } @@ -348,7 +341,6 @@ service group{ //获取指定的超级群信息 rpc getSuperGroupsInfo(GetSuperGroupsInfoReq) returns (GetSuperGroupsInfoResp); //设置群成员昵称 - rpc setGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); //设置群成员信息 rpc setGroupMemberInfo(SetGroupMemberInfoReq) returns (SetGroupMemberInfoResp); //获取群信息hash值