From e9eccc4867c6d00050023b82f534ed2d8630f6ab Mon Sep 17 00:00:00 2001 From: qydysky Date: Sun, 28 Feb 2021 23:46:22 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=9D=E6=8C=81=E7=B2=89=E4=B8=9D=E7=89=8C?= =?utf8?q?=E7=82=B9=E4=BA=AE&=E6=AF=8F=E5=A4=A9=E8=BF=9B=E6=88=BF=E5=BC=B9?= =?utf8?q?=E5=B9=95=E5=8F=AF=E9=80=89=E5=8F=AA=E5=8F=91=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- F/api.go | 163 ++++++++++++++++++++++++++---------- Reply/F.go | 37 ++++++++ bili_danmu.go | 4 + demo/config/config_K_v.json | 4 +- 4 files changed, 162 insertions(+), 46 deletions(-) diff --git a/F/api.go b/F/api.go index 06b43a1..f77c4f9 100644 --- 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 } } diff --git a/Reply/F.go b/Reply/F.go index 1bcf218..bb3cb5a 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -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 diff --git a/bili_danmu.go b/bili_danmu.go index 0398296..194447d 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -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() } }() } diff --git a/demo/config/config_K_v.json b/demo/config/config_K_v.json index 87b7b3b..e033b6c 100644 --- a/demo/config/config_K_v.json +++ b/demo/config/config_K_v.json @@ -7,7 +7,7 @@ "弹幕私信(额外)":"[弹幕机测试 额外]:弹幕", "TTS_配置-help":"将会运行[TTS_使用程序路径 获取的音频路径 TTS_使用程序参数]", - "TTS_总开关":true, + "TTS_总开关":false, "TTS_使用程序路径":"ffplay", "TTS_使用程序参数":"-autoexit -nodisp -volume 60", @@ -28,8 +28,10 @@ "进房弹幕-help":"进入房间发送弹幕", "进房弹幕_内容":" ", "进房弹幕_有粉丝牌时才发":true, + "进房弹幕_仅发首日弹幕":true, "其他":"", + "保持所有牌子亮着":true, "扫码登录自动打开标签页":true, "日志显示":["T: ","I: ","W: ","E: "], "统计营收":true, -- 2.39.2