syntax = "proto2";
package yl_pb;

enum ChatChannelType {
  Session = 0;      //会话
  Group = 1;        //群组
  CSD =2;           //客服频道
  TransHK = 3;       //翻译管家
}

enum ChatType {
  TextChatType = 0;           //文字聊天
  ImageChatType = 1;          //图片
  ShortVoiceChatType = 2;     //短语音
  ShortVideoChatType = 3;     //短视频
  RealtimeCallVoiceType = 4;  //实时通话-语音
  RealtimeCallVideoType = 5;  //实时通话-视频
  RedWalletChatType = 6;      //红包
  PlaceChatType = 7;          //地址类型
  EmoticonType = 8;           //表情
  GroupChatNoticeType = 9;    //群公告类型
  GiftChatType = 10;          //礼物聊天类型
  FileChatType = 11;          //文件聊天类型
}

enum RedWalletState {
  Uncollected = 0;    //未领取
  Received = 1;       //已领取
  Expire = 2;         //过期
}

//用户间翻译状态
enum TranslateState{
  NoPerson = 0;//没有翻译人员在线
  SameLan = 1;//同一语言
  Unopen  = 2;//没有开启人工翻译
  Opend = 3; //已经开启人工翻译
}

//红包数据
message RedWallet {
  optional string OrderId = 1; 
  optional uint32 SuId = 2;        //发送者Id
  optional uint32 TuId = 3;        //接收者Id
  optional string Title = 4; 
  optional uint32 Amount  = 5;
  optional RedWalletState State = 6;
  optional int64 RecTime  = 7;    //领取时间
}

message BaseUserInfo {
  optional uint32 Id = 1;         //用户Id
	optional string NiceName =2;    //昵称
  optional string HeadUrl =3;     //头像Id
}

enum ChatNiceoType {
  GroupAddMember = 1;                       //聊天群-加入用户
  GroupRemoveMember = 2;                    //聊天群-移除用户
}

message ChatNiceo {
  optional ChatNiceoType NictoType = 1;     //公告类型
  optional string NictoMsg = 2;             //公告消息
}

message GiftChat {
  optional uint32 SuId = 1;           //发送者Id
  optional uint32 TuId = 2;           //接收者Id
  optional uint32 GiftId = 3;         //礼物Id
  optional string GiftName = 4;       //礼物名称
  optional uint32 GiftAmount = 5;     //礼物数量
  optional uint32 Money = 6;          //钱
}

message FileChat {
  optional string Type = 1;           //文件类型
  optional uint32 Size = 2;           //文件大小
  optional string Name = 3;           //文件名称
}

//引用消息数据结构
message QuoteMsg{
  optional ChatChannelType ChannelType = 1;       //发送频道类型
  optional uint32 TargetId = 2;                   //发送目标Id SessionId or GroudId
  optional uint32 SendUserId = 3;                 //消息发送者
  optional int64 SendTime = 4;                    //发送时间
  optional string Content = 5;                    //消息附件地址
}

//-------------------------------------------------------------------------消息--------------------------------------------------------------------------------------------------
// MsgId=1 聊天消息发送请求
message ChatSendReq {
  optional ChatChannelType ChannelType = 1;       //发送频道类型
  optional uint32 TargetId = 2;                   //发送目标Id SessionId or GroudId
  optional int64 SendTime = 3;                    //发送时间
  optional ChatType CType = 4;                    //聊天类型 //文字 图片 短语音 短视频
  optional bytes ContentBuff = 5;                 //内容数据 10k 最大
  optional uint32 ContentSzie = 6;                //内容大小
  optional string EnclosureUrl = 7;               //消息附件地址
  repeated uint32 AltUserIds = 8;                 //alt用户id
  optional bytes QuoteMsg =9;                     //引用消息
}

// MsgId=2 聊天消息发送请求回应
message ChatSendRes {
  optional int32 ErrorCode = 1;   //0发送成功 1参数异常
  optional ChatChannelType ChannelType = 2;       //发送频道类型
  optional uint32 TargetId = 3;                   //发送目标Id SessionId or GroudId
  optional int64 SendTime = 4;    //聊天消息Id
}

// MsgId=3 推送用户聊天消息
message PushChat {
  optional ChatChannelType ChannelType = 1;     //发送频道类型
  optional uint32 TargetId = 2;                 //发送目标Id  SessionId or GroudId
  optional uint32 SendUserId = 3;               //发送者Id 0 通知消息 1 更新消息   非这两种未用户发送消息
  optional int64 SendTime = 4;                  //发送时间
  optional ChatType CType = 5;                  //聊天类型 //文字 图片 短语音 短视频
  optional bytes ContentBuff = 6;               //内容数据 10k 最大
  optional uint32 ContentSzie = 7;              //内容大小
  optional uint32 TranslateState = 8;           //翻译状态 0不翻译 1机翻 2人工翻译
  optional bytes TencentTranslate = 9;          //Tencent翻译
  optional bytes GoogleTranslate = 10;          //Google翻译
  optional bytes HumanTranslate = 11;           //人工翻译翻译
  optional string EnclosureUrl = 12;            //消息附件地址
  repeated uint32 AltUserIds = 13;                 //alt用户id
  optional bytes QuoteMsg =14;                     //引用消息
}

//MsgId=100  应答消息接收 
message AnswerPushChat {
  optional int64 MsgId = 1;        //消息Id
}

// MsgId=4 用户登陆成功后推送未读消息列表
message PushUserUnreadMsgNotice {
  repeated UserUnreadMsgNotice Notices = 2;
}

//未读消息描述
message UnreadMsgDes {
  optional uint32 SendUserId = 1;       //发送者Id 0 通知消息 1 更新消息   非这两种未用户发送消息
  optional int64 SendTime = 2;          //发送时间
  optional ChatType CType = 3;          //聊天类型 //文字 图片 短语音 短视频
  optional bytes ContentBuff = 4;       //内容数据 只有文字才有 其余的填空
  optional bytes TencentTranslate = 5;  //腾讯翻译
  optional bytes GoogleTranslate = 6;   //google翻译
}

message UserUnreadMsgNotice {
  optional ChatChannelType ChannelType = 1; //发送频道类型
  optional uint32 TargetId = 2;             //发送目标Id  SessionId or GroudId
  optional uint32 UnreadMsgNum = 3;         //未读消息数量
  optional UnreadMsgDes LastUnreadMsg = 4;  //最后一条未读消息
}

// MsgId=5 请求目标未读消息
message RequestTargetUnreadReq {
  optional ChatChannelType ChannelType = 1; //发送频道类型
  optional uint32 TargetId = 2;             //发送目标Id  SessionId or GroudId
}
// MsgId=6 请求目标未读消息回应
message RequestTargetUnreadRes {
  optional int32 ErrorCode = 1;      //0发送成功 1参数异常
}

// MsgId=7 请求设置人工翻译
message RequestSetHTranslReq {
  optional uint32 SessionId = 1;  //发送目标Id
  optional TranslateState HTransl = 2;    //是否需要人工翻译
}

// MsgId=8 请求设置人工翻译回应
message RequestSetHTranslRes {
  optional int32 ErrorCode = 1;   // 0发送成功 1参数异常
}

// MsgId=9 请求设置人工翻译回应
message PushHTranslState {
  optional uint32 SessionId = 1;          //会话id
  optional uint32 UserId = 2;             //发送目标Id
  optional TranslateState HTransl = 3;    //是否需要人工翻译
}

// MsgId=10 请求实时通话
message RequestRealtimeCallReq{
  optional uint32 TUserId = 1;  //目标用户
  optional ChatType CType = 2;  //通话类型
}
// MsgId=11 请求实时通话回应
message RequestRealtimeCallRes{
  optional int32 ErrorCode = 1;   // 0发送成功
}
// MsgId=12 推送实时通话请求
message PushRealtimeCall{
  optional uint32 SUserId = 1;  //发起通话请求用户
  optional ChatType CType = 2;  //通话类型
}

// MsgId=13 请求挂断实时通话请求
message RespondRealtimeCallReq{
  optional uint32 SUserId = 1;  //发起通话请求用户
  optional bool IsAnswer = 2;  //是否应答 true 应答 false 挂断
}
// MsgId=14 推送挂断实时通话请求
message PushRealtimeCallRespond{
  optional uint32 TUserId = 1;  //目标用户
  optional bool IsAnswer = 2;   //是否应答 true 应答 false 挂断
}

// MsgId=17 请求送礼物
message RequestGiftGivingReq{
  optional uint32 TargetUserId = 1;   //目标用户Id
  optional uint32 GiftId = 2;         //礼物Id
  optional uint32 GiftAmount = 3;     //礼物数量
  optional uint32 Money = 4;          //钱
}

// MsgId=18 推送送礼
message PushGiftGiving{
  optional uint32 SendUserId = 1;     //目标用户Id
  optional uint32 GiftId = 2;         //礼物Id
  optional uint32 GiftAmount = 3;     //礼物数量
  optional uint32 Money = 4;          //钱
}

//MsgId=80 查询用户基本信息
message QueryUsersInfoReq{
  repeated uint32 UserIds = 1;
}
//MsgId=81 查询用户基本信息回应
message QueryUsersInfoRes{
  repeated BaseUserInfo Infos = 1;
}

//-------------------------------------------------------------------------------Session相关---------------------------------------------------------------------------------------
//MsgId=101  请求创建会话
message CreateSessionReq {
  repeated uint32 MemberIds = 1;
}
//MsgId=102  请求创建会话
message QuerySessionReq {
  optional uint32 SessionId = 1;
}
//MsgId=103 请求创建会话回应
message SessionInfoRes {
  optional int32 ErrorCode = 1;               // 0发送成功 1参数异常
  optional uint32 SessionId = 2;
  repeated BaseUserInfo Members = 3;
  optional TranslateState IsNeedHTransl = 4;
}
//-------------------------------------------------------------------------------Group相关---------------------------------------------------------------------------------------
//群身份
enum GroupMemberIdentity {
  identityNormal = 0;       //普通成员
  identityManager = 1;      //管理员
  identityMaster = 2;       //群主
}

//聊天群信息变化类型
enum GroupChangeType {
  AddMember = 1;              //加入用户
  RemoveMember = 2;           //移除用户
  MasterTrans = 3;            //群主转让
  GroupNoticeChange = 4;      //群公告改变
  GroupNameChange = 5;        //群昵称改变
  GroupMemberAliasChange = 6; //群成员别名改变
  GroupIsOpenMemberCheckChange = 7;     //群设置校验成员改变
  GroupMemberCheckNotice = 8; //群成员校验公告
  QRCodeAddMemberNotice = 9;  //通过二维码加入到群
  GroupMemberCheckAddMemberNotice = 10;  //群主校验添加成员通告
  GroupMemberLeave = 11;                //群成员离开
}

//群成员结构
message GroupMember {
    optional BaseUserInfo Info = 1;             //用户Id
    optional string Name = 2;                   //用户Id
    optional GroupMemberIdentity Identity = 3;  //成员身份
    optional bool MessageFree = 4;              //消息打扰标记
    optional bool EffectiveUser = 5;            //有效用户  移除群成员不直接删除数据而是修改有效标签
    optional bool IsShowMenberNiceName =6;      //是否显示成员昵称
}
//群结构
message GroupInfo {
    optional uint32 Id = 1;                 //群Id
    optional uint32 	Code= 2;
    optional string GroupName = 3;          //群名称
    optional string Notice = 4;             //群公告
    repeated GroupMember Members= 5;        //群成员
    optional bool IsOpenMemberCheck = 6;    //是否开启成员校验
}

//推送聊天群变化信息
message GroupChatNotice{
  optional GroupChangeType ChangeType = 1;      //信息改变类型
  optional BaseUserInfo OperatuId = 2;          //操作用户Id
  repeated BaseUserInfo OperateduId = 3;        //被操作用户Ids 有可能是多人
  optional string ChangeStr = 4;                //改变消息
  optional bool ChangeBool = 5;                 //变化bool值
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//MsgId=201  创建聊天群

message CreateChatGroupReq {
    repeated uint32 Members = 3;            //群成员
}

//MsgId=202  创建聊天群回应
message CreateChatGroupRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional GroupInfo Group = 2;      //群信息
}

//MsgId=203 退出聊天群
message QuitChatGroupReq {
    optional uint32 GroupId = 1;      //群id
}
//MsgId=204 退出聊天群回应
message QuitChatGroupRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional uint32 GroupId = 2;      //群id
}

//MsgId=205  查询聊天群组信息
message QueryChatGroupReq {
    optional uint32 GroupId = 1;      //群信息
}
//MsgId=206  查询聊天群组信息
message QueryChatGroupRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional GroupInfo Group = 2;      //群信息
}

//MsgId=207 添加群成员
message AddGroupMemberReq {
    optional uint32 GroupId = 1;      //群信息
    repeated uint32 UserIds = 2;       //用户Id
}
//MsgId=208 添加群成员回应
message AddGroupMemberRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional uint32 GroupId = 2;      //群信息
}

//MsgId=209 移除群成员回应
message RemoveGroupMemberReq {
    optional uint32 GroupId = 1;      //群信息
    repeated uint32 UserIds = 2;
}

//MsgId=210 移除群成员回应
message RemoveGroupMemberRes {
    optional int32 ErrorCode = 1;    //详见错误码文档
    optional uint32 GroupId = 2;      //群信息
}

//MsgId=211 修改群公告请求
message ModifyGroupNoticeReq{
    optional uint32 GroupId = 1;      //群信息
    optional string Notice = 2;       //群信息
}

//MsgId=212 修改群公告请求回应
message ModifyGroupNoticeRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional uint32 GroupId = 2;      //群信息
}

//MsgId=213 修改群昵称请求
message ModifyGroupNameReq{
    optional uint32 GroupId = 1;      //群信息
    optional string Name = 2;         //群信息
}

//MsgId=214 修改群昵称请求回应
message ModifyGroupNameRes {
    optional int32 ErrorCode = 1;      //详见错误码文档
    optional uint32 GroupId = 2;      //群信息
}

//MsgId=215 群成员修改别名请求
message GroupMemberModifyAliasReq{
    optional uint32 GroupId = 1;      //群信息
    optional string Name = 2;         //群信息
}

//MsgId=216 群成员修改别名请求回应
message GroupMemberModifyAliasRes {
    optional int32 ErrorCode = 1;       //详见错误码文档
    optional uint32 GroupId = 2;        //群信息
    optional string Name = 3;           //群信息
}

//MsgId=217 请求用户关联群列表
message QueryUserRelationGroupReq{
}

//MsgId=218 请求用户关联群列表回应
message QueryUserRelationGroupRes {
  optional int32 ErrorCode = 1;       //详见错误码文档
  repeated GroupInfo RelationGroup = 2;
}

//MsgId=219 设置成员校验
message SettingGroupReq{
  optional uint32 GroupId = 1;          //群信息
  optional bool IsOpenMemberCheck = 2; //是否开启群验证
}

//MsgId=220 请求用户关联群列表回应
message SettingGroupRes {
  optional int32 ErrorCode = 1;       //详见错误码文档
  optional uint32 GroupId = 2;        //群信息
}


//MsgId=221 用户二维码加入群请求
message GroupQRcodeAddMemberReq{
  optional uint32 GroupId = 1;        //群信息
}

//MsgId=222 用户二维码加入群请求回应
message GroupQRcodeAddMemberRes {
  optional int32 ErrorCode = 1;       //详见错误码文档
  optional GroupInfo Group = 2;       //群信息
}

//MsgId=223 群主转让请求
message GroupMasterTransReq{
  optional uint32 GroupId = 1;      //群信息
  optional uint32 UserId = 2;       //群信息
}

//MsgId=224 群主转让请求回应
message GroupMasterTransRes{
  optional int32 ErrorCode = 1;       //详见错误码文档
  optional uint32 GroupId = 2;        //群信息
  optional uint32 UserId = 3;         //群信息
}

//MsgId=225 群主校验用户接口
message GroupMasterCheckAddMemberReq{
  optional uint32 GroupId = 1;      //群信息
  repeated uint32 UserIds = 2;      //群信息
}

//MsgId=226 群主校验用户接口
message GroupMasterCheckAddMemberRes{
  optional int32 ErrorCode = 1;      //详见错误码文档
  optional uint32 GroupId = 2;       //群信息
  repeated uint32 UserIds = 3;        //群信息
}

//MsgId=227 消息免打扰
message SetGroupMasterMessageFreeReq{
  optional uint32 GroupId = 1;      //群信息
  optional bool MessageFree = 2;     //消息免打扰
}

//MsgId=228 消息免打扰
message SetGroupMasterMessageFreeRes{
  optional int32 ErrorCode = 1;      //详见错误码文档
  optional uint32 GroupId = 2;      //群信息
  optional bool MessageFree = 3;     //消息免打扰
}


//MsgId=229 消息免打扰
message SetGroupIsShowMenberNiceNameReq{
  optional uint32 GroupId = 1;      //群信息
  optional bool IsShowMenberNiceName = 2;     //消息免打扰
}

//MsgId=230 消息免打扰
message SetGroupIsShowMenberNiceNameRes{
  optional int32 ErrorCode = 1;      //详见错误码文档
  optional uint32 GroupId = 2;      //群信息
  optional bool IsShowMenberNiceName = 3;     //消息免打扰
}