syntax = "proto3";

package bilibili.dynamic;

import "bilibili/app/dynamic/v2/dynamic.proto";

// at分组信息
message AtGroup {
    // 分组类型
    AtGroupType group_type = 1;
    // 分组名称
    string group_name = 2;
    // items
    repeated AtItem items = 3;
}

// at分组类型
enum AtGroupType {
    AT_GROUP_TYPE_DEFAULT = 0; // 默认
    AT_GROUP_TYPE_RECENT  = 1; // 最近联系
    AT_GROUP_TYPE_FOLLOW  = 2; // 我的关注（互相关注 > 单向关注）
    AT_GROUP_TYPE_FANS    = 3; // 我的粉丝
    AT_GROUP_TYPE_OTHERS  = 4; // 其他
}

// at返回单条信息
message AtItem {
    // mid
    int64 uid = 1;
    // 昵称
    string name = 2;
    // 头像
    string face = 3;
    // 粉丝数
    int32 fans = 4;
    // 认证信息
    int32 official_verify_type = 5;
}

// at列表-请求
message AtListReq {
    // mid
    int64 uid = 1;
}

// at列表-响应
message AtListRsp {
    // 分组信息
    repeated AtGroup groups = 1;
}

// at搜索-请求
message AtSearchReq {
    // mid
    int64 uid = 1;
    // 关键字
    string keyword = 2;
}

//
enum AttachCardType {
    ATTACH_CARD_NONE              = 0;   // 无
    ATTACH_CARD_GOODS             = 1;   // 商品卡
    ATTACH_CARD_VOTE              = 2;   // 投票卡
    ATTACH_CARD_UGC               = 3;   // ugc视频卡
    ATTACH_CARD_ACTIVITY          = 4;   // 帮推
    ATTACH_CARD_OFFICIAL_ACTIVITY = 5;   // 官方活动
    ATTACH_CARD_TOPIC             = 6;   // 话题活动
    ATTACH_CARD_OGV               = 7;   // OGV
    ATTACH_CARD_AUTO_OGV          = 8;   // OGV自动出卡
    ATTACH_CARD_GAME              = 9;   // 游戏
    ATTACH_CARD_MANGA             = 10;  // 漫画
    ATTACH_CARD_DECORATION        = 11;  // 装扮
    ATTACH_CARD_MATCH             = 12;  // 赛事
    ATTACH_CARD_PUGV              = 13;  // 课程
    ATTACH_CARD_RESERVE           = 14;  // 预约
    ATTACH_CARD_UP_TOPIC          = 15;  // up主话题活动
}

//
message BottomBusiness {
    // 业务方资源id
    int64 rid = 1;
    // 业务方类型，定义在BottomBizType中
    int64 type = 2;
}

//
enum ContentType {
    CONTENT_TYPE_NONE = 0;   // 占位
    TEXT              = 1;   // 文本，简单内容，biz_id就是文本
    AT                = 2;   // @用户，简单内容，biz_id是用户uid
    LOTTERY           = 3;   // 抽奖，简单内容，biz_id是抽奖id
    VOTE              = 4;   // 投票，简单内容，biz_id是投票id
    TOPIC             = 5;   // 话题，简单内容，biz_id是话题id
    GOODS             = 6;   // 商品文字链，复杂内容，定义在GoodsContent结构，biz_id为空
    BV                = 7;   // bv，简单内容，biz_id是bvid，包括"BV1"等内容
    AV                = 8;   // av，简单内容，biz_id是avid
    EMOJI             = 9;   // 表情，简单内容，biz_id为空
    USER              = 10;  // 外露用户，暂未使用
    CV                = 11;  // 专栏，简单内容，biz_id是cvid
    VC                = 12;  // 废弃业务，无用
    WEB               = 13;  // 网址，简单内容，biz_id是网页链接
    TAOBAO            = 14;  // 淘宝内容，暂时不用
    MAIL              = 15;  // 邮箱，简单内容，biz_id是邮箱地址
    OGV_SEASON        = 16;  // 番剧season，简单内容，biz_id是番剧的season_id
    OGV_EP            = 17;  // 番剧ep，简单内容，biz_id是番剧的epid
}

//
message CreateActivity {
    //
    int64 activity_id = 1;
    //
    int32 activity_state = 2;
    //
    int32 is_new_activity = 3;
    //
    int32 action = 4;
}

// 动态附带的附加大卡
message CreateAttachCard {
    // 商品大卡
    CreateGoodsCard goods = 1;
    // 通用附加大卡，目前仅限定Match,Game,Ugc,Pugv,Reserve，且同时只能有一个
    CreateCommonAttachCard common_card = 2;
}

// 发布页预校验-响应
message CreateCheckResp {
    // 发布相关的配置项
    PublishSetting setting = 1;
    // 用户具有的发布权限
    UpPermission permission = 2;
    // 分享渠道信息
    ShareChannel share_info = 3;
    // 小黄条
    PublishYellowBar yellow_bar = 4;
    //
    PlusRedDot plus_red_dot = 5;
}

// 创建动态时附带的通用附加卡详情
message CreateCommonAttachCard {
    // 通用附加卡的类型
    AttachCardType type = 1;
    // 通用附加卡的业务id
    int64 biz_id = 2;
    //
    int32 reserve_source = 3;
    //
    int32 reserve_lottery = 4;
}

// 动态-描述文字模块
message CreateContent {
    // 描述信息（已按高亮拆分）
    repeated CreateContentItem contents = 1;
}

// 文本描述
message CreateContentItem {
    // 原始文案
    string raw_text = 1;
    // 类型
    ContentType type = 2;
    // 简单内容，可能为文字，BVID，AVID，uid等；复杂内容需要单独定义结构体
    string biz_id = 3;
    // 商品内容
    GoodsContent goods = 4;
}

//
message CreateDynVideo {
    // 投稿平台来源，具体写什么@产品
    string relation_from = 1;
    // 1 — 投稿入口 + 相册选择视频 2 — 投稿入口 + 拍摄 3 — 小视频入口 + 相册选择视频 4 — 小视频入口 + 拍摄
    int32 biz_from = 3;
    // 投稿类型:  2-转载、1-自制
    int32 copyright = 4;
    // 是否公开投稿 0允许公开，1不允许公开 默认 0公开
    int32 no_public = 5;
    // 是否允许转载字段 0允许，1不允许，默认为0    copyright = 1 自制的时候默认勾选上no_reprint=1
    int32 no_reprint = 6;
    // 转载的时候必须填写，非空字符串
    string source = 7;
    // 稿件封面必须填写,不能为空 封面不支持其他源站链接 请确保 cover 是 先经过上传接口
    string cover = 8;
    // 稿件标题
    string title = 9;
    // 稿件分区ID 必须是有效的二级分区ID
    int64 tid = 10;
    // 标签 多个标签请使用英文逗号连接
    string tag = 11;
    // 稿件描述
    string desc = 12;
    // 当前输入环境下有，就输入http://domain/x/app/archive/desc/format返回的desc_format值
    // 如果返回null就输入默认为0， 表示当前环境（分区+投稿类型）不参与简介格式化
    int64 desc_format_id = 13;
    // 稿件是否开启充电面板，1为是, 0为否
    int32 open_elec = 14;
    // 定时发布的时间
    int32 dtime = 15;
    // 分P聚合字段
    repeated DynVideoMultiP videos = 16;
    // 水印信息
    DynVideoWatermark watermark = 17;
    // 新增加通过tag来参加活动
    int64 mission_id = 18;
    // 新增加可以添加动态内容
    string dynamic = 19;
    // 序列化后的extend_info扩展信息
    string dynamic_extension = 20;
    // 客户端控制字段
    string dynamic_ctrl = 21;
    // 动态来源
    string dynamic_from = 22;
    // 抽奖服务生成的ID
    int64 lottery_id = 23;
    //
    DynVideoVote vote = 24;
    // 精选评论开关, true为开
    bool up_selection_reply = 25;
    // up主关闭评论
    bool up_close_reply = 26;
    // up主关闭弹幕
    bool up_close_danmu = 27;
    // 稿件投稿来源
    int64 up_from = 28;
    //
    int64 duration = 29;
}

// 创建动态视频的应答包（透传给客户端）
message CreateDynVideoResult {
    // 稿件id
    int64 aid = 1;
    // 说明信息
    string message = 2;
    // 推荐的活动信息
    DynVideoSubmitActBanner submitact_banner = 3;
    //
    DynVideoPushIntro push_intro = 4;
}

// 创建动态时附带的商品大卡详情
message CreateGoodsCard {
    // 商品大卡中的商品id
    repeated string item_id = 1;
}

// 发布页预校验场景
enum CreateInitCheckScene {
    CREATE_INIT_CHECK_SCENE_INVALID       = 0; //
    CREATE_INIT_CHECK_SCENE_NORMAL        = 1; // 动态页面右上角点击进入发布页
    CREATE_INIT_CHECK_SCENE_REPOST        = 2; // 动态feed流转发、三点分享，动态详情页转发
    CREATE_INIT_CHECK_SCENE_SHARE         = 3; // 其他页面分享到动态
    CREATE_INIT_CHECK_SCENE_RESERVE_SHARE = 4; //
}

// 动态创建时的特殊选项
message CreateOption {
    // 评论区展示UP自己精选的评论
    int32 up_choose_comment = 1;
    // 初始评论区是关闭状态
    int32 close_comment = 2;
    // 该动态不会被折叠
    // 目前仅抽奖开奖动态不会被折叠
    int32 fold_exclude = 3;
    // 审核等级，仅服务端发布时有效
    // 100：自动过审
    // 非100：默认的内网审核
    // 默认为0
    int32 audit_level = 4;
    // 根据转发内容同步生成一条源动态/资源的评论
    // 仅转发和分享时有效
    int32 sync_to_comment = 5;
    //
    VideoShareInfo video_share_info = 6;
    //
    CreateActivity activity = 7;
}

// 创建图文动态时的图片信息
message CreatePic {
    // 上传图片URL
    string img_src = 1;
    // 图片宽度
    double img_width = 2;
    // 图片高度
    double img_height = 3;
    // 图片大小，单位KB
    double img_size = 4;
    //
    repeated CreatePicTag img_tags = 5;
}

//
message CreatePicTag {
    //
    int64 item_id = 1;
    //
    int64 tid = 2;
    //
    int64 mid = 3;
    //
    string text = 4;
    //
    string text_string = 5;
    //
    int64 type = 6;
    //
    int64 source_type = 7;
    //
    string url = 8;
    //
    string schema_url = 9;
    //
    string jump_url = 10;
    //
    int64 orientation = 11;
    //
    int64 x = 12;
    //
    int64 y = 13;
    //
    string poi = 14;
}

// 创建动态-响应
message CreateResp {
    // 动态id
    int64 dyn_id = 1;
    // 动态id str
    string dyn_id_str = 2;
    // 动态的类型
    int64 dyn_type = 3;
    // 动态id
    int64 dyn_rid = 4;
    // 假卡
    bilibili.app.dynamic.v2.DynamicItem fake_card = 5;
    // 视频
    CreateDynVideoResult video_result = 6;
}

// 发布类型（场景）
enum CreateScene {
    CREATE_SCENE_INVALID               = 0;  //
    CREATE_SCENE_CREATE_WORD           = 1;  // 发布纯文字动态
    CREATE_SCENE_CREATE_DRAW           = 2;  // 发布图文动态
    CREATE_SCENE_CREATE_DYN_VIDEO      = 3;  // 发布动态视频
    CREATE_SCENE_REPOST                = 4;  // 转发动态
    CREATE_SCENE_SHARE_BIZ             = 5;  // 分享业务方资源
    CREATE_SCENE_SHARE_PAGE            = 6;  // 分享网页（通用模板）
    CREATE_SCENE_SHARE_PROGRAM         = 7;  // 分享小程序
    CREATE_SCENE_REPLY_SYNC            = 8;  // 评论同步到动态
    CREATE_SCENE_REPLY_CREATE_ACTIVITY = 9;  // 评论同步到动态并且发起活动
}

// 动态附带的小卡
message CreateTag {
    // lbs小卡
    ExtLbs lbs = 1;
    // 游戏通过SDK发布的动态需要带上游戏小卡
    BottomBusiness sdk_game = 2;
    // 必剪发布的动态需要带上必剪小卡
    BottomBusiness diversion = 3;
}

//
message CreateTopic {
    //
    int64 id = 1;
    //
    string name = 2;
}

// 动态的标识
message DynIdentity {
    // 动态id
    int64 dyn_id = 1;
    // 动态反向id，通过(type+rid组合)也可以唯一标识一个动态，与dyn_id出现任意一个即可
    DynRevsId revs_id = 2;
}

//
message DynRevsId {
    // 动态类型
    int64 dyn_type = 1;
    // 业务id
    int64 rid = 2;
}

// 动态视频分P视频编辑环境上报信息
message DynVideoEditor {
    //
    int64 cid = 1;
    //
    int32 upfrom = 2;
    // 滤镜
    string filters = 3;
    // 字体
    string fonts = 4;
    // 字幕
    string subtitles = 5;
    // bgm
    string bgms = 6;
    // 3d拍摄贴纸
    string stickers = 7;
    // 2d投稿贴纸
    string videoup_stickers = 8;
    // 视频转场特效
    string trans = 9;
    // 编辑器的主题使用相关
    string makeups = 10;
    // 整容之外科手术
    string surgerys = 11;
    // 美摄特定的videofx
    string videofxs = 12;
    // 编辑器的主题使用相关
    string themes = 13;
    // 拍摄之稿件合拍
    string cooperates = 14;
    // 拍摄之音乐卡点视频
    string rhythms = 15;
    // mvp特效
    string effects = 16;
    // mvp背景
    string backgrounds = 17;
    // mvp视频
    string videos = 18;
    // mvp音效
    string sounds = 19;
    // mvp花字
    string flowers = 20;
    // mvp封面模板
    string cover_templates = 21;
    // tts
    string tts = 22;
    // openings
    string openings = 23;
    // 录音题词
    bool record_text = 24;
    // 虚拟形象上报
    string vupers = 25;
    //
    string features = 26;
    //
    string bcut_features = 27;
    //
    int32 audio_record = 28;
    //
    int32 camera = 29;
    //
    int32 speed = 30;
    //
    int32 camera_rotate = 31;
    //
    int32 screen_record = 32;
    //
    int32 default_end = 33;
    //
    int32 duration = 34;
    //
    int32 pic_count = 35;
    //
    int32 video_count = 36;
    //
    int32 shot_duration = 37;
    //
    string shot_game = 38;
    //
    bool highlight = 39;
    //
    int32 highlight_cnt = 40;
    //
    int32 pip_count = 41;
}

//
message DynVideoHotAct {
    //
    int64 act_id = 1;
    //
    int64 etime = 2;
    //
    int64 id = 3;
    //
    string pic = 4;
    //
    int64 stime = 5;
    //
    string title = 6;
    //
    string link = 7;
}

// 动态视频分P聚合字段
message DynVideoMultiP {
    // 分P标题
    string title = 1;
    // 分P的文件名
    string filename = 2;
    //
    int64 cid = 3;
    // 编辑环境上报信息
    DynVideoEditor editor = 4;
}

//
message DynVideoPushIntro {
    //
    int32 show = 1;
    //
    string text = 2;
}

//
message DynVideoSubmitActBanner {
    //
    string hotact_text = 1;
    //
    string hotact_url = 2;
    //
    repeated DynVideoHotAct list = 3;
}

//
message DynVideoVote {
    //
    int64 vote_id = 1;
    //
    string vote_title = 2;
    //
    int32 top_for_reply = 3;
}

// 动态视频水印信息
message DynVideoWatermark {
    // 水印状态 
    // 0-关闭 1-打开 2-预览
    int32 state = 1;
    // 类型
    // 1-用户昵称类型 2-用户id类型 3-用户名在logo下面
    int32 type = 2;
    // 位置
    // 1-左上 2-右上 3-左下 4-右下
    int32 position = 3;
}

//
message ExtLbs {
    //
    string address = 1;
    //
    int64 distance = 2;
    //
    int64 type = 3;
    //
    string poi = 4;
    //
    LbsLoc location = 5;
    //
    string show_title = 6;
    //
    string title = 7;
    //
    string show_distance = 8;
}

// 根据name取uid-请求
message GetUidByNameReq {
    // 查询昵称列表
    repeated string names = 1;
}

// 根据name取uid-响应
message GetUidByNameRsp {
    // k:昵称 v:mid
    map<string, int64> uids = 1;
}

// 发布时附带的商品卡的详细内容
message GoodsContent {
    // 商品类型
    // 1淘宝、2会员购
    int32 source_type = 1;
    // 商品的id
    int64 item_id = 2;
    // 店铺的id，兼容老版本
    int64 shop_id = 3;
}

// UP已经创建的活动列表
message LaunchedActivity {
    // 模块名称，示例："已创建的活动"
    string module_title = 1;
    // 已创建的活动列表
    repeated LaunchedActivityItem activities = 2;
    // 展示更多按钮
    // 已创建活动大于5个时下发
    ShowMoreLaunchedActivity show_more = 3;
}

// UP已经创建的活动详情
message LaunchedActivityItem {
    // 活动id
    int64 activity_id = 1;
    // 活动名称
    string activity_name = 2;
    // 活动是否已上线
    // 0未上线 1已上线
    int32 activity_state = 3;
}

//
message LbsLoc {
    // 经度
    double lat = 1;
    // 纬度
    double lng = 2;
}

//
message MetaDataCtrl {
    // 客户端平台
    string platform = 1;
    // 客户端build号
    string build = 2;
    // 客户端移动设备类型
    string mobi_app = 3;
    // 客户端buvid
    string buvid = 4;
    // 用户设备信息
    string device = 5;
    // 请求来源页面的spmid
    string from_spmid = 6;
    // 请求来源页面
    string from = 7;
    // 请求的trace_id
    string trace_id = 8;
    // 青少年模式
    int32 teenager_mode = 9;
    // 0:正常 1:冷启动
    int32 cold_start = 10;
    // 客户端版本号
    string version = 11;
    // 网络状态
    // Unknown=0 WIFI=1 WWAN=2
    int32 network = 12;
    // 用户ip地址
    string ip = 13;
}

//
message PlusRedDot {
    //
    int64 plus_has_red_dot = 1;
}

// 小程序内容定义
message Program {
    // 标题
    string title = 1;
    // 描述文字
    string desc = 2;
    // 封面图
    string cover = 3;
    // 跳转链接
    string target_url = 4;
    // 小程序icon
    string icon = 5;
    // 小程序名称
    string program_text = 6;
    // 跳转链接文案，如：去看看
    string jump_text = 7;
}

// 发布相关的设置项
message PublishSetting {
    // 提示转为专栏的最小字数，使用utf-16编码计算字符数
    int32 min_words_to_article = 1;
    // 提示转为专栏的最大字数，使用utf-16编码计算字符数
    int32 max_words_to_article = 2;
    // gif上传的最大值，单位：MB
    int32 upload_size = 3;
}

// 发布页小黄条
message PublishYellowBar {
    // 展示文案
    string text = 1;
    // 跳转链接
    string url = 2;
    // 展示图标
    string icon = 3;
}

//
message RepostInitCheck {
    //
    DynIdentity repost_src = 1;
    //
    string share_id = 2;
    //
    int32 share_mode = 3;
}

//
enum ReserveSource {
    RESERVE_SOURCE_NEW        = 0; //
    RESERVE_SOURCE_ASSOCIATED = 1; //
}

// 分享渠道信息
message ShareChannel {
    // 业务类型，如动态是"dynamic"
    string share_origin = 1;
    // 业务资源id
    string oid = 2;
    // 辅助id, 非必返回字段
    string sid = 3;
    // 渠道列表
    repeated ShareChannelItem share_channels = 4;
}

// 渠道
message ShareChannelItem {
    // 展示文案
    string name = 1;
    // 展示图标
    string picture = 2;
    // 渠道名称
    string share_channel = 3;
    // 预约卡分享图信息，仅分享有预约信息的动态时存在
    ShareReserve reserve = 4;
}

//
message ShareReserve {
    // 标题
    string title = 1;
    // 描述（时间+类型）
    string desc = 2;
    // 二维码附带icon
    string qr_code_icon = 3;
    // 二维码附带文本
    string qr_code_text = 4;
    // 二维码链接
    string qr_code_url = 5;
    //
    string name = 6;
    //
    string face = 7;
    //
    ShareReservePoster poster = 8;
    //
    ShareReserveLottery reserve_lottery = 9;
}

//
message ShareReserveLottery {
    //
    string icon = 1;
    //
    string text = 2;
}

//
message ShareReservePoster {
    //
    string url = 1;
    //
    double width = 2;
    //
    double height = 3;
}

//
message ShareResult {
    //
    int64 share_enable = 1;
    //
    string toast = 2;
}

// UP已经创建的活动列表中的展示更多按钮详情
message ShowMoreLaunchedActivity {
    // 按钮的文案
    string button_text = 1;
    // 按钮的跳转链接
    string jump_url = 2;
}

// 通用模板的网页元内容(sketch结构)定义
message Sketch {
    // 元内容标题，长度30限制
    string title = 1;
    // 描述文字（文本内容第二行），长度233限制
    string desc_text = 2;
    // 文本文字（文本内容第三行），仅限竖图通用卡片使用，长度233限制
    string text = 3;
    // 表示业务方的id表示，对于在业务方有唯一标示的必填
    int64 biz_id = 4;
    // 业务类型，与展示时的右上角标有关，需要业务方向动态申请
    int64 biz_type = 5;
    // 封面图片链接地址，域名需要符合白名单
    string cover_url = 6;
    // 跳转链接地址，域名需要符合白名单
    string target_url = 7;
}

// 发布相关的权限内容
message UpPermission {
    // 通用权限列表
    repeated UpPermissionItem items = 1;
    // 已经创建的活动列表
    LaunchedActivity launched_activity = 2;
    //
    ShareResult share_result = 3;
}

// 通用发布权限内容的详细定义
message UpPermissionItem {
    // 类型，enum UpPermissionType
    int32 type = 1;
    // UP是否有权限
    // 1-有，2-限制（展示但不可点，仅预约使用）
    int32 permission = 2;
    // 按钮文案
    string title = 3;
    // 功能开关的副标题
    string subtitle = 4;
    // 按钮图标的url地址
    string icon = 5;
    // 跳转链接，permission=1时点击按钮跳到此链接
    string jump_url = 6;
    // 错误提示，permission=2时点击按钮会弹出此提示，目前仅预约使用
    string toast = 7;
    //
    int64 has_red_dot = 8;
}

//
enum UpPermissionType {
    UP_PERMISSION_TYPE_NONE              = 0;  // 占位
    UP_PERMISSION_TYPE_LOTTERY           = 1;  // 是否是抽奖的灰度用户，默认不是
    UP_PERMISSION_TYPE_CLIP_PUBLISHED    = 2;  // 之前是否发过小视频，默认没发过
    UP_PERMISSION_TYPE_UGC_ATTACH_CARD   = 3;  // 是否可以添加ugc附加卡，默认不可以
    UP_PERMISSION_TYPE_GOODS_ATTACH_CARD = 4;  // 是否有权限添加商品附加卡
    UP_PERMISSION_TYPE_CHOOSE_COMMENT    = 5;  // 是否有权限自主精选评论白名单，默认没有
    UP_PERMISSION_TYPE_CONTROL_COMMENT   = 6;  // 是否有权限关闭评论区，默认有
    UP_PERMISSION_TYPE_CONTROL_DANMU     = 7;  // 是否有权限关闭弹幕（仅对动态视频生效），默认有
    UP_PERMISSION_TYPE_VIDEO_RESERVE     = 8;  // 是否可以发起稿件预约
    UP_PERMISSION_TYPE_LIVE_RESERVE      = 9;  // 是否可以发起直播预约
}

// 用户主动发布（app/web发布）时的meta信息
message UserCreateMeta {
    // 用户发布客户端的meta信息
    MetaDataCtrl app_meta = 1;
    // 用户发布时的位置信息（经纬度）
    LbsLoc loc = 2;
    // 1-发布页转发 2-立即转发
    int32 repost_mode = 3;
}

//
message VideoShareInfo {
    //
    int64 cid = 1;
    //
    int32 part = 2;
}
