]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
保持粉丝牌点亮&每天进房弹幕可选只发一次
authorqydysky <qydysky@foxmail.com>
Sun, 28 Feb 2021 15:46:22 +0000 (23:46 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 28 Feb 2021 15:46:22 +0000 (23:46 +0800)
F/api.go
Reply/F.go
bili_danmu.go
demo/config/config_K_v.json

index 06b43a1819285bd2db52d27014b485e85afd6431..f77c4f92d5e111f6101c9c3b3641d5f1f3003812 100644 (file)
--- a/F/api.go
+++ b/F/api.go
@@ -210,7 +210,7 @@ func (i *api) Get_info() (o *api) {
 
 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")
@@ -933,9 +933,20 @@ func Get_cookie() {
        }
 }
 
-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`,
@@ -945,16 +956,16 @@ func (i *api) CheckSwitch_FansMedal() {
                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),
                        },
@@ -964,31 +975,62 @@ func (i *api) CheckSwitch_FansMedal() {
                        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),
                        },
@@ -998,31 +1040,61 @@ func (i *api) CheckSwitch_FansMedal() {
                        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: `,`当前无粉丝牌,不切换`)
@@ -1030,6 +1102,7 @@ func (i *api) CheckSwitch_FansMedal() {
                        }
                }
        }
+
        var (
                post_url string
                post_str string
@@ -1375,7 +1448,7 @@ func (i *api) F_x25Kn() (o *api) {
                }
 
                if res.Code != 0{
-                       apilog.L(`E: `,res.Message)
+                       apilog.L(`E: `,`返回错误`,res.Message)
                        return
                }
        }
@@ -1474,7 +1547,7 @@ func (i *api) F_x25Kn() (o *api) {
                        }
        
                        if res.Code != 0{
-                               apilog.L(`E: `,res.Message)
+                               apilog.L(`E: `,`返回错误`,res.Message)
                                return
                        }
                }
index 1bcf21839cedb0074d50459928c7f5b21eaa8a6c..bb3cb5aa3ad1d80475326ab2f387fd14d1a9c5f5 100644 (file)
@@ -23,6 +23,7 @@ import (
 /*
        F额外功能区
 */
+var log = c.Log.Base(`功能`)
 
 //功能开关选取函数
 func IsOn(s string) bool {
@@ -739,6 +740,12 @@ func Entry_danmu(){
        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){
@@ -747,4 +754,34 @@ func Entry_danmu(){
                })
                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
index 0398296a0ee7dde0c59323e0ad28ac5f01f38cb3..194447dbd386684d652db7c1bb913060964c7a0d 100644 (file)
@@ -265,6 +265,8 @@ func Demo(roomid ...int) {
                                                                go api.F_x25Kn()
                                                                //附加功能 每日发送弹幕
                                                                go reply.Entry_danmu()
+                                                               //附加功能 保持牌子点亮
+                                                               go reply.Keep_medal_light()
                                                                return false
                                                        },
                                                })
@@ -283,6 +285,8 @@ func Demo(roomid ...int) {
                                                        go reply.Entry_danmu()
                                                        go reply.Saveflvf()
                                                        go reply.ShowRevf()
+                                                       //附加功能 保持牌子点亮
+                                                       go reply.Keep_medal_light()
                                                }
                                        }()
                                }
index 87b7b3bf44350eb24d15b6a04565066eae0f6ce1..e033b6c54859e3d41f9bd47e7b3405bc573e60e2 100644 (file)
@@ -7,7 +7,7 @@
     "弹幕私信(额外)":"[弹幕机测试 额外]:弹幕",
 
     "TTS_配置-help":"将会运行[TTS_使用程序路径 获取的音频路径 TTS_使用程序参数]",
-    "TTS_总开关":true,
+    "TTS_总开关":false,
     "TTS_使用程序路径":"ffplay",
     "TTS_使用程序参数":"-autoexit -nodisp -volume 60",
 
     "进房弹幕-help":"进入房间发送弹幕",
     "进房弹幕_内容":" ",
     "进房弹幕_有粉丝牌时才发":true,
+    "进房弹幕_仅发首日弹幕":true,
 
     "其他":"",
+    "保持所有牌子亮着":true,
     "扫码登录自动打开标签页":true,
     "日志显示":["T: ","I: ","W: ","E: "],
     "统计营收":true,