diff --git a/cmd/api/docs/docs.go b/cmd/api/docs/docs.go index 346f3f771..ab8190440 100644 --- a/cmd/api/docs/docs.go +++ b/cmd/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/sdkws.PublicUserInfo" diff --git a/internal/api/auth/auth.go b/internal/api/auth/auth.go index c82c02b7c..f04ea1793 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/sdkws" "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 f1531d395..d033472ab 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/group_test.go b/internal/api/group/group_test.go index 03d1f8e5e..fc9595270 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[apistruct.KickGroupMemberReq, apistruct.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") +} 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 8efb1996a..64089becc 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/sdkws" "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 137ccacc8..4c02af9e0 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/sdkws" "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 5d45021a3..8e22ae4c6 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/sdkws" @@ -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/common/rpc_server/a.go b/internal/common/rpc_server/register.go similarity index 99% rename from internal/common/rpc_server/a.go rename to internal/common/rpc_server/register.go index 75223eaf6..107c0cbf8 100644 --- a/internal/common/rpc_server/a.go +++ b/internal/common/rpc_server/register.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/msggateway/validate.go b/internal/msggateway/validate.go index 8283d7945..4f505995c 100644 --- a/internal/msggateway/validate.go +++ b/internal/msggateway/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 new file mode 100644 index 000000000..0a3c07531 --- /dev/null +++ b/internal/push/sdk/tpns-server-sdk-go/go/auth/auth.go @@ -0,0 +1,62 @@ +package auth + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + b64 "encoding/base64" + "encoding/hex" + "fmt" + "net/http" + "strconv" + "time" +) + +type Auther struct { + AccessID string + SecretKey string +} + +var UseSignAuthored = true + +func (a *Auther) Auth(req *http.Request, useSignAuthored bool, auth Auther, reqBody string) { + + if useSignAuthored { + now := time.Now() + timeStamp := now.Unix() + req.Header.Add("AccessId", auth.AccessID) + req.Header.Add("TimeStamp", strconv.Itoa(int(timeStamp))) + sign := GenSign(uint64(timeStamp), auth.AccessID, auth.SecretKey, reqBody) + req.Header.Add("Sign", sign) + } else { + author := makeAuthHeader(a.AccessID, a.SecretKey) + //log.Printf("author string:%v", author) + req.Header.Add("Authorization", author) + } + //req.Header.Add("Content-Type", "application/json") +} + +func makeAuthHeader(appID, secretKey string) string { + base64Str := base64.StdEncoding.EncodeToString( + []byte( + fmt.Sprintf("%s:%s", appID, secretKey), + ), + ) + return fmt.Sprintf("Basic %s", base64Str) +} + +func GenSign(timeStamp uint64, accessId string, secretKey, requestBody string) string { + 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 Map to it + h.Write([]byte(signBody)) + + // Get result and encode as hexadecimal string + sha := hex.EncodeToString(h.Sum(nil)) + //fmt.Println() + //fmt.Println("timeStamp: " + strconv.Itoa(int(timeStamp)) + " accessID:" + accessId + " body:" + requestBody) + sEnc := b64.StdEncoding.EncodeToString([]byte(sha)) + //fmt.Println("final Result " + sEnc) + return sEnc +} 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/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/copy.go b/internal/rpc/group/copy.go index 6db7cc1e6..4fbabec7b 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, } } diff --git a/internal/rpc/group/db_map.go b/internal/rpc/group/db_map.go index 7942e6227..0bac9e89b 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 e827fd399..caf3866d2 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 { @@ -75,7 +74,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 } @@ -191,7 +190,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 +286,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, @@ -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) - if err != nil { - return nil, err - } - if group.Status == constant.GroupStatusDismissed { - return nil, constant.ErrArgs.Wrap("group status is dismissed") - } - member, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, req.UserID) - if err != nil { - return nil, err - } - if tracelog.GetOpUserID(ctx) == req.UserID { - if req.RoleLevel != nil { - return nil, constant.ErrArgs.Wrap("update role level") + 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") } - } else if !tokenverify.IsAppManagerUid(ctx) { - opMember, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx)) - if err != nil { + 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 + } + for _, member := range members { + delete(duplicateMap, [...]string{member.GroupID, member.UserID}) + } + if len(duplicateMap) > 0 { + return nil, constant.ErrArgs.Wrap("group not found or user not in group") + } + 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)) + } + } + } + for _, member := range req.Members { + if member.RoleLevel == nil { + continue + } + 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)) + } + } + for i := 0; i < len(req.Members); i++ { + if err := CallbackBeforeSetGroupMemberInfo(ctx, req.Members[i]); err != nil { return nil, err } - if opMember.RoleLevel <= member.RoleLevel { - return nil, constant.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) + } + 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 := CallbackBeforeSetGroupMemberInfo(ctx, req); err != nil { + })) + if err != nil { return nil, err } - if err := s.GroupInterface.UpdateGroupMember(ctx, req.GroupID, req.UserID, UpdateGroupMemberMap(req)); err != nil { - return nil, err + for _, member := range req.Members { + chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), member.GroupID, member.UserID) } - chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID) return resp, nil } @@ -1038,3 +1066,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/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 bb41192c1..cd51ea2ee 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/config/config.go b/pkg/common/config/config.go index f98855107..5995a98aa 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -621,15 +621,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/conversation.go b/pkg/common/db/cache/conversation.go index 3aaa1d48f..844e9b937 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 eb94ccb22..2b9c2c04e 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) @@ -57,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, @@ -106,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 *relation.GroupGorm, 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 = &relation.GroupGorm{} - 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, "") +func (g *GroupCacheRedis) GetGroupInfo(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) { + 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) { @@ -339,6 +315,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/cache/redis.go b/pkg/common/db/cache/redis.go index 1fedf44e2..82523eb0f 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/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/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) } diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 10325f315..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) @@ -30,6 +36,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 @@ -37,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) @@ -61,6 +69,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) } @@ -125,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) } @@ -141,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) } @@ -179,6 +192,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 @@ -186,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) @@ -211,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, @@ -230,10 +245,36 @@ 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.cache.GetGroupMemberIDs(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 { @@ -253,11 +294,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) { @@ -265,7 +306,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 { @@ -273,13 +322,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) { @@ -287,6 +345,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) } @@ -299,19 +358,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) { @@ -338,12 +410,37 @@ 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) +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 + } + if err := g.cache.DelGroupMemberInfo(ctx, groupID, userID); err != nil { + return err + } + return nil + }) +} + +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 { 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/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 cbd0cdcf4..0597a871a 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_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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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() []*sdkws.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,11 +2137,84 @@ type SetGroupMemberInfoReq struct { XXX_sizecache int32 `json:"-"` } +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 *SetGroupMemberInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetGroupMemberInfo.Unmarshal(m, b) +} +func (m *SetGroupMemberInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetGroupMemberInfo.Marshal(b, m, deterministic) +} +func (dst *SetGroupMemberInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetGroupMemberInfo.Merge(dst, src) +} +func (m *SetGroupMemberInfo) XXX_Size() int { + return xxx_messageInfo_SetGroupMemberInfo.Size(m) +} +func (m *SetGroupMemberInfo) XXX_DiscardUnknown() { + xxx_messageInfo_SetGroupMemberInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_SetGroupMemberInfo proto.InternalMessageInfo + +func (m *SetGroupMemberInfo) GetGroupID() string { + if m != nil { + return m.GroupID + } + return "" +} + +func (m *SetGroupMemberInfo) GetUserID() string { + if m != nil { + return m.UserID + } + return "" +} + +func (m *SetGroupMemberInfo) GetNickname() *wrapperspb.StringValue { + if m != nil { + return m.Nickname + } + return nil +} + +func (m *SetGroupMemberInfo) GetFaceURL() *wrapperspb.StringValue { + if m != nil { + return m.FaceURL + } + return nil +} + +func (m *SetGroupMemberInfo) GetRoleLevel() *wrapperspb.Int32Value { + if m != nil { + return m.RoleLevel + } + return nil +} + +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_97564bfcd2811fbb, []int{52} + return fileDescriptor_group_b971ad66a8171801, []int{51} } func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) @@ -2245,44 +2234,9 @@ func (m *SetGroupMemberInfoReq) XXX_DiscardUnknown() { var xxx_messageInfo_SetGroupMemberInfoReq proto.InternalMessageInfo -func (m *SetGroupMemberInfoReq) GetGroupID() string { +func (m *SetGroupMemberInfoReq) GetMembers() []*SetGroupMemberInfo { if m != nil { - return m.GroupID - } - return "" -} - -func (m *SetGroupMemberInfoReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *SetGroupMemberInfoReq) GetNickname() *wrapperspb.StringValue { - if m != nil { - return m.Nickname - } - return nil -} - -func (m *SetGroupMemberInfoReq) GetFaceURL() *wrapperspb.StringValue { - if m != nil { - return m.FaceURL - } - return nil -} - -func (m *SetGroupMemberInfoReq) GetRoleLevel() *wrapperspb.Int32Value { - if m != nil { - return m.RoleLevel - } - return nil -} - -func (m *SetGroupMemberInfoReq) GetEx() *wrapperspb.StringValue { - if m != nil { - return m.Ex + return m.Members } return nil } @@ -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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []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_97564bfcd2811fbb, []int{58} + return fileDescriptor_group_b971ad66a8171801, []int{57} } func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b) @@ -2531,6 +2485,82 @@ func (m *GetUserInGroupMembersResp) GetMembers() []*sdkws.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_b971ad66a8171801, []int{58} +} +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_b971ad66a8171801, []int{59} +} +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") @@ -2578,19 +2608,20 @@ 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") 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. @@ -2649,13 +2680,14 @@ 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值 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 { @@ -2873,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...) @@ -2909,6 +2932,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 { @@ -2957,13 +2989,14 @@ type GroupServer interface { // 获取指定的超级群信息 GetSuperGroupsInfo(context.Context, *GetSuperGroupsInfoReq) (*GetSuperGroupsInfoResp, error) // 设置群成员昵称 - SetGroupMemberNickname(context.Context, *SetGroupMemberNicknameReq) (*SetGroupMemberNicknameResp, error) // 设置群成员信息 SetGroupMemberInfo(context.Context, *SetGroupMemberInfoReq) (*SetGroupMemberInfoResp, error) // 获取群信息hash值 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) { @@ -3384,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 { @@ -3456,6 +3471,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), @@ -3552,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, @@ -3568,126 +3597,130 @@ 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) } +func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_b971ad66a8171801) } -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, +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 67e48beb8..39a84d00a 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 sdkws.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{ } @@ -281,14 +274,25 @@ message GetGroupAbstractInfoResp{ repeated GroupAbstractInfo groupAbstractInfos = 1; } -message getUserInGroupMembersReq { +message GetUserInGroupMembersReq { string userID = 1; repeated string groupIDs = 2; } + message getUserInGroupMembersResp{ repeated sdkws.GroupMemberFullInfo members = 1; } +message GetGroupMemberUserIDReq{ + string groupID = 1; +} + +message GetGroupMemberUserIDResp{ + repeated string userIDs = 1; +} + + + service group{ //创建群 rpc createGroup(CreateGroupReq) returns(CreateGroupResp); @@ -338,13 +342,14 @@ service group{ //获取指定的超级群信息 rpc getSuperGroupsInfo(GetSuperGroupsInfoReq) returns (GetSuperGroupsInfoResp); //设置群成员昵称 - rpc setGroupMemberNickname(SetGroupMemberNicknameReq) returns (SetGroupMemberNicknameResp); //设置群成员信息 rpc setGroupMemberInfo(SetGroupMemberInfoReq) returns (SetGroupMemberInfoResp); //获取群信息hash值 rpc getGroupAbstractInfo(GetGroupAbstractInfoReq) returns (GetGroupAbstractInfoResp); //获取某个用户在指定群中的信息 - rpc getUserInGroupMembers(getUserInGroupMembersReq) returns (getUserInGroupMembersResp); + rpc getUserInGroupMembers(GetUserInGroupMembersReq) returns (GetUserInGroupMembersResp); + //获取群成员用户ID + rpc getGroupMemberUserID(GetGroupMemberUserIDReq) returns (GetGroupMemberUserIDResp); }