syntax = "proto3";

package bilibili.im.type;

//
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 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_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;
}
