From c54c99a37564876a84211d4e5505b42b8725899b Mon Sep 17 00:00:00 2001 From: qydysky Date: Thu, 18 Feb 2021 14:34:38 +0800 Subject: [PATCH] =?utf8?q?=E5=85=A8=E5=B1=80map=E4=BF=9D=E6=8A=A4=20?= =?utf8?q?=E9=83=A8=E5=88=86=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB=E8=B0=83?= =?utf8?q?=E6=95=B4=20=E6=B2=A1=E7=B2=89=E4=B8=9D=E7=89=8C=E4=B8=8D?= =?utf8?q?=E8=8E=B7=E5=8F=96=E5=B0=8F=E5=BF=83=E5=BF=83=EF=BC=8C=E5=8F=AF?= =?utf8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=98=AF=E5=90=A6=E5=8F=91=E8=BF=9B?= =?utf8?q?=E6=88=BF=E5=BC=B9=E5=B9=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CV/Var.go | 3 +- F/api.go | 244 ++++++++++++++++++++++++++++-------- Reply/F.go | 20 ++- Reply/Reply.go | 9 +- Reply/tts.go | 2 +- Send/Send.go | 2 +- Send/Send_pm.go | 10 +- bili_danmu.go | 18 ++- demo/config/config_K_v.json | 4 +- demo/go.mod | 4 +- demo/go.sum | 4 + 11 files changed, 246 insertions(+), 74 deletions(-) diff --git a/CV/Var.go b/CV/Var.go index 80b9d0a..92411d7 100644 --- a/CV/Var.go +++ b/CV/Var.go @@ -16,7 +16,7 @@ var ( Live []string//直播链接 Live_qn string Roomid int - Cookie = make(map[string]string) + Cookie syncmap.Map Title string//直播标题 Uname string//主播名 Rev float64//营收 @@ -25,6 +25,7 @@ var ( Note string//分区排行 Live_Start_Time time.Time//直播开始时间 Liveing bool//是否在直播 + Wearing_FansMedal int//当前佩戴的粉丝牌 ) //消息队列 diff --git a/F/api.go b/F/api.go index 9001d53..8d90dac 100644 --- a/F/api.go +++ b/F/api.go @@ -31,7 +31,6 @@ type api struct { Token string Parent_area_id int Area_id int - wearing_FansMedal bool } var apilog = c.Log.Base(`api`) @@ -107,12 +106,18 @@ func (i *api) Get_info() (o *api) { c.Title != ``{return} {//使用其他api + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=" + Roomid, Header:map[string]string{ `Referer`:"https://live.bilibili.com/" + Roomid, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -212,8 +217,14 @@ func (i *api) Get_live(qn ...string) (o *api) { return } if api_limit.TO() {return}//超额请求阻塞,超时将取消 + + CookieM := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + CookieM[k.(string)] = v.(string) + return true + }) - Cookie := p.Map_2_Cookies_String(c.Cookie) + Cookie := p.Map_2_Cookies_String(CookieM) if i := strings.Index(Cookie, "PVID="); i != -1 { if d := strings.Index(Cookie[i:], ";"); d == -1 { Cookie = Cookie[:i] @@ -233,7 +244,7 @@ func (i *api) Get_live(qn ...string) (o *api) { }) if e := r.S(`"durl":[`, `]`, 0, 0).Err;e == nil { if urls := p.Json().GetArrayFrom("[" + r.RS[0] + "]", "url");urls != nil { - apilog.L(`W: `,"直播中") + apilog.L(`I: `,"直播中") c.Liveing = true o.Live_status = 1 for _,v := range urls { @@ -283,15 +294,15 @@ func (i *api) Get_live(qn ...string) (o *api) { switch live_status.(float64) { case 2: c.Liveing = false - apilog.L(`W: `,"轮播中") + apilog.L(`I: `,"轮播中") return case 0: //未直播 c.Liveing = false - apilog.L(`W: `,"未在直播") + apilog.L(`I: `,"未在直播") return case 1: c.Liveing = true - apilog.L(`W: `,"直播中") + apilog.L(`I: `,"直播中") default: apilog.L(`W: `,"live_status:", live_status) } @@ -371,7 +382,7 @@ func (i *api) Get_live(qn ...string) (o *api) { } if v,ok := c.Default_qn[cu_qn];ok { - apilog.L(`W: `,"当前清晰度:", v) + apilog.L(`I: `,"当前清晰度:", v) } return } @@ -386,14 +397,19 @@ func (i *api) Get_host_Token() (o *api) { } Roomid := strconv.Itoa(o.Roomid) if api_limit.TO() {return}//超额请求阻塞,超时将取消 - + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) req := p.Req() if err := req.Reqf(p.Rval{ Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?type=0&id=" + Roomid, Header:map[string]string{ `Referer`:"https://live.bilibili.com/" + Roomid, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -436,13 +452,19 @@ func Get_face_src(uid string) (string) { if uid == "" {return ""} if api_limit.TO() {return ""}//超额请求阻塞,超时将取消 apilog := apilog.Base_add(`获取头像`) + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) req := p.Req() if err := req.Reqf(p.Rval{ Url:"https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuMedalAnchorInfo?ruid=" + uid, Header:map[string]string{ `Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -476,6 +498,12 @@ func (i *api) Get_OnlineGoldRank() { var self_loop func(page int) self_loop = func(page int){ if page <= 0 || session_roomid != c.Roomid{return} + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) req := p.Req() if err := req.Reqf(p.Rval{ @@ -491,7 +519,7 @@ func (i *api) Get_OnlineGoldRank() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -554,6 +582,12 @@ func (i *api) Get_HotRank() { if api_limit.TO() {return}//超额请求阻塞,超时将取消 apilog := apilog.Base_add(`获取热门榜`) + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/xlive/general-interface/v1/rank/getHotRank?ruid=`+strconv.Itoa(i.Uid)+`&room_id=`+strconv.Itoa(c.Roomid)+`&is_pre=0&page_size=50&source=2&area_id=`+strconv.Itoa(i.Parent_area_id), @@ -568,7 +602,7 @@ func (i *api) Get_HotRank() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -611,6 +645,12 @@ func (i *api) Get_guardNum() { if api_limit.TO() {return}//超额请求阻塞,超时将取消 apilog := apilog.Base_add(`获取舰长数`) + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topList?roomid=`+strconv.Itoa(c.Roomid)+`&page=1&ruid=`+strconv.Itoa(i.Uid)+`&page_size=29`, @@ -625,7 +665,7 @@ func (i *api) Get_guardNum() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/" + strconv.Itoa(c.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -643,7 +683,7 @@ func (i *api) Get_guardNum() { return } else { c.GuardNum = int(num.(float64)) - apilog.L(`W: `,"舰长数获取成功", c.GuardNum) + apilog.L(`I: `,"舰长数获取成功", c.GuardNum) } return } @@ -701,7 +741,7 @@ func (i *api) Get_Version() { return } c.VERSION = r.RS[0] - apilog.L(`W: `,"api version", c.VERSION) + apilog.L(`I: `,"api version", c.VERSION) } } @@ -790,6 +830,12 @@ func Get_cookie() { }, }) + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + for max_try > 0 && !change_room_sign { max_try -= 1 p.Sys().Timeoutf(3) @@ -800,7 +846,7 @@ func Get_cookie() { Header:map[string]string{ `Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`, `Referer`: `https://passport.bilibili.com/login`, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -838,7 +884,7 @@ func Get_cookie() { } {//写入cookie.txt for k,v := range p.Cookies_String_2_Map(cookie){ - c.Cookie[k] = v + c.Cookie.Store(k, v) } f := p.File() f.FileWR(p.Filel{ @@ -859,17 +905,21 @@ func Get_cookie() { } } -func (i *api) Switch_FansMedal() { - if len(c.Cookie) == 0 {return} +func (i *api) CheckSwitch_FansMedal() { + if c.Cookie.Len() == 0 {return} if api_limit.TO() {return}//超额请求阻塞,超时将取消 apilog := apilog.Base_add(`切换粉丝牌`) - Cookie := p.Map_2_Cookies_String(c.Cookie) - {//验证是否本直播间牌子 + 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`, Header:map[string]string{ - `Cookie`:Cookie, + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -877,8 +927,23 @@ func (i *api) Switch_FansMedal() { apilog.L(`E: `,e) return } - res := string(r.Respon) - if v,ok := p.Json().GetValFromS(res, "data.roominfo.room_id").(float64);ok && int(v) == c.Roomid { + 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"` + } + if e := json.Unmarshal(r.Respon, &res);e != nil && res.Msg == ``{//未佩戴时的data是array型会导致错误 + apilog.L(`E: `,e) + return + } + + c.Wearing_FansMedal = res.Data.Roominfo.Room_id//更新佩戴信息 + if res.Data.Roominfo.Room_id == c.Roomid { return } } @@ -888,7 +953,7 @@ func (i *api) Switch_FansMedal() { if e := r.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/fans_medal/v1/FansMedal/get_list_in_room`, Header:map[string]string{ - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:10, Retry:2, @@ -920,18 +985,24 @@ func (i *api) Switch_FansMedal() { return } } + + if medal_id == 0 {//无牌 + if c.Wearing_FansMedal == 0 {//当前没牌 + apilog.L(`I: `,`当前无粉丝牌,不切换`) + return + } + } } var ( post_url string post_str string ) {//生成佩戴信息 - csrf := c.Cookie[`bili_jct`] + csrf := c.Cookie.LoadV(`bili_jct`).(string) if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct=");return} post_str = `csrf_token=`+csrf+`&csrf=`+csrf - i.wearing_FansMedal = medal_id != 0 if medal_id == 0 {//无牌,不佩戴牌子 post_url = `https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/take_off` } else { @@ -945,7 +1016,7 @@ func (i *api) Switch_FansMedal() { Url:post_url, PostStr:post_str, Header:map[string]string{ - `Cookie`:Cookie, + `Cookie`:p.Map_2_Cookies_String(Cookie), `Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`, `Referer`: `https://passport.bilibili.com/login`, }, @@ -957,7 +1028,8 @@ func (i *api) Switch_FansMedal() { } res := string(r.Respon) if v,ok := p.Json().GetValFromS(res, "code").(float64);ok && v == 0 { - apilog.L(`W: `,`自动切换粉丝牌`) + apilog.L(`I: `,`自动切换粉丝牌`) + c.Wearing_FansMedal = medal_id//更新佩戴信息 return } if v,ok := p.Json().GetValFromS(res, "message").(string);ok { @@ -971,10 +1043,16 @@ func (i *api) Switch_FansMedal() { //签到 func Dosign() { apilog := apilog.Base_add(`签到`).L(`T: `,`签到`) - if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return} + if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return} if api_limit.TO() {return}//超额请求阻塞,超时将取消 {//检查是否签到 + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo`, @@ -989,7 +1067,7 @@ func Dosign() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/all", - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1015,6 +1093,12 @@ func Dosign() { } {//签到 + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign`, @@ -1029,7 +1113,7 @@ func Dosign() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/all", - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1057,8 +1141,8 @@ func Dosign() { func (i *api) Get_LIVE_BUVID() (o *api){ o = i apilog := apilog.Base_add(`LIVE_BUVID`).L(`T: `,`获取LIVE_BUVID`) - if c.Cookie[`LIVE_BUVID`] != `` {apilog.L(`I: `,`存在`);return} - if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return} + if c.Cookie.LoadV(`LIVE_BUVID`).(string) != `` {apilog.L(`I: `,`存在`);return} + if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return} if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消 for {//获取 @@ -1086,7 +1170,7 @@ func (i *api) Get_LIVE_BUVID() (o *api){ //cookie var has bool for k,v := range p.Cookies_List_2_Map(req.Response.Cookies()){ - c.Cookie[k] = v + c.Cookie.Store(k, v) if k == `LIVE_BUVID` {has = true} } if has { @@ -1098,11 +1182,17 @@ func (i *api) Get_LIVE_BUVID() (o *api){ } } + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + f := p.File() f.FileWR(p.Filel{ File: `cookie.txt`, Write: true, - Context: []interface{}{p.Map_2_Cookies_String(c.Cookie)}, + Context: []interface{}{p.Map_2_Cookies_String(Cookie)}, }) return } @@ -1124,9 +1214,9 @@ type E_json struct{ func (i *api) F_x25Kn() (o *api) { o = i apilog := apilog.Base_add(`小心心`).L(`T: `,`获取小心心`) - if o.wearing_FansMedal {apilog.L(`I: `,`无粉丝牌,不获取`);return} - if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return} - if c.Cookie[`LIVE_BUVID`] == `` {apilog.L(`E: `,`失败!无LIVE_BUVID`);return} + if c.Wearing_FansMedal == 0{apilog.L(`I: `,`无粉丝牌,不获取`);return} + if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return} + if c.Cookie.LoadV(`LIVE_BUVID`).(string) == `` {apilog.L(`E: `,`失败!无LIVE_BUVID`);return} if o.Parent_area_id == -1 {apilog.L(`E: `,`失败!未获取Parent_area_id`);return} if o.Area_id == -1 {apilog.L(`E: `,`失败!未获取Area_id`);return} if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消 @@ -1152,10 +1242,10 @@ func (i *api) F_x25Kn() (o *api) { loop_num = 0 ) - csrf := c.Cookie[`bili_jct`] + csrf := c.Cookie.LoadV(`bili_jct`).(string) if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct");return} - LIVE_BUVID := c.Cookie[`LIVE_BUVID`] + LIVE_BUVID := c.Cookie.LoadV(`LIVE_BUVID`).(string) if LIVE_BUVID == `` {apilog.L(`E: `,"Cookie错误,无LIVE_BUVID");return} var new_uuid string @@ -1184,6 +1274,12 @@ func (i *api) F_x25Kn() (o *api) { PostStr += `csrf_token=`+csrf+`&csrf=`+csrf+`&` PostStr += `visit_id=` + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/E`, @@ -1199,7 +1295,7 @@ func (i *api) F_x25Kn() (o *api) { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/"+strconv.Itoa(o.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, PostStr:url.PathEscape(PostStr), Timeout:3, @@ -1278,7 +1374,13 @@ func (i *api) F_x25Kn() (o *api) { } else { PostStr = `s=`+wasm+`&`+PostStr } - + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://live-trace.bilibili.com/xlive/data-interface/v1/x25Kn/X`, @@ -1294,7 +1396,7 @@ func (i *api) F_x25Kn() (o *api) { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/"+strconv.Itoa(o.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, PostStr:url.PathEscape(PostStr), Timeout:3, @@ -1337,10 +1439,16 @@ type Gift_list_type_Data_List struct{ func Gift_list() (list []Gift_list_type_Data_List) { apilog := apilog.Base_add(`礼物列表`).L(`T: `,`获取礼物列表`) - if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return} + if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return} if c.Roomid == 0 {apilog.L(`E: `,`失败!无Roomid`);return} if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消 + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/xlive/web-room/v1/gift/bag_list?t=`+strconv.Itoa(int(p.Sys().GetMTime()))+`&room_id=`+strconv.Itoa(c.Roomid), @@ -1355,7 +1463,7 @@ func Gift_list() (list []Gift_list_type_Data_List) { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/"+strconv.Itoa(c.Roomid), - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1383,11 +1491,17 @@ func Gift_list() (list []Gift_list_type_Data_List) { //银瓜子2硬币 func Silver_2_coin() { apilog := apilog.Base_add(`银瓜子=>硬币`).L(`T: `,`银瓜子=>硬币`) - if len(c.Cookie) == 0 {apilog.L(`E: `,`失败!无cookie`);return} + if c.Cookie.Len() == 0 {apilog.L(`E: `,`失败!无cookie`);return} if api_limit.TO() {apilog.L(`E: `,`超时!`);return}//超额请求阻塞,超时将取消 var Silver int {//验证是否还有机会 + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/pay/v1/Exchange/getStatus`, @@ -1402,7 +1516,7 @@ func Silver_2_coin() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:`https://link.bilibili.com/p/center/index`, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1441,6 +1555,12 @@ func Silver_2_coin() { } {//获取交换规则,验证数量足够 + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/pay/v1/Exchange/getRule`, @@ -1455,7 +1575,7 @@ func Silver_2_coin() { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:`https://link.bilibili.com/p/center/index`, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1484,16 +1604,23 @@ func Silver_2_coin() { } if Silver < res.Data.Silver_2_coin_price{ - apilog.L(`E: `, `当前银瓜子数量不足`) + apilog.L(`W: `, `当前银瓜子数量不足`) return } } {//交换 - csrf := c.Cookie[`bili_jct`] + csrf := c.Cookie.LoadV(`bili_jct`).(string) if csrf == `` {apilog.L(`E: `,"Cookie错误,无bili_jct=");return} post_str := `csrf_token=`+csrf+`&csrf=`+csrf + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if err := req.Reqf(p.Rval{ Url:`https://api.live.bilibili.com/pay/v1/Exchange/silver2coin`, @@ -1510,7 +1637,7 @@ func Silver_2_coin() { `Cache-Control`: `no-cache`, `Content-Type`: `application/x-www-form-urlencoded`, `Referer`:`https://link.bilibili.com/p/center/index`, - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, Timeout:3, Retry:2, @@ -1542,12 +1669,19 @@ func Silver_2_coin() { func save_cookie(Cookies []*http.Cookie){ for k,v := range p.Cookies_List_2_Map(Cookies){ - c.Cookie[k] = v + c.Cookie.Store(k, v) } f := p.File() + + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + f.FileWR(p.Filel{ File: `cookie.txt`, Write: true, - Context: []interface{}{p.Map_2_Cookies_String(c.Cookie)}, + Context: []interface{}{p.Map_2_Cookies_String(Cookie)}, }) } \ No newline at end of file diff --git a/Reply/F.go b/Reply/F.go index 3864150..ee4db43 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -246,7 +246,13 @@ func Saveflvf(){ os.Rename(saveflv.path+".flv.dtmp", saveflv.path+".flv") }() - Cookie := p.Map_2_Cookies_String(c.Cookie) + + CookieM := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + CookieM[k.(string)] = v.(string) + return true + }) + Cookie := p.Map_2_Cookies_String(CookieM) if i := strings.Index(Cookie, "PVID="); i != -1 { if d := strings.Index(Cookie[i:], ";"); d == -1 { Cookie = Cookie[:i] @@ -748,7 +754,15 @@ func Save_to_json(Loc int,Context []interface{}) { //进入房间发送弹幕 func Entry_danmu(){ - if s,ok := c.K_v.LoadV(`进入房间发送弹幕`).(string);ok && s != ``{ - send.Danmu_s(s,p.Map_2_Cookies_String(c.Cookie),c.Roomid) + if v,_ := c.K_v.LoadV(`进房弹幕_有粉丝牌时才发`).(bool);v && c.Wearing_FansMedal == 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){ + Cookie[k.(string)] = v.(string) + return true + }) + send.Danmu_s(s,p.Map_2_Cookies_String(Cookie),c.Roomid) } } \ No newline at end of file diff --git a/Reply/Reply.go b/Reply/Reply.go index d95d6c3..bb52536 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -682,11 +682,16 @@ func (replyF) danmu(s string) { //传入字符串即可发送 //需要cookie func Msg_senddanmu(msg string){ - if len(c.Cookie) == 0 || c.Roomid == 0 { + if c.Cookie.Len() == 0 || c.Roomid == 0 { msglog.L(`I: `, `c.Cookie == "" || c.Roomid == 0`) return } - send.Danmu_s(msg, p.Map_2_Cookies_String(c.Cookie), c.Roomid) + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + send.Danmu_s(msg, p.Map_2_Cookies_String(Cookie), c.Roomid) } //弹幕显示 diff --git a/Reply/tts.go b/Reply/tts.go index 60fbbfc..85c44bc 100644 --- a/Reply/tts.go +++ b/Reply/tts.go @@ -75,7 +75,7 @@ func init(){ func TTS(uid,msg string) { if tts_limit.TO() {return} - tts_log.L(`I: `,uid, msg) + tts_log.L(`I: `,uid, strings.ReplaceAll(msg, "\n", " ")) req := p.Req() if v,ok := tts_setting[uid];ok{ msg = strings.ReplaceAll(v, "{D}", msg) diff --git a/Send/Send.go b/Send/Send.go index 1693113..65b0352 100644 --- a/Send/Send.go +++ b/Send/Send.go @@ -35,7 +35,7 @@ func Danmu_s(msg,Cookie string, roomid int) { } } - csrf := c.Cookie[`bili_jct`] + csrf := c.Cookie.LoadV(`bili_jct`).(string) if csrf == `` {l.L(`E: `,"Cookie错误,无bili_jct=");return} PostStr := `color=16777215&fontsize=25&mode=1&msg=` + msg + `&rnd=` + strconv.Itoa(int(p.Sys().GetSTime())) + `&roomid=` + strconv.Itoa(roomid) + `&bubble=0&csrf_token=` + csrf + `&csrf=` + csrf diff --git a/Send/Send_pm.go b/Send/Send_pm.go index 190c81f..15af2a0 100644 --- a/Send/Send_pm.go +++ b/Send/Send_pm.go @@ -33,7 +33,7 @@ func Send_pm(uid int, msg string) error { return errors.New(`不能发送给自己`) } - csrf := c.Cookie[`bili_jct`] + csrf := c.Cookie.LoadV(`bili_jct`).(string) if csrf == `` {return errors.New("Cookie错误,无bili_jct=")} var new_uuid string @@ -50,6 +50,12 @@ func Send_pm(uid int, msg string) error { var send_str = `msg[sender_uid]=`+strconv.Itoa(c.Uid)+`&msg[receiver_id]=`+strconv.Itoa(uid)+`&msg[receiver_type]=1&msg[msg_type]=1&msg[msg_status]=0&msg[content]={"content":"`+msg+`"}&msg[timestamp]=`+strconv.Itoa(int(p.Sys().GetSTime()))+`&msg[new_face_version]=0&msg[dev_id]=`+strings.ToUpper(new_uuid)+`&from_firework=0&build=0&mobi_app=web&csrf_token=`+csrf+`&csrf=`+csrf + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + req := p.Req() if e:= req.Reqf(p.Rval{ Url:`https://api.vc.bilibili.com/web_im/v1/web_im/send_msg`, @@ -67,7 +73,7 @@ func Send_pm(uid int, msg string) error { `Pragma`: `no-cache`, `Cache-Control`: `no-cache`, `Referer`:"https://message.bilibili.com", - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), }, });e != nil { log.L(`E: `,e) diff --git a/bili_danmu.go b/bili_danmu.go index e7168a8..f6e5455 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -123,7 +123,7 @@ func Demo(roomid ...int) { danmulog.L(`I: `, "未检测到cookie.txt,如果需要登录请在本机打开以下网址扫码登录,不需要请忽略") //获取cookie F.Get_cookie() - if len(c.Cookie) != 0 { + if c.Cookie.Len() != 0 { danmulog.L(`I: `,"你已登录,刷新房间!") //刷新 c.Danmu_Main_mq.Push_tag(`change_room`,nil) @@ -133,7 +133,7 @@ func Demo(roomid ...int) { q.File = "cookie.txt" f := p.File().FileWR(q) for k,v := range p.Cookies_String_2_Map(f){ - c.Cookie[k] = v + c.Cookie.Store(k, v) } if tmp_uid,e := g.SS(f,`DedeUserID=`,`;`,0,0);e == nil { if v,e := strconv.Atoi(tmp_uid);e == nil { @@ -164,16 +164,22 @@ func Demo(roomid ...int) { api.Get_Version() //获取热门榜 api.Get_HotRank() + //检查与切换粉丝牌,只在cookie存在时启用 + api.CheckSwitch_FansMedal() //小心心 go api.F_x25Kn() - //切换粉丝牌,只在cookie存在时启用 - api.Switch_FansMedal() if len(api.Url) == 0 || api.Roomid == 0 || api.Token == "" || api.Uid == 0 || api.Locked { danmulog.L(`E: `,"some err") return } danmulog.L(`I: `,"连接到房间", c.Roomid) + Cookie := make(map[string]string) + c.Cookie.Range(func(k,v interface{})(bool){ + Cookie[k.(string)] = v.(string) + return true + }) + //对每个弹幕服务器尝试 for _, v := range api.Url { //ws启动 @@ -184,7 +190,7 @@ func Demo(roomid ...int) { Func_abort_close:func(){danmulog.L(`I: `,`服务器连接中断`)}, Func_normal_close:func(){danmulog.L(`I: `,`服务器连接关闭`)}, Header: map[string]string{ - `Cookie`:p.Map_2_Cookies_String(c.Cookie), + `Cookie`:p.Map_2_Cookies_String(Cookie), `Host`: u.Hostname(), `User-Agent`: `Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0`, `Accept`: `*/*`, @@ -251,7 +257,7 @@ func Demo(roomid ...int) { }, }) - if len(c.Cookie) != 0 {//附加功能 弹幕机 无cookie无法发送弹幕 + if c.Cookie.Len() != 0 {//附加功能 弹幕机 无cookie无法发送弹幕 reply.Danmuji_auto(1) } {//附加功能 进房间发送弹幕 直播流保存 营收 diff --git a/demo/config/config_K_v.json b/demo/config/config_K_v.json index de93e4d..a9ce995 100644 --- a/demo/config/config_K_v.json +++ b/demo/config/config_K_v.json @@ -25,5 +25,7 @@ "get_xiao_xinxin-help":"获取小心心", "get_xiao_xinxin":true, - "进入房间发送弹幕":" " + "进房弹幕-help":"进入房间发送弹幕", + "进房弹幕_内容":" ", + "进房弹幕_有粉丝牌时才发":true } \ No newline at end of file diff --git a/demo/go.mod b/demo/go.mod index dfea8c6..2b84bc2 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -11,13 +11,13 @@ require ( github.com/miekg/dns v1.1.38 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/qydysky/bili_danmu v0.5.7 - github.com/qydysky/part v0.4.2 // indirect + github.com/qydysky/part v0.4.3 // indirect github.com/shirou/gopsutil v3.21.1+incompatible // indirect github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect - golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c // indirect + golang.org/x/sys v0.0.0-20210217105451-b926d437f341 // indirect ) replace ( diff --git a/demo/go.sum b/demo/go.sum index 0a5ae03..6d58b37 100644 --- a/demo/go.sum +++ b/demo/go.sum @@ -143,6 +143,8 @@ github.com/qydysky/part v0.3.15 h1:dRdGUfMk3XMR88jE0xx54FoKwsz6e5Vh4gSFuY7oxpc= github.com/qydysky/part v0.3.15/go.mod h1:43opuciW71sZvOR67kye50jgMDSDrn/t6+LefNdlXPg= github.com/qydysky/part v0.4.2 h1:8guI/1YEwVsjTWuIPJ1euiSQbHYejWft4Tuhp8CVjAE= github.com/qydysky/part v0.4.2/go.mod h1:43opuciW71sZvOR67kye50jgMDSDrn/t6+LefNdlXPg= +github.com/qydysky/part v0.4.3 h1:ckgSo+MefqrRgWdCjnHbJiS/Qy52VnzBj7YbFXPHNJU= +github.com/qydysky/part v0.4.3/go.mod h1:43opuciW71sZvOR67kye50jgMDSDrn/t6+LefNdlXPg= github.com/qydysky/part/msgq v0.0.0-20201213031129-ca3253dc72ad h1:Jtzf509lQrkUMGTV0Sc6IDCAiR1VrBcHrIban7hpye4= github.com/qydysky/part/msgq v0.0.0-20201213031129-ca3253dc72ad/go.mod h1:w32TkJNVtTJd4LOS09cq+4uYG6itcN2vsqw+slp44Rg= github.com/qydysky/part/msgq v0.0.0-20201213120821-f36e49c32bba h1:1ew9dRpc0Rux0WkWeT/4AE15ynYWmL2D7onJEJIFOB8= @@ -241,6 +243,8 @@ golang.org/x/sys v0.0.0-20210113000019-eaf3bda374d2 h1:F9vNgpIiamoF+Q1/c78bikg/N golang.org/x/sys v0.0.0-20210113000019-eaf3bda374d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210217105451-b926d437f341 h1:2/QtM1mL37YmcsT8HaDNHDgTqqFVw+zr8UzMiBVLzYU= +golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -- 2.39.2