syntax = "proto3";

package bilibili.broadcast.message.ogv;

// 播放状态
enum PlayStatus {
    // 暂停
    Pause = 0;
    // 播放
    Play = 1;
    // 终止
    End = 2;
}

// 房间类型
enum RoomType {
    // 私密
    Private = 0;
    // 公开
    Open = 1;
}

// 信息通知发送领域
enum MessageDomain {
    // 默认
    DefaultDomain = 0;
    // 房间用户
    RoomMid = 1;
    // 系统通知
    SystemInfo = 2;
}

// 通知信息类型
enum MessageType {
    // 默认
    DefaultType = 0;
    // 房间用户
    ChatMessage = 1;
    // 系统通知
    SystemMessage = 2;
}

// 触发通知类型
enum TriggerType {
    // 默认
    DefaultTrigger = 0;
    // 关注、取消关注
    Relation = 1;
}

// 房间人员变更事件
message RoomMemberChangeEvent {
    // 房间id
    int64 room_id = 1;
    // 房主id
    int64 owner_id = 2;
    // 房间成员列表
    repeated UserInfoProto members = 3;
    // 提示信息
    MessageProto message = 4;
}

// 播放进度同步事件
message ProgressSyncEvent {
    // 房间id
    int64 room_id = 1;
    // 播放中的season_id
    int64 season_id = 2;
    // 播放中的episode_id
    int64 episode_id = 3;
    // 播放状态
    PlayStatus status = 4;
    // 房主播放进度
    int64 progress = 5;
    // 提示信息
    MessageProto message = 6;
}

// 房间状态更新
message RoomUpdateEvent {
    // 房间id
    int64 room_id = 1;
    // 房间变更状态
    RoomType type = 2;
    // 提示信息
    MessageProto message = 3;
}

// 房间销毁通知
message RoomDestroyEvent {
    // 房间id
    int64 room_id = 1;
    // 提示信息
    MessageProto message = 4;
}

// 房间触发通知
message RoomTriggerEvent {
    // 操作人
    int64 mid = 1;
    // 提示信息
    MessageProto message = 2;
    // 触发类型
    TriggerType trigger = 3;
}

//用户信息
message UserInfoProto {
    // 用户id
    int64 mid = 1;
    // 用户头像url
    string face = 2;
    // 昵称
    string nickname = 3;
    // 等级
    int32 level = 4;
    // 签名
    string sign = 5;
    // 大会员信息
    VipProto vip = 6;
    // 身份认证信息
    OfficialProto official = 7;
    // 挂件信息
    PendantProto pendant = 8;
    // 设备buvid
    string buvid = 9;
}

//通知信息
message MessageProto {
    // 可带占位符匹配的消息体 ep "还没有其他小伙伴，[去邀请>]<https://big.bilibili.com/mobile/giftIndex?mid=123>"
    string content = 1;
    // 消息体类型
    // 0:json格式的文本消息 1:支持全文本可点(破冰)
    int32 content_type = 2;
}

//大会员信息
message VipProto {
    int32 type = 1;
    int32 status = 2;
    int64 due_date = 3;
    int32 vip_pay_type = 4;
    int32 theme_type = 5;
    // 大会员角标
    // 0:无角标 1:粉色大会员角标 2:绿色小会员角标
    int32 avatar_subscript = 6;
    // 昵称色值，可能为空，色值示例：#FFFB9E60
    string nickname_color = 7;
}

//认证信息
message OfficialProto {
    int32 role = 1;
    string title = 2;
    string desc = 3;
    int32 type = 4;
}

//挂件信息
message PendantProto {
    int32 pid = 1;
    string name = 2;
    string image = 3;
    int64 expire = 4;
    string image_enhance = 5;
}

// 通用信息通知
message MessageEvent {
    // 房间id
    int64 room_id = 1;
    // 消息id
    int64 msg_id = 2;
    // 消息发送服务端时间 时间戳 单位秒
    int64 ts = 3;
    // 信息通知发送主体id
    int64 oid = 4;
    // 信息通知发送领域
    MessageDomain domain = 5;
    // 通知信息类型
    MessageType type = 6;
    // 提示信息
    MessageProto message = 7;
    // 消息发送用户信息
    UserInfoProto user = 8;
    // 消息id str类型
    string msg_id2 = 9;
}

// 聊天信息清除通知
message RemoveChatEvent {
    // 房间id
    int64 room_id = 1;
    // 撤回的聊天信息id
    int64 msg_id = 2;
    // 提示信息
    MessageProto message = 3;
}

// "一起看"房间事件
message FreyaEventBody {
    // 房间id
    int64 room_id = 1;
    // 接收事件消息的白名单用户
    repeated int64 white_mid = 2;
    // 不处理信息的黑名单用户 优先级低于白名单 当白名单有数据时 忽略黑名单
    repeated int64 ignore_mid = 3;
    //命令类型
    oneof event {
        // 房间人员变更事件
        RoomMemberChangeEvent member_change = 4;
        // 播放进度同步事件
        ProgressSyncEvent progress = 5;
        // 房间状态更新
        RoomUpdateEvent room_update = 6;
        // 通用信息通知
        MessageEvent message = 7;
        // 聊天信息清除通知
        RemoveChatEvent remove_chat = 8;
        // 房间销毁通知
        RoomDestroyEvent room_destroy = 9;
        // 房间触发通知
        RoomTriggerEvent room_trigger = 10;
    }
    // 消息序列号
    int64 sequence_id = 100;
}