bilibili哔哩哔哩 直播弹幕和礼物获取SDK(非官方)
package main
import (
"log"
"context"
"github.com/zboyco/bililive"
)
func main() {
live := &bililive.Live{
Debug: false, // 不输出日志
AnalysisRoutineNum: 1, // 消息分析协程数量,默认为1,为1可以保证通知顺序与接收到消息顺序相同
StormFilter: true, // 过滤节奏风暴弹幕
Live: func(roomID int) {
log.Println("【直播开始】")
},
End: func(roomID int) {
log.Println("【直播结束】")
},
ReceivePopularValue: func(roomID int, v uint32) {
log.Printf("【直播人气】%v", v)
},
RoomChange: func(roomID int, m *bililive.RoomChangeModel) {
log.Printf("【信息变更】标题:【%s】,分区:【%s-%s】", m.Title, m.ParentAreaName, m.AreaName)
},
RoomRank: func(roomID int, m *bililive.RankModel) {
rankTime := time.Unix(m.Timestamp, 0).Format("2006-01-02 15:04:05")
log.Printf("【小时排名】%s %s", rankTime, m.RankDesc)
},
UserEnter: func(roomID int, m *bililive.UserEnterModel) {
log.Printf("【用户进入】欢迎 %v(%v) 进入直播间", m.UserName, m.UserID)
},
GuardEnter: func(roomID int, m *bililive.GuardEnterModel) {
log.Printf("【舰长进入】欢迎 舰长 - %v(%v) 进入直播间", m.UserName, m.UserID)
},
ReceiveMsg: func(roomID int, msg *bililive.MsgModel) {
log.Printf("【弹幕消息】%v(%v): %v", msg.UserName, time.Unix(msg.Timestamp, 0), msg.Content)
},
ReceiveGift: func(roomID int, gift *bililive.GiftModel) {
coin := "银瓜子"
if gift.CoinType == "gold" {
coin = "金瓜子"
}
log.Printf("【礼物通知】%s: %s(%d) * %d [价值 %d个%s]", gift.UserName, gift.GiftName, gift.GiftID, gift.Num, gift.Price*gift.Num, coin)
},
GiftComboSend: func(roomID int, m *bililive.ComboSendModel) {
log.Printf("【礼物连击】%v 赠送 %v 连击 %v 次", m.UserName, m.GiftName, m.ComboNum)
},
GiftComboEnd: func(roomID int, m *bililive.ComboEndModel) {
log.Printf("【连击结束】%v 赠送 %v(价值%v) 总共连击 %v 次", m.UserName, m.GiftName, m.Price, m.ComboNum)
},
GuardBuy: func(roomID int, m *bililive.GuardBuyModel) {
log.Printf("【用户上船】欢迎 %v - %v(%v) 上船", m.GiftName, m.UserName, m.UserID)
},
FansUpdate: func(roomID int, m *bililive.FansUpdateModel) {
log.Printf("【粉丝更新】当前粉丝数 %d", m.Fans)
},
SpecialGift: func(roomID int, m *bililive.SpecialGiftModel) {
if m.Storm.Action == "start" {
log.Printf("【节奏风暴】开始,id:%d,数量:%d,内容:%s", m.Storm.ID, m.Storm.Num, m.Storm.Content)
}
if m.Storm.Action == "end" {
log.Printf("【节奏风暴】结束,id:%d", m.Storm.ID)
}
},
SuperChatMessage: func(roomID int, m *bililive.SuperChatMessageModel) {
log.Printf("【醒目留言】%s :%s | 价值 %d 元", m.UserInfo.UserName, m.Message, m.Price)
},
}
live.Start(context.Background())
live.Join(roomID1, roomID2)
live.Wait()
}