package douyu // 弹幕服务器端相应消息类型 const ( // TypeLoginRes 登录响应消息 字段说明 // type 表示为“登出”消息,固定为 loginres // userid 用户 ID // roomgroup 房间权限组 // pg 平台权限组 // sessionid 会话 ID // username 用户名 // nickname 用户昵称 // live_stat 直播状态 // is_illegal 是否合规 // is_signed 是否已在房间签到 // signed_count 日总签到次数 // npv 是否需要手机验证 // best_dlev 最高酬勤等级 // cur_lev 酬勤等级 TypeLoginRes = "loginres" // TypeNewGift 赠送礼物消息 // 用户在房间赠送礼物时,服务端发送此消息给客户端。完整的数据部分应包含的 字段如下: // 字段说明 // type 表示为“赠送礼物”消息,固定为 dgb // rid 房间 ID // gid 弹幕分组 ID // gfid 礼物 id // gs 礼物显示样式 // uid 用户 id // nn 用户昵称 // str 用户战斗力 // level 用户等级 // dw 主播体重 // gfcnt 礼物个数:默认值 1(表示 1 个礼物) // hits 礼物连击次数:默认值 1(表示 1 连击) // dlv 酬勤头衔:默认值 0(表示没有酬勤) // dc 酬勤个数:默认值 0(表示没有酬勤数量) // bdl 全站最高酬勤等级:默认值 0(表示全站都没有酬勤) // rg 房间身份组:默认值 1(表示普通权限用户) // pg 平台身份组:默认值 1(表示普通权限用户) // rpid 红包 id:默认值 0(表示没有红包) // slt 红包开启剩余时间:默认值 0(表示没有红包) // elt 红包销毁剩余时间:默认值 0(表示没有红包) TypeNewGift = "dgb" // TypeUserEnter 特殊用户进房通知消息 // 具有特殊属性的用户进入直播间时,服务端发送此消息至客户端。完整的数据部 分应包含的字段如下: // 字段说明 // type 表示为“用户进房通知”消息,固定为 uenter // rid 房间 ID // gid 弹幕分组 ID // uid 用户 ID // nn 用户昵称 // str 战斗力 // level 新用户等级 // gt 礼物头衔:默认值 0(表示没有头衔) // rg 房间权限组:默认值 1(表示普通权限用户) // pg 平台身份组:默认值 1(表示普通权限用户) // dlv 酬勤等级:默认值 0(表示没有酬勤) // dc 酬勤数量:默认值 0(表示没有酬勤数量) // bdlv 最高酬勤等级:默认值 0(表示全站都没有酬勤) TypeUserEnter = "uenter" // TypeNewDeserve 用户赠送酬勤通知消息 // 用户赠送酬勤时,服务端发送此消息至客户端。完整的数据部分应包含的字段如 下: // 字段说明 // type 表示为“赠送酬勤通知”消息,固定为 bc_buy_deserve // rid 房间 ID // gid 弹幕分组 ID // level 用户等级 // cnt 赠送数量 // hits 赠送连击次数 // lev 酬勤等级 // sui 用户信息序列化字符串,详见下文。注意,此处为嵌套序列化,需注 意符号的转义变换。(转义符号参见 2.2 序列化) TypeNewDeserve = "bc_buy_deserve" // TypeLiveStatusChange 房间开关播提醒消息 // 房间开播提醒主要部分应包含的字段如下: // 字段说明 // type 表示为“房间开播提醒”消息,固定为 rss // rid 房间 id // gid 弹幕分组 id // ss 直播状态,0-没有直播,1-正在直播 // code 类型 // rt 开关播原因:0-主播开关播,其他值-其他原因 // notify 通知类型 // endtime 关播时间(仅关播时有效) TypeLiveStatusChange = "rss" TypeRankList = "ranklist" // 广播排行榜消息 // TypeMsgToAll 超级弹幕消息(如,火箭弹幕) // 超级弹幕主要部分应包含的字段如下: // 字段说明 // type 表示为“超级弹幕”消息,固定为 ssd // rid 房间 id // gid 弹幕分组 id // sdid 超级弹幕 id // trid 跳转房间 id // content 超级弹幕的内容 TypeMsgToAll = "ssd" // TypeMsgToRoom 房间内礼物广播 // 房间内赠送礼物成功后效果主要部分应包含的字段如下: // 字段说明 // type 表示为“房间内礼物广播”,固定为 spbc // rid 房间 id // gid 弹幕分组 id // sn 赠送者昵称 // dn 受赠者昵称 // gn 礼物名称 // gc 礼物数量 // drid 赠送房间 // gs 广播样式 // gb 是否有礼包(0-无礼包,1-有礼包) // es 广播展现样式(1-火箭,2-飞机) // gfid 礼物 id // eid 特效 id TypeMsgToRoom = "spbc" // TypeNewRedPacket 房间用户抢红包 // 房间赠送礼物成功后效果(赠送礼物效果,连击数)主要部分应包含的字段如下: // 字段说明 // type 表示“房间用户抢红包”信息,固定为 ggbb // rid 房间 id // gid 弹幕分组 id // sl 抢到的鱼丸数量 // sid 礼包产生者 id // did 抢礼包者 id // snk 礼包产生者昵称 // dnk 抢礼包者昵称 // rpt 礼包类型 TypeNewRedPacket = "ggbb" // TypeRoomRankChange 房间内top10变化消息 // 房间内 top10 排行榜变化后,广播。主要部分应包含的字段如下: // 字段说明 // type 表示为“房间 top10 排行榜变换”,固定为 rankup // rid 房间 id // gid 弹幕分组 id // uid 用户 id // drid 目标房间 id // rt 房间所属栏目类型 // bt 广播类型:1-房间内广播,2-栏目广播,4-全站广播 // sz 展示区域:1-聊天区展示,2-flash 展示,3-都显示 // nk 用户昵称 // rkt top10 榜的类型 1-周榜 2-总榜 4-日榜 // rn 上升后的排名 TypeRoomRankChange = "rankup" ) // 消息体类型 const ( TypeMessageToServer uint16 = 689 TypeMessageFromServer = 690 ) const EndCharacter byte = 0 // TagName 序列化tag const TagName = "stt" type TypedData interface { DataType() string } // WsEntry douyu websocket 结构 小端序 type WsEntry struct { // 消息正文 斗鱼STT协议 外部使用工具将 struct 转 map // 键 key 和值 value 直接采用‘@=’分割 // 数组采用‘/’分割 // 如果 key 或者 value 中含有字符‘/’,则使用‘@S’转义 // 如果 key 或者 value 中含有字符‘@’,使用‘@A’转义举例: // (1) 多个键值对数据:key1@=value1/key2@=value2/key3@=value3/ // (2) 数组数据:value1/value2/value3/ data []byte dataType string // msgType 消息类型,2字节小端整数,表示消息类型。取值如下: // 689 客户端发送给弹幕服务器的文本格式数据 // 690 弹幕服务器发送给客户端的文本格式数据。 msgType uint16 secret byte // 加密字段,1字节,暂时未用,默认为0 reserved byte // 保留字段,1字节,暂时未用,默认为0 //ending byte // 结尾字段,1字节 必须'\0' }