Documentation ¶
Index ¶
- Constants
- Variables
- func MakeWSPacket(operation int, data []byte) []byte
- func ZlibCompress(src []byte) []byte
- func ZlibDeCompress(compressSrc []byte) ([]byte, error)
- type AnchorInfo
- type ApiClient
- type AppStartResult
- type BLiveApp
- type BLiveClient
- type BLiveLongConnection
- type CmdData
- type CommonResponse
- type ConnErrorHandler
- type DanmakuData
- type DanmuHandler
- type DisconnectCallback
- type GameInfo
- type GiftData
- type GiftHandler
- type IApiClient
- type LikeData
- type LikeHandler
- type MedalInfo
- type NewGuardData
- type NewGuardHandler
- type PublicError
- type SuperChatData
- type SuperChatDelData
- type SuperChatDelHandler
- type SuperChatHandler
- type UserInfo
- type WebSocketInfo
- type WsHeader
- type WsPacket
Constants ¶
View Source
const ( UrlAppStart = "/v2/app/start" UrlAppStop = "/v2/app/end" UrlAppHeartBeat = "/v2/app/heartbeat" UrlAppBatchHeartBeat = "/v2/app/batchHeartbeat" )
View Source
const ( CmdDanmu string = "LIVE_OPEN_PLATFORM_DM" CmdGift = "LIVE_OPEN_PLATFORM_SEND_GIFT" CmdSuperChat = "LIVE_OPEN_PLATFORM_SUPER_CHAT" CmdSuperChatDel = "LIVE_OPEN_PLATFORM_SUPER_CHAT_DEL" CmdNewGuard = "LIVE_OPEN_PLATFORM_GUARD" CmdLike = "LIVE_OPEN_PLATFORM_LIKE" )
View Source
const ( // OpHandshake handshake OpHandshake = 0 // OpHandshakeReply handshake reply OpHandshakeReply = 1 // OpHeartbeat heartbeat OpHeartbeat = 2 // OpHeartbeatReply heartbeat reply OpHeartbeatReply = 3 // OpSendMsg send message. OpSendMsg = 4 // OpSendMsgReply send message reply OpSendMsgReply = 5 // OpDisconnectReply disconnect reply OpDisconnectReply = 6 // OpAuth auth connnect OpAuth = 7 // OpAuthReply auth connect reply OpAuthReply = 8 // OpRaw raw message OpRaw = 9 // OpProtoReady proto ready OpProtoReady = 10 // OpProtoFinish proto finish OpProtoFinish = 11 // OpChangeRoom change room OpChangeRoom = 12 // OpChangeRoomReply change room reply OpChangeRoomReply = 13 // OpRegister register operation OpRegister = 14 // OpRegisterReply register operation OpRegisterReply = 15 // OpUnregister unregister operation OpUnregister = 16 // OpUnregisterReply unregister operation reply OpUnregisterReply = 17 // MinBusinessOp min business operation MinBusinessOp = 1000 // MaxBusinessOp max business operation MaxBusinessOp = 10000 )
Variables ¶
View Source
var ( ErrUnknown = NewPublicError(0, "unknown error", "") ErrInvalidParameter = NewPublicError(4000, "参数错误", "请检查必填参数,参数大小限制") ErrInvalidApp = NewPublicError(4001, "应用无效", "请检查header的x-bili-accesskeyid是否为空,或者有效") ErrSignature = NewPublicError(4002, "签名异常", "请检查header的Authorization") ErrExpiredRequest = NewPublicError(4003, "请求过期", "请检查header的x-bili-timestamp") ErrDuplicateRequest = NewPublicError(4004, "重复请求", "请检查header的x-bili-nonce") ErrInvalidSignatureMethod = NewPublicError(4005, "签名method异常", "请检查header的x-bili-signature-method") ErrInvalidVersion = NewPublicError(4006, "版本异常", "请检查header的x-bili-version") ErrIPWhitelist = NewPublicError(4007, "IP白名单限制", "请确认请求服务器是否在报备的白名单内") ErrPermission = NewPublicError(4008, "权限异常", "请确认接口权限") ErrAPILimit = NewPublicError(4009, "接口访问限制", "请确认接口权限及请求频率") ErrNotFound = NewPublicError(4010, "接口不存在", "请确认请求接口url") ErrInvalidContentType = NewPublicError(4011, "Content-Type不为application/json", "请检查header的Content-Type") ErrMD5Validation = NewPublicError(4012, "MD5校验失败", "请检查header的x-bili-content-md5") ErrInvalidAcceptType = NewPublicError(4013, "Accept不为application/json", "请检查header的Accept") ErrService = NewPublicError(5000, "服务异常", "请联系B站对接同学") ErrRequestTimeout = NewPublicError(5001, "请求超时", "请求超时") ErrInternal = NewPublicError(5002, "内部错误", "请联系B站对接同学") ErrConfiguration = NewPublicError(5003, "配置错误", "请联系B站对接同学") ErrRoomWhitelist = NewPublicError(5004, "房间白名单限制", "请联系B站对接同学") ErrRoomBlacklist = NewPublicError(5005, "房间黑名单限制", "请联系B站对接同学") ErrInvalidVerificationCode = NewPublicError(6000, "验证码错误", "验证码校验失败") ErrInvalidPhoneNumber = NewPublicError(6001, "手机号码错误", "检查手机号码") ErrExpiredVerificationCode = NewPublicError(6002, "验证码已过期", "验证码超过规定有效期") ErrVerificationRateLimit = NewPublicError(6003, "验证码频率限制", "检查获取验证码的频率") ErrNotInGame = NewPublicError(7000, "不在游戏内", "当前房间未进行互动游戏") ErrRequestCooldown = NewPublicError(7001, "请求冷却期", "上个游戏正在结算中,建议10秒后进行重试") ErrRoomInGame = NewPublicError(7002, "房间重复游戏", "当前房间正在进行游戏,无法开启下一局互动游戏") ErrExpiredHeartbeat = NewPublicError(7003, "心跳过期", "当前game_id错误或互动游戏已关闭") ErrMaxHeartbeatBatchSize = NewPublicError(7004, "批量心跳超过最大值", "批量心跳单次最大值为200") ErrDuplicateHeartbeatID = NewPublicError(7005, "批量心跳ID重复", "批量心跳game_id存在重复,请检查参数") ErrInvalidIdentityCode = NewPublicError(7007, "身份码错误", "请检查身份码是否正确") ErrNoProjectAccess = NewPublicError(8002, "项目无权限访问", "确认项目ID是否正确") )
View Source
var ApiBase = "https://live-open.biliapi.com"
Functions ¶
func MakeWSPacket ¶
func ZlibCompress ¶
func ZlibDeCompress ¶
Types ¶
type AnchorInfo ¶
type ApiClient ¶
type ApiClient struct {
// contains filtered or unexported fields
}
func NewApiClient ¶
func (*ApiClient) AppStart ¶
func (c *ApiClient) AppStart(code string, appId int64) (*AppStartResult, *PublicError)
func (*ApiClient) HearBeat ¶
func (c *ApiClient) HearBeat(gameId string) *PublicError
type AppStartResult ¶
type AppStartResult struct { GameInfo GameInfo `json:"game_info"` WebSocketInfo WebSocketInfo `json:"websocket_info"` AnchorInfo AnchorInfo `json:"anchor_info"` }
type BLiveApp ¶
func (*BLiveApp) CreateClient ¶
func (app *BLiveApp) CreateClient(code string) *BLiveClient
type BLiveClient ¶
type BLiveClient struct { AppID int64 Code string // 主播身份码 AppInfo *AppStartResult HearbeatInterval time.Duration // contains filtered or unexported fields }
func NewBliveClient ¶ added in v0.0.3
func NewBliveClient(appID int64, code string, client IApiClient) *BLiveClient
func (*BLiveClient) End ¶
func (c *BLiveClient) End() error
func (*BLiveClient) GetLongConn ¶
func (c *BLiveClient) GetLongConn() BLiveLongConnection
func (*BLiveClient) SetLongConn ¶
func (c *BLiveClient) SetLongConn(conn BLiveLongConnection)
func (*BLiveClient) Start ¶
func (c *BLiveClient) Start() error
func (*BLiveClient) Status ¶
func (c *BLiveClient) Status() bool
type BLiveLongConnection ¶
type BLiveLongConnection interface { Status() bool EstablishConnection(ctx context.Context) error CloseConnection() error OnDanmu(handlers ...DanmuHandler) OnGift(handlers ...GiftHandler) OnSuperChat(handlers ...SuperChatHandler) OnSuperChatDel(handlers ...SuperChatDelHandler) OnNewGuard(handlers ...NewGuardHandler) OnLike(handlers ...LikeHandler) OnDisconnect(callback DisconnectCallback) OnError(callback ConnErrorHandler) }
func NewOpenBLiveLongConn ¶
func NewOpenBLiveLongConn( wssInfo WebSocketInfo) BLiveLongConnection
type CmdData ¶
type CmdData struct { Cmd string `json:"cmd"` Data json.RawMessage `json:"data"` }
func (*CmdData) ToDanmu ¶
func (d *CmdData) ToDanmu() DanmakuData
func (*CmdData) ToNewGuard ¶
func (d *CmdData) ToNewGuard() NewGuardData
func (*CmdData) ToSuperChat ¶
func (d *CmdData) ToSuperChat() SuperChatData
func (*CmdData) ToSuperChatDel ¶
func (d *CmdData) ToSuperChatDel() SuperChatDelData
type CommonResponse ¶
type CommonResponse struct { Code int `json:"code"` Message string `json:"message"` Data json.RawMessage `json:"data"` }
type ConnErrorHandler ¶
type ConnErrorHandler func(err error)
type DanmakuData ¶
type DanmakuData struct { RoomID int `json:"room_id"` // 弹幕接收的直播间 UID int `json:"uid"` // 用户UID OpenID string `json:"open_id"` // 用户唯一标识 UName string `json:"uname"` // 用户昵称 Msg string `json:"msg"` // 弹幕内容 MsgID string `json:"msg_id"` // 消息唯一id MedalInfo // 对应房间勋章信息 //FansMedalLevel int `json:"fans_medal_level"` // 对应房间勋章信息 //FansMedalName string `json:"fans_medal_name"` // 粉丝勋章名 //FansMedalWearingStatus bool `json:"fans_medal_wearing_status"` // 该房间粉丝勋章佩戴情况 GuardLevel int `json:"guard_level"` // 对应房间大航海 1总督 2提督 3舰长 Timestamp int64 `json:"timestamp"` // 弹幕发送时间秒级时间戳 UFace string `json:"uface"` // 用户头像 EmojiImgURL string `json:"emoji_img_url"` // 表情包图片地址 DanMuType int `json:"dm_type"` // 弹幕类型 0:普通弹幕 1:表情包弹幕 }
type DanmuHandler ¶
type DanmuHandler func(data DanmakuData)
type DisconnectCallback ¶
type DisconnectCallback func(conn BLiveLongConnection)
type GiftData ¶
type GiftData struct { RoomID int `json:"room_id"` // 直播间 (In auditorium mode, it represents the auditorium live room; otherwise, it represents the gifting live room) UID int `json:"uid"` // 送礼用户 UID OpenID string `json:"open_id"` // 用户唯一标识 UName string `json:"uname"` // 送礼用户昵称 UFace string `json:"uface"` // 送礼用户头像 GiftID int `json:"gift_id"` // 道具 ID (For blind boxes: the ID of the item obtained) GiftName string `json:"gift_name"` // 道具名 (For blind boxes: the name of the item obtained) GiftNum int `json:"gift_num"` // 赠送道具数量 Price int `json:"price"` // 礼物单价 (1000 = 1元 = 10电池); for blind boxes: the value of the obtained item Paid bool `json:"paid"` // 是否是付费道具 MedalInfo //FansMedalLevel int `json:"fans_medal_level"` // 实际收礼人的勋章信息 //FansMedalName string `json:"fans_medal_name"` // 粉丝勋章名 //FansMedalWearingStatus bool `json:"fans_medal_wearing_status"` // 该房间粉丝勋章佩戴情况 GuardLevel int `json:"guard_level"` // room_id 对应的大航海等级 Timestamp int64 `json:"timestamp"` // 收礼时间秒级时间戳 MsgID string `json:"msg_id"` // 消息唯一 ID AnchorInfo UserInfo `json:"anchor_info"` // 收礼主播 GiftIcon string `json:"gift_icon"` // 道具 icon (新增) ComboGift bool `json:"combo_gift"` // 是否是 combo 道具 ComboInfo struct { ComboBaseNum int `json:"combo_base_num"` // 每次连击赠送的道具数量 ComboCount int `json:"combo_count"` // 连击次数 ComboID string `json:"combo_id"` // 连击 ID ComboTimeout int `json:"combo_timeout"` // 连击有效期秒 } `json:"combo_info"` }
type GiftHandler ¶
type GiftHandler func(data GiftData)
type IApiClient ¶ added in v0.0.3
type IApiClient interface { AppStart(code string, appId int64) (*AppStartResult, *PublicError) AppEnd(appId int64, gameId string) *PublicError HearBeat(gameId string) *PublicError }
type LikeData ¶
type LikeData struct { UserInfo Timestamp int64 `json:"timestamp"` // 时间戳 LikeText string `json:"like_text"` // 点赞文本 MedalInfo //FansMedalWearingStatus bool `json:"fans_medal_wearing_status"` // 该房间粉丝勋章佩戴情况 //FansMedalName string `json:"fans_medal_name"` // 粉丝勋章名 //FansMedalLevel int `json:"fans_medal_level"` // 粉丝勋章等级 MsgID string `json:"msg_id"` // 消息唯一 ID RoomID int `json:"room_id"` // 直播间 ID }
type LikeHandler ¶
type LikeHandler func(data LikeData)
type NewGuardData ¶
type NewGuardData struct { UserInfo UserInfo `json:"user_info"` // 用户信息 GuardLevel int `json:"guard_level"` // 对应的大航海等级 1 总督 2 提督 3 舰长 GuardNum int `json:"guard_num"` // 舰长数量 GuardUnit string `json:"guard_unit"` // 舰长数量单位 (个月) MedalInfo // 该房间粉丝勋章 //FansMedalLevel int `json:"fans_medal_level"` // 粉丝勋章等级 //FansMedalName string `json:"fans_medal_name"` // 粉丝勋章名 //FansMedalWearingStatus bool `json:"fans_medal_wearing_status"` // 该房间粉丝勋章佩戴情况 Timestamp int64 `json:"timestamp"` // 时间戳 RoomID int `json:"room_id"` // 直播间 ID MsgID string `json:"msg_id"` // 消息唯一 ID }
type NewGuardHandler ¶
type NewGuardHandler func(data NewGuardData)
type PublicError ¶
type PublicError struct { Code int `json:"code"` Message string `json:"message"` Detail string `json:"-"` }
func GetErrorFromCode ¶
func GetErrorFromCode(errcode int) *PublicError
func NewPublicError ¶
func NewPublicError(code int, msg string, detail string) *PublicError
func (*PublicError) Error ¶
func (e *PublicError) Error() string
func (*PublicError) WithDetail ¶
func (e *PublicError) WithDetail(detail error) *PublicError
type SuperChatData ¶
type SuperChatData struct { RoomID int `json:"room_id"` // 直播间 ID UID int `json:"uid"` // 购买用户 UID OpenID string `json:"open_id"` // 用户唯一标识 UName string `json:"uname"` // 购买的用户昵称 UFace string `json:"uface"` // 购买用户头像 MessageID int `json:"message_id"` // 留言 ID (In case of risk control, this may be used to recall the message) Message string `json:"message"` // 留言内容 MsgID string `json:"msg_id"` // 消息唯一 ID RMB int `json:"rmb"` // 支付金额 (元) Timestamp int64 `json:"timestamp"` // 赠送时间秒级 StartTime int64 `json:"start_time"` // 生效开始时间 EndTime int64 `json:"end_time"` // 生效结束时间 GuardLevel int `json:"guard_level"` // 对应房间大航海等级 (新增) MedalInfo }
type SuperChatDelData ¶
type SuperChatDelHandler ¶
type SuperChatDelHandler func(data SuperChatDelData)
type SuperChatHandler ¶
type SuperChatHandler func(data SuperChatData)
type WebSocketInfo ¶
Source Files ¶
Click to show internal directories.
Click to hide internal directories.