syntax = "proto3";

package bilibili.im.type;

option java_multiple_files = true;

//
message AccountInfo {
  //
  string name = 1;
  //
  string pic_url = 2;
}

//
enum CmdId {
  EN_CMD_ID_INVALID = 0;       //非法cmd

  // msg_svr
  EN_CMD_ID_SEND_MSG = 200001;  // 发消息

  // sync_msg_svr
  EN_CMD_ID_SYNC_MSG = 500001;  // 同步消息
  EN_CMD_ID_SYNC_RELATION = 500002;  // 同步相关链
  EN_CMD_ID_SYNC_ACK = 500003;  // 客户端同步消息完成后，向服务器确认同步进度
  EN_CMD_ID_SYNC_FETCH_SESSION_MSGS = 500006;  // 多端同步版本拉取消息

  // session_svr
  EN_CMD_ID_SESSION_SVR_GET_SESSIONS = 1000001; // 拉会话列表
  EN_CMD_ID_SESSION_SVR_NEW_SESSIONS = 1000002; // 新消息到达时获取会话列表
  EN_CMD_ID_SESSION_SVR_ACK_SESSIONS = 1000003; // 获取已读位置有更新的会话列表
  EN_CMD_ID_SESSION_SVR_UPDATE_ACK = 1000004; // 更新已读进度
  EN_CMD_ID_SESSION_SVR_SET_TOP = 1000005; // 置顶/取消置顶
  EN_CMD_ID_SESSION_SVR_REMOVE_SESSION = 1000007; // 删除会话
  EN_CMD_ID_SESSION_SVR_SINGLE_UNREAD = 1000008; // 单聊未读信息数
  EN_CMD_ID_SESSION_SVR_MY_GROUP_UNREAD = 1000009; // 我创建的应援团未读数
  EN_CMD_ID_SESSION_SVR_UPDATE_UNFLW_READ = 1000010; // 未关注的人批量设置为已读
  EN_CMD_ID_SESSION_SVR_GROUP_ASSIS_MSG = 1000011; // 应援团消息助手
  EN_CMD_ID_SESSION_SVR_ACK_ASSIS_MSG = 1000012; // 更新应援团小助手消息已拉取进度
  EN_CMD_ID_SESSION_SVR_SESSION_DETAIL = 1000015; // 拉会话详情
  EN_CMD_ID_SESSION_SVR_BATCH_SESS_DETAIL = 1000016; // 批量拉会话详情
  EN_CMD_ID_SESSION_SVR_BATCH_RM_SESSIONS = 1000017; // 批量删除会话
}

//
enum ENUM_BIZ_MSG_TYPE {
  BIZ_MSG_TYPE_NORMAL = 0;     //
  BIZ_MSG_TYPE_CARD_VIDEO = 1; //
}

//
message FriendRelation {
  // 用户mid
  uint64 uid = 1;
  // 用户昵称
  string user_name = 2;
  // 头像url
  string face = 3;
  // vip类型
  // 0:无 1:月度大会员 2:年度大会员
  uint32 vip_level = 4;
}

//
message GroupRelation {
  //
  uint64 group_id = 1;
  //
  uint64 owner_uid = 2;
  //
  uint32 group_type = 3;
  //
  uint32 group_level = 4;
  //
  string group_cover = 5;
  //
  string group_name = 6;
  //
  string group_notice = 7;
  //
  int32 status = 8;
  //
  int32 member_role = 9;
  //
  string fans_medal_name = 10;
  //
  uint64 room_id = 11;
}

// 关键词高亮文本
message HighText {
  //
  string title = 1;
  //
  string url = 2;
  // 表示高亮文本应该高亮第几个匹配的文本，ps：比如，“有疑问请联系客服，联系客服时，请说明具体的情况”，一共有2个匹配的文本，要高亮第一个匹配的，则index=1
  uint32 index = 3;
}

//
message ImgInfo {
  //
  string url = 1;
  //
  int32 width = 2;
  //
  int32 height = 3;
  //
  string imageType = 4;
}

// 关键词命中信息
message KeyHitInfos {
  //
  string toast = 1;
  //
  uint32 rule_id = 2;
  //
  repeated HighText high_text = 3;
  //
}

//
message Medal {
  //
  int64 uid = 1;
  //
  int32 medal_id = 2;
  //
  int32 level = 3;
  //
  string medal_name = 4;
  //
  int32 score = 5;
  //
  int32 intimacy = 6;
  //
  int32 master_status = 7;
  //
  int32 is_receive = 8;
  //
  int64 medal_color_start = 9;
  //
  int64 medal_color_end = 10;
  //
  int64 medal_color_border = 11;
  //
  int64 medal_color_name = 12;
  //
  int64 medal_color_level = 13;
  //
  int64 guard_level = 14;
}

//
message Msg {
  // 发送方mid
  uint64 sender_uid = 1;
  // 接收方类型
  RecverType receiver_type = 2;
  // 接收方mid
  uint64 receiver_id = 3;
  // 客户端的序列id,用于服务端去重
  uint64 cli_msg_id = 4;
  // 消息类型
  MsgType msg_type = 5;
  // 消息内容
  string content = 6;
  // 服务端的序列号x
  uint64 msg_seqno = 7;
  // 消息发送时间（服务端时间）
  uint64 timestamp = 8;
  // @用户列表
  repeated uint64 at_uids = 9;
  // 多人消息
  repeated uint64 recver_ids = 10;
  // 消息唯一标示
  uint64 msg_key = 11;
  // 消息状态
  uint32 msg_status = 12;
  // 是否为系统撤销
  bool sys_cancel = 13;
  // 通知码
  string notify_code = 14;
  // 消息来源
  MsgSource msg_source = 15;
  // 如果msg.content有表情字符，则该参数需要置为1
  int32 new_face_version = 16;
  // 命中关键词信息
  KeyHitInfos key_hit_infos = 17;
}

// 消息来源
enum MsgSource {
  EN_MSG_SOURCE_UNKONW = 0;  //
  EN_MSG_SOURCE_IOS = 1;  //
  EN_MSG_SOURCE_ANDRIOD = 2;  //
  EN_MSG_SOURCE_H5 = 3;  //
  EN_MSG_SOURCE_PC = 4;  //
  EN_MSG_SOURCE_BACKSTAGE = 5;  //
  EN_MSG_SOURCE_BIZ = 6;  //
  EN_MSG_SOURCE_WEB = 7;  //
  EN_MSG_SOURCE_AUTOREPLY_BY_FOLLOWED = 8;  //
  EN_MSG_SOURCE_AUTOREPLY_BY_RECEIVE_MSG = 9;  //
  EN_MSG_SOURCE_AUTOREPLY_BY_KEYWORDS = 10; //
  EN_MSG_SOURCE_AUTOREPLY_BY_VOYAGE = 11; //
  EN_MSG_SOURCE_VC_ATTACH_MSG = 12; //
};

// 消息类型
enum MsgType {
  // 基础消息类型
  EN_INVALID_MSG_TYPE = 0;  // 空空的~
  EN_MSG_TYPE_TEXT = 1;  // 文本消息
  EN_MSG_TYPE_PIC = 2;  // 图片消息
  EN_MSG_TYPE_AUDIO = 3;  // 语音消息
  EN_MSG_TYPE_SHARE = 4;  // 分享消息
  EN_MSG_TYPE_DRAW_BACK = 5;  // 撤回消息
  EN_MSG_TYPE_CUSTOM_FACE = 6;  // 自定义表情
  EN_MSG_TYPE_SHARE_V2 = 7;  // 分享v2消息
  EN_MSG_TYPE_SYS_CANCEL = 8;  // 系统撤销
  EN_MSG_TYPE_MINI_PROGRAM = 9;  // 小程序

  // 扩展消息类型
  EN_MSG_TYPE_NOTIFY_MSG = 10; // 业务通知
  EN_MSG_TYPE_VIDEO_CARD = 11; // 视频卡片
  EN_MSG_TYPE_ARTICLE_CARD = 12; // 专栏卡片
  EN_MSG_TYPE_PICTURE_CARD = 13; // 图片卡
  EN_MSG_TYPE_COMMON_SHARE_CARD = 14; // 异形卡
  EN_MSG_TYPE_BIZ_MSG_TYPE = 50; //
  EN_MSG_TYPE_MODIFY_MSG_TYPE = 51; //

  // 功能类系统消息类型
  EN_MSG_TYPE_GROUP_MEMBER_CHANGED = 101; // 群成员变更
  EN_MSG_TYPE_GROUP_STATUS_CHANGED = 102; // 群状态变更
  EN_MSG_TYPE_GROUP_DYNAMIC_CHANGED = 103; // 群动态变更
  EN_MSG_TYPE_GROUP_LIST_CHANGED = 104; // 群列表变更
  EM_MSG_TYPE_FRIEND_LIST_CHANGED = 105; // 好友列表变更
  EN_MSG_TYPE_GROUP_DETAIL_CHANGED = 106; // 群详情发生变化
  EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED = 107; // 群成员角色发生变化
  EN_MSG_TYPE_NOTICE_WATCH_LIST = 108; //
  EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED = 109; // 消息系统，收到新的reply
  EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED = 110; //
  EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED = 111; //
  EN_MSG_TYPE_NOTIFY_NEW_UP_RECIEVED = 112; //
  EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED_V2 = 113; //
  EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED_V2 = 114; //
  EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED_V2 = 115; //
  EN_MSG_TYPE_GROUP_DETAIL_CHANGED_MULTI = 116; // 群详情发生变化,多端同步版本需要即时消息，无需落地
  EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED_MULTI = 117; // 群成员角色发生变化,多端同步版本需要即时消息，无需落地
  EN_MSG_TYPE_NOTIFY_ANTI_DISTURB = 118; //

  // 系统通知栏消息类型
  EN_MSG_TYPE_SYS_GROUP_DISSOLVED = 201; // 群解散
  EN_MSG_TYPE_SYS_GROUP_JOINED = 202; // 入群
  EN_MSG_TYPE_SYS_GROUP_MEMBER_EXITED = 203; // 成员主动退群
  EN_MSG_TYPE_SYS_GROUP_ADMIN_FIRED = 204; // 房管被撤
  EN_MSG_TYPE_SYS_GROUP_MEMBER_KICKED = 205; // 成员被T
  EN_MSG_TYPE_SYS_GROUP_ADMIN_KICK_OFF = 206; // 管理T人
  EN_MSG_TYPE_SYS_GROUP_ADMIN_DUTY = 207; // 管理上任
  EN_MSG_TYPE_SYS_GROUP_AUTO_CREATED = 208; // 自动创建
  EN_MSG_TYPE_SYS_FRIEND_APPLY = 210; // 好友申请
  EN_MSG_TYPE_SYS_FRIEND_APPLY_ACK = 211; // 好友申请通过
  EN_MSG_TYPE_SYS_GROUP_APPLY_FOR_JOINING = 212; // 用户加群申请
  EN_MSG_TYPE_SYS_GROUP_ADMIN_ACCEPTED_USER_APPLY = 213; // 通知管理员,有其他管理员已经同意用户加群

  // 聊天窗口通知消息类型
  EN_MSG_TYPE_CHAT_MEMBER_JOINED = 301; // 入群
  EN_MSG_TYPE_CHAT_MEMBER_EXITED = 302; // 退群
  EN_MSG_TYPE_CHAT_GROUP_FREEZED = 303; // 冻结
  EN_MSG_TYPE_CHAT_GROUP_DISSOLVED = 304; // 解散
  EN_MSG_TYPE_CHAT_GROUP_CREATED = 305; // 开通应援团
  EN_MSG_TYPE_CHAT_POPUP_SESSION = 306; // 弹出会话
}

// 接收方类型
enum RecverType {
  EN_NO_MEANING = 0; //
  EN_RECVER_TYPE_PEER = 1; // 单人
  EN_RECVER_TYPE_GROUP = 2; // 群
  EN_RECVER_TYPE_PEERS = 3; // 多人
}

//
message RelationLog {
  // 操作类型
  RelationLogType log_type = 1;
  // 操作seqno
  uint64 oplog_seqno = 2;
  // 好友信息
  FriendRelation friend_relation = 3;
  // 群信息
  GroupRelation group_relation = 4;
}

//
enum RelationLogType {
  EN_INVALID_LOG_TYPE = 0; //
  EN_ADD_FRIEND = 1; // 添加好友
  EN_REMOVE_FRIEND = 2; // 删除好友
  EN_JOIN_GROUP = 3; // 加入群
  EN_EXIT_GROUP = 4; // 退出群
}

//
enum SESSION_TYPE {
  INVALID_SESSION_TYPE = 0; //
  UN_FOLD_SESSION = 1; //
  UN_FOLLOW_SINGLE_SESSION = 2; //
  MY_GROUP_SESSION = 3; //
  ALL_SESSION = 4; //
}

// 会话详情
message SessionInfo {
  //
  uint64 talker_id = 1;
  //
  uint32 session_type = 2;
  //
  uint64 at_seqno = 3;
  //
  uint64 top_ts = 4;
  //
  string group_name = 5;
  //
  string group_cover = 6;
  //
  uint32 is_follow = 7;
  //
  uint32 is_dnd = 8;
  //
  uint64 ack_seqno = 9;
  //
  uint64 ack_ts = 10;
  //
  uint64 session_ts = 11;
  //
  uint32 unread_count = 12;
  //
  Msg last_msg = 13;
  //
  uint32 group_type = 14;
  //
  uint32 can_fold = 15;
  //
  uint32 status = 16;
  //
  uint64 max_seqno = 17;
  // 会话是否有业务通知
  uint32 new_push_msg = 18;
  // 接收方是否设置接受推送
  uint32 setting = 19;
  //
  uint32 is_guardian = 20;
  //
  int32 is_intercept = 21;
  //
  int32 is_trust = 22;
  //
  int32 system_msg_type = 23;
  //
  AccountInfo account_info = 24;
  //
  int32 live_status = 25;
  //
  int32 biz_msg_unread_count = 26;
  //
  UserLabel user_label = 27;
}

//
message UserLabel {
  //
  int32 label_type = 1;
  //
  Medal medal = 2;
  //
  int32 guardian_relation = 3;
}
