func (i *api) Get_live(qn ...string) (o *api) {
o = i
- apilog := apilog.Base_add(`获取直播流`)
+ apilog := apilog.Base_add(`直播流信息`)
if o.Roomid == 0 {
apilog.L(`E: `,"还未New_api")
}
}
-func (i *api) CheckSwitch_FansMedal() {
+//牌子
+type TGet_list_in_room struct{
+ Medal_id int `json:"medal_id"`//牌子id
+ Medal_name string `json:"medal_name"`//牌子名
+ Target_id int `json:"target_id"`//牌子up主uid
+ Target_name string `json:"target_name"`//牌子up主名
+ Room_id int `json:"room_id"`//牌子直播间
+ Today_intimacy int `json:"today_intimacy"`//今日亲密(0:未发送弹幕 100:已发送弹幕)
+ Is_lighted int `json:"is_lighted"`//牌子是否熄灭(0:熄灭 1:亮)
+}
+//获取牌子信息
+func Get_list_in_room() (array []TGet_list_in_room) {
if api_limit.TO() {return}//超额请求阻塞,超时将取消
- apilog := apilog.Base_add(`切换粉丝牌`)
+ apilog := apilog.Base_add(`获取牌子`)
//验证cookie
if missKey := CookieCheck([]string{
`bili_jct`,
apilog.L(`T: `,`Cookie无Key:`,missKey)
return
}
-
Cookie := make(map[string]string)
c.Cookie.Range(func(k,v interface{})(bool){
Cookie[k.(string)] = v.(string)
return true
})
- {//获取当前牌子,验证是否本直播间牌子
+
+ {//获取牌子列表
r := p.Req()
if e := r.Reqf(p.Rval{
- Url:`https://api.live.bilibili.com/live_user/v1/UserInfo/get_weared_medal`,
+ Url:`https://api.live.bilibili.com/fans_medal/v1/FansMedal/get_list_in_room`,
Header:map[string]string{
`Cookie`:p.Map_2_Cookies_String(Cookie),
},
apilog.L(`E: `,e)
return
}
+
var res struct{
Code int `json:"code"`
- Msg string `json:"msg"`
- Message string `json:"message"`
- Data struct{
- Roominfo struct{
- Room_id int `json:"room_id"`
- } `json:"roominfo"`
- } `json:"data"`
+ Msg string `json:"msg"`
+ Message string `json:"message"`
+ Data []TGet_list_in_room `json:"data"`
}
- if e := json.Unmarshal(r.Respon, &res);e != nil && res.Msg == ``{//未佩戴时的data是array型会导致错误
+
+ if e := json.Unmarshal(r.Respon, &res);e != nil{
apilog.L(`E: `,e)
- return
}
-
- c.Wearing_FansMedal = res.Data.Roominfo.Room_id//更新佩戴信息
- if res.Data.Roominfo.Room_id == c.Roomid {
+
+ if res.Code != 0 {
+ apilog.L(`E: `,`返回code`, res.Code, res.Msg)
return
}
+
+ return res.Data
}
- var medal_id int
- {//获取牌子列表
+}
+
+type TGet_weared_medal struct{
+ Medal_id int `json:"medal_id"`//牌子id
+ Medal_name string `json:"medal_name"`//牌子名
+ Target_id int `json:"target_id"`//牌子up主uid
+ Target_name string `json:"target_name"`//牌子up主名
+ Roominfo Roominfo `json:"roominfo"`//牌子直播间
+ Today_intimacy int `json:"today_intimacy"`//今日亲密(0:未发送弹幕 100:已发送弹幕)
+ Is_lighted int `json:"is_lighted"`//牌子是否熄灭(0:熄灭 1:亮)
+}
+type Roominfo struct{
+ Room_id int `json:"room_id"`
+}
+//获取当前佩戴的牌子
+func Get_weared_medal() (item TGet_weared_medal) {
+ if api_limit.TO() {return}//超额请求阻塞,超时将取消
+ apilog := apilog.Base_add(`获取牌子`)
+ //验证cookie
+ if missKey := CookieCheck([]string{
+ `bili_jct`,
+ `DedeUserID`,
+ `LIVE_BUVID`,
+ });len(missKey) != 0 {
+ apilog.L(`T: `,`Cookie无Key:`,missKey)
+ return
+ }
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
+ {//获取
r := p.Req()
if e := r.Reqf(p.Rval{
- Url:`https://api.live.bilibili.com/fans_medal/v1/FansMedal/get_list_in_room`,
+ Url:`https://api.live.bilibili.com/live_user/v1/UserInfo/get_weared_medal`,
Header:map[string]string{
`Cookie`:p.Map_2_Cookies_String(Cookie),
},
apilog.L(`E: `,e)
return
}
- res := string(r.Respon)
- if v,ok := p.Json().GetValFromS(res, "code").(float64);!ok || v != 0 {
- apilog.L(`E: `,`Get_FansMedal get_list_in_room code`, v)
+
+ var res struct{
+ Code int `json:"code"`
+ Msg string `json:"msg"`
+ Message string `json:"message"`
+ Data TGet_weared_medal `json:"data"`
+ }
+ if e := json.Unmarshal(r.Respon, &res);e != nil && res.Msg == ``{//未佩戴时的data是array型会导致错误
+ apilog.L(`E: `,e)
+ return
+ }
+
+ if res.Code != 0 {
+ apilog.L(`E: `,`返回code`, res.Code, res.Msg)
return
- } else {
- if v,ok := p.Json().GetValFromS(res, "data").([]interface{});ok{
- for _,item := range v {
- if room_id,ok := p.Json().GetValFrom(item, "room_id").(float64);!ok || int(room_id) != c.Roomid {
- continue
- } else {
- if tmp_medal_id,ok := p.Json().GetValFrom(item, "medal_id").(float64);!ok {
- apilog.L(`E: `,`medal_id error`)
- return
- } else {
- medal_id = int(tmp_medal_id)
- break
- }
- }
- }
- } else {
- apilog.L(`E: `,`data error`)
- return
- }
}
+ return res.Data
+ }
+
+}
+
+func (i *api) CheckSwitch_FansMedal() {
+ if api_limit.TO() {return}//超额请求阻塞,超时将取消
+ apilog := apilog.Base_add(`切换粉丝牌`)
+ //验证cookie
+ if missKey := CookieCheck([]string{
+ `bili_jct`,
+ `DedeUserID`,
+ `LIVE_BUVID`,
+ });len(missKey) != 0 {
+ apilog.L(`T: `,`Cookie无Key:`,missKey)
+ return
+ }
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+ {//获取当前牌子,验证是否本直播间牌子
+ res := Get_weared_medal()
+
+ c.Wearing_FansMedal = res.Roominfo.Room_id//更新佩戴信息
+ if res.Roominfo.Room_id == c.Roomid {return}
+ }
+
+ var medal_id int//将要使用的牌子id
+ //检查是否有此直播间的牌子
+ {
+ medal_list := Get_list_in_room()
+ for _,v := range medal_list {
+ if v.Room_id != c.Roomid {continue}
+ medal_id = v.Medal_id
+ }
if medal_id == 0 {//无牌
if c.Wearing_FansMedal == 0 {//当前没牌
apilog.L(`I: `,`当前无粉丝牌,不切换`)
}
}
}
+
var (
post_url string
post_str string
}
if res.Code != 0{
- apilog.L(`E: `,res.Message)
+ apilog.L(`E: `,`返回错误`,res.Message)
return
}
}
}
if res.Code != 0{
- apilog.L(`E: `,res.Message)
+ apilog.L(`E: `,`返回错误`,res.Message)
return
}
}
/*
F额外功能区
*/
+var log = c.Log.Base(`功能`)
//功能开关选取函数
func IsOn(s string) bool {
if v,_ := c.K_v.LoadV(`进房弹幕_有粉丝牌时才发`).(bool);v && c.Wearing_FansMedal == 0{
return
}
+ if v,_ := c.K_v.LoadV(`进房弹幕_仅发首日弹幕`).(bool);v {
+ res := F.Get_weared_medal()
+ if res.Today_intimacy > 0 {
+ return
+ }
+ }
if s,ok := c.K_v.LoadV(`进房弹幕_内容`).(string);ok && s != ``{
Cookie := make(map[string]string)
c.Cookie.Range(func(k,v interface{})(bool){
})
send.Danmu_s(s,p.Map_2_Cookies_String(Cookie),c.Roomid)
}
+}
+
+//保持所有牌子点亮
+func Keep_medal_light() {
+ if v,_ := c.K_v.LoadV(`保持所有牌子亮着`).(bool);!v {
+ return
+ }
+ log := log.Base_add(`保持亮牌`)
+
+ var sendStr string
+ if s,ok := c.K_v.LoadV(`进房弹幕_内容`).(string);!ok || s == ``{
+ log.L(`I: `,`进房弹幕_内容 为 空,退出`)
+ return
+ } else {sendStr = s}
+
+ Cookie := make(map[string]string)
+ c.Cookie.Range(func(k,v interface{})(bool){
+ Cookie[k.(string)] = v.(string)
+ return true
+ })
+
+ log.L(`I: `,`开始`)
+
+ for _,v := range F.Get_list_in_room() {
+ if v.Is_lighted == 1 {continue}
+
+ send.Danmu_s(sendStr,p.Map_2_Cookies_String(Cookie),v.Room_id)
+ time.Sleep(time.Second)
+ }
+ log.L(`I: `,`完成`)
}
\ No newline at end of file