syntax = "proto3";
package OpenIMServer.group;
import "sdkws/sdkws.proto";
import "wrapperspb/wrapperspb.proto";
option go_package = "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group";



message CreateGroupReq{
  repeated string initMembers = 1;
  sdkws.GroupInfo groupInfo = 2;
  repeated string adminUserIDs = 3;
  string ownerUserID = 4; //owner
}
message CreateGroupResp{
  sdkws.GroupInfo groupInfo = 1;
}


message GetGroupsInfoReq{
  repeated string groupIDs = 1;
}
message GetGroupsInfoResp{
  repeated sdkws.GroupInfo groupInfos = 1;
}


message SetGroupInfoReq{
  sdkws.GroupInfoForSet groupInfoForSet = 1;
}
message SetGroupInfoResp{
}


message GetGroupApplicationListReq {
  sdkws.RequestPagination pagination = 1;
  string fromUserID = 2; //owner or admin
}
message GetGroupApplicationListResp {
  uint32 total = 1;
  repeated sdkws.GroupRequest groupRequests = 2;
}

message GetUserReqApplicationListReq{
  sdkws.RequestPagination pagination = 1;
  string userID = 2;
}

message GetUserReqApplicationListResp{
  uint32 total = 1;
  repeated sdkws.GroupRequest groupRequests = 2;
}


message TransferGroupOwnerReq {
  string groupID = 1;
  string oldOwnerUserID = 2;
  string newOwnerUserID = 3;
}
message TransferGroupOwnerResp{

}

message JoinGroupReq{
  string groupID = 1;
  string reqMessage = 2;
  int32 joinSource = 3;
  string inviterUserID = 4;
}
message JoinGroupResp{
}


message GroupApplicationResponseReq{
  string groupID = 1;
  string fromUserID = 2;  //
  string handledMsg = 3;
  int32 handleResult = 4;
}
message GroupApplicationResponseResp{

}



message QuitGroupReq{
  string groupID = 1;
}
message QuitGroupResp{
}


message GetGroupMemberListReq {
  sdkws.RequestPagination pagination = 1;
  string groupID = 2;
  int32 filter = 3;
}

message GetGroupMemberListResp {
  uint32 total = 1;
  repeated sdkws.GroupMemberFullInfo members = 2;
}


message GetGroupMembersInfoReq {
  string groupID = 1;
  repeated string members = 2;
}

message GetGroupMembersInfoResp {
  repeated sdkws.GroupMemberFullInfo members = 1;
}

message KickGroupMemberReq {
  string groupID = 1;
  repeated string kickedUserIDs = 2;
  string reason = 3;
}

message KickGroupMemberResp {

}


message GetJoinedGroupListReq {
  sdkws.RequestPagination pagination = 1;
  string fromUserID = 2;
}
message GetJoinedGroupListResp{
  uint32 total = 1;
  repeated  sdkws.GroupInfo groups = 2;
}


message InviteUserToGroupReq {
  string groupID = 1;
  string reason = 2;
  repeated string invitedUserIDs = 3;
}
message InviteUserToGroupResp {

}


message GetGroupAllMemberReq {
  sdkws.RequestPagination pagination = 1;
  string groupID = 2;
}
message GetGroupAllMemberResp {
  repeated sdkws.GroupMemberFullInfo members = 1;
}

message CMSGroup {
  sdkws.GroupInfo groupInfo = 1;
  string groupOwnerUserName = 2;
  string groupOwnerUserID = 3;
}


message GetGroupsReq {
  sdkws.RequestPagination pagination = 1;
  string groupName = 2;
  string groupID = 3;
}

message GetGroupsResp {
  uint32 total = 1;
  repeated CMSGroup groups = 2;
}

message GetGroupMemberReq {
  string groupID = 1;
}

message GetGroupMembersCMSReq {
  sdkws.RequestPagination pagination = 1;
  string groupID = 2;
  string userName = 3;
}

message GetGroupMembersCMSResp {
  uint32 total = 1;
  repeated sdkws.GroupMemberFullInfo members = 2;
}

message DismissGroupReq{
  string groupID = 1;
}

message DismissGroupResp{
}


message MuteGroupMemberReq{
  string groupID = 1;
  string userID = 2;
  uint32 mutedSeconds = 3;
}

message MuteGroupMemberResp{
}



message CancelMuteGroupMemberReq{
  string groupID = 1;
  string userID = 2;
}

message CancelMuteGroupMemberResp{
}


message MuteGroupReq{
  string groupID = 1;
}

message MuteGroupResp{
}



message CancelMuteGroupReq{
  string groupID = 1;
}

message CancelMuteGroupResp{
}

message GetJoinedSuperGroupListReq {
  string userID = 1;
}

message GetJoinedSuperGroupListResp {
  repeated sdkws.GroupInfo groups = 1;
}

message GetSuperGroupsInfoReq {
  repeated string groupIDs = 1;
}

message GetSuperGroupsInfoResp {
  repeated sdkws.GroupInfo groupInfos = 1;
}

message SetGroupMemberInfo{
  string groupID = 1;
  string userID = 2;
  OpenIMServer.protobuf.StringValue nickname = 3;
  OpenIMServer.protobuf.StringValue faceURL = 4;
  OpenIMServer.protobuf.Int32Value roleLevel = 5;
  OpenIMServer.protobuf.StringValue ex = 6;
}

message SetGroupMemberInfoReq{
  repeated SetGroupMemberInfo members = 1;
}

message SetGroupMemberInfoResp{

}

message GetGroupAbstractInfoReq{
  repeated string groupIDs = 1;
}

message GroupAbstractInfo{
  string groupID = 1;
  uint32 groupMemberNumber = 2;
  uint64 groupMemberListHash = 3;
}

message GetGroupAbstractInfoResp{
  repeated GroupAbstractInfo groupAbstractInfos = 1;
}

message GetUserInGroupMembersReq {
  string userID = 1;
  repeated string groupIDs = 2;
}

message GetUserInGroupMembersResp{
  repeated sdkws.GroupMemberFullInfo members = 1;
}

message GetGroupMemberUserIDsReq{
  string groupID = 1;
}

message GetGroupMemberUserIDsResp{
  repeated string userIDs = 1;
}

message GetGroupMemberRoleLevelReq{
  string groupID = 1;
  repeated int32 roleLevels = 2;
}

message GetGroupMemberRoleLevelResp {
  repeated sdkws.GroupMemberFullInfo members = 1;
}

service group{
  //创建群
  rpc createGroup(CreateGroupReq) returns(CreateGroupResp);
  //申请加群
  rpc joinGroup(JoinGroupReq) returns(JoinGroupResp);
  //退出群
  rpc quitGroup(QuitGroupReq) returns(QuitGroupResp);
  //获取指定群信息
  rpc getGroupsInfo(GetGroupsInfoReq) returns(GetGroupsInfoResp);
  //设置群信息
  rpc setGroupInfo(SetGroupInfoReq) returns(SetGroupInfoResp);
  //（以管理员或群主身份）获取群的加群申请
  rpc getGroupApplicationList(GetGroupApplicationListReq) returns(GetGroupApplicationListResp);
  //获取用户自己的主动加群申请
  rpc getUserReqApplicationList(GetUserReqApplicationListReq) returns(GetUserReqApplicationListResp);
  //转让群主
  rpc transferGroupOwner(TransferGroupOwnerReq) returns(TransferGroupOwnerResp);
  //群主或管理员处理进群申请
  rpc groupApplicationResponse(GroupApplicationResponseReq) returns(GroupApplicationResponseResp);
  //获取某个群的群成员
  rpc getGroupMemberList(GetGroupMemberListReq) returns(GetGroupMemberListResp);
  //获取某个群的指定群成员
  rpc getGroupMembersInfo(GetGroupMembersInfoReq) returns(GetGroupMembersInfoResp);
  //踢出群
  rpc kickGroupMember(KickGroupMemberReq) returns (KickGroupMemberResp);
  //获取某个人已加入群
  rpc getJoinedGroupList(GetJoinedGroupListReq) returns (GetJoinedGroupListResp);
  //邀请某些人进群
  rpc inviteUserToGroup(InviteUserToGroupReq) returns (InviteUserToGroupResp);

  rpc getGroups(GetGroupsReq) returns(GetGroupsResp);
  rpc getGroupMembersCMS(GetGroupMembersCMSReq) returns(GetGroupMembersCMSResp);

  //解散群
  rpc dismissGroup(DismissGroupReq) returns(DismissGroupResp);
  //对某个群成员禁言
  rpc muteGroupMember(MuteGroupMemberReq) returns(MuteGroupMemberResp);
  //对某个群成员取消禁言
  rpc cancelMuteGroupMember(CancelMuteGroupMemberReq) returns(CancelMuteGroupMemberResp);
  //对某个群禁言
  rpc muteGroup(MuteGroupReq) returns(MuteGroupResp);
  //对某个群取消禁言
  rpc cancelMuteGroup(CancelMuteGroupReq) returns(CancelMuteGroupResp);

  //获取某个用户加入的超级群
  rpc getJoinedSuperGroupList(GetJoinedSuperGroupListReq) returns (GetJoinedSuperGroupListResp);
  //获取指定的超级群信息
  rpc getSuperGroupsInfo(GetSuperGroupsInfoReq) returns (GetSuperGroupsInfoResp);
  //设置群成员昵称
  //设置群成员信息
  rpc setGroupMemberInfo(SetGroupMemberInfoReq) returns (SetGroupMemberInfoResp);
  //获取群信息hash值
  rpc getGroupAbstractInfo(GetGroupAbstractInfoReq) returns (GetGroupAbstractInfoResp);
  //获取某个用户在指定群中的信息
  rpc getUserInGroupMembers(GetUserInGroupMembersReq) returns (GetUserInGroupMembersResp);
  //获取群成员用户ID
  rpc getGroupMemberUserIDs(GetGroupMemberUserIDsReq) returns (GetGroupMemberUserIDsResp);
  //查询群组中对应级别的成员
  rpc GetGroupMemberRoleLevel(GetGroupMemberRoleLevelReq)returns (GetGroupMemberRoleLevelResp);
}







