From 0adbccfde833d88a209d2655901b713f707fdb6f Mon Sep 17 00:00:00 2001 From: qydysky Date: Fri, 20 Nov 2020 15:43:25 +0800 Subject: [PATCH] =?utf8?q?=E5=BC=B9=E5=B9=95=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?utf8?q?=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CV/Var.go | 4 +++ README.md | 13 +++++++- Reply/gtk.go | 41 ++++++++++++++++++++++-- Send/Send.go | 13 ++++++-- bili_danmu.go | 3 +- demo/ui/2.glade | 85 +++++++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 150 insertions(+), 9 deletions(-) diff --git a/CV/Var.go b/CV/Var.go index fbc5191..67de522 100644 --- a/CV/Var.go +++ b/CV/Var.go @@ -18,6 +18,10 @@ var ( ) //消息队列 +type Danmu_Main_mq_item struct { + Class string + Data interface{} +} var Danmu_Main_mq = mq.New() //from player-loader-2.0.11.min.js diff --git a/README.md b/README.md index 6b3fb0e..21e66a5 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ var AllF = map[string]bool{ 弹幕重连 直播流开播自动下载 直播流下载重连 -gtk弹幕窗自定义人/事件消息停留 +gtk弹幕窗自定义人/事件消息停留/房间切换/弹幕格式化发送 营收统计 ... ``` @@ -149,6 +149,17 @@ SC: 吹舞火 ¥ 30 私の隣の一万は幻ですか? ==== ``` +``` +//gtk的弹幕格式化发送 +2020/11/20 15:39:57 弹幕格式已设置为 [{D}] +INFO: 2020/11/20 15:40:05 [弹幕发送] [发送 [就是这样] 至 394988] +[就是这样] +INFO: 2020/11/20 15:40:15 [弹幕发送] [发送 [你知道么] 至 394988] +[你知道么] +2020/11/20 15:42:38 弹幕长度大于20,不做格式处理 +INFO: 2020/11/20 15:42:38 [弹幕发送] [发送 11111111111111111111 至 394988] +11111111111111111111 +``` ctrl+c退出,会同时追加记录到文件danmu.log中(文件记录完整信息,不会减少附加功能作用的弹幕) - 流保存以及弹幕ass ``` diff --git a/Reply/gtk.go b/Reply/gtk.go index 65341d2..f44c0cd 100644 --- a/Reply/gtk.go +++ b/Reply/gtk.go @@ -7,6 +7,7 @@ import ( "errors" "strconv" "time" + "strings" "log" "fmt" @@ -91,7 +92,7 @@ func Gtk_danmu() { var w2_textView1 *gtk.TextView var w2_Entry0 *gtk.Entry var w2_Entry0_editting bool - + application, err := gtk.ApplicationNew(appId, glib.APPLICATION_FLAGS_NONE) if err != nil {log.Println(err);return} @@ -142,6 +143,40 @@ func Gtk_danmu() { w2_textView1 = tmp }else{log.Println("cant find #t1 in .glade");return} } + {//发送弹幕 + var danmu_send_form string + {//发送弹幕格式 + obj, err := builder2.GetObject("send_danmu_form") + if err != nil {log.Println(err);return} + if tmp,ok := obj.(*gtk.Entry); ok { + tmp.Connect("focus-out-event", func() { + if t,e := tmp.GetText();e == nil && t != ``{ + danmu_send_form = t + log.Println("弹幕格式已设置为",danmu_send_form) + } + }) + }else{log.Println("cant find #send_danmu in .glade");return} + } + obj, err := builder2.GetObject("send_danmu") + if err != nil {log.Println(err);return} + if tmp,ok := obj.(*gtk.Entry); ok { + tmp.Connect("key-release-event", func(entry *gtk.Entry, event *gdk.Event) { + eventKey := gdk.EventKeyNewFromEvent(event) + if eventKey.KeyVal() == gdk.KEY_Return { + if t,e := entry.GetText();e == nil && t != ``{ + danmu_want_send := t + if danmu_send_form != `` {danmu_want_send = strings.ReplaceAll(danmu_send_form, "{D}", t)} + if len([]rune(danmu_want_send)) > 20 { + log.Println(`弹幕长度大于20,不做格式处理`) + danmu_want_send = t + } + Msg_senddanmu(danmu_want_send) + entry.SetText(``) + } + } + }) + }else{log.Println("cant find #send_danmu in .glade");return} + } {//房间id obj, err := builder2.GetObject("want_room_id") if err != nil {log.Println(err);return} @@ -167,7 +202,9 @@ func Gtk_danmu() { y(`输入错误`,load_face("0room")) } else { c.Roomid = i - c.Danmu_Main_mq.Push(`change_room`) + c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ + Class:`change_room`, + }) } } else { y(`房间号输入为空`,load_face("0room")) diff --git a/Send/Send.go b/Send/Send.go index 9e76815..45342f0 100644 --- a/Send/Send.go +++ b/Send/Send.go @@ -50,8 +50,7 @@ func Danmu_s(msg,Cookie string, roomid int) { } } - PostStr := `color=16777215&fontsize=25&mode=1&msg=` + msg + `&rnd=` + strconv.Itoa(int(p.Sys().GetMTime())) + `&roomid=` + strconv.Itoa(roomid) + `&bubble=0&csrf_token=` + csrf + `&csrf=` + csrf - + 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 l.I("发送", msg, "至", roomid) r := p.Req() err := r.Reqf(p.Rval{ @@ -59,6 +58,16 @@ func Danmu_s(msg,Cookie string, roomid int) { PostStr:PostStr, Timeout:5, Header:map[string]string{ + `Host`: `api.live.bilibili.com`, + `User-Agent`: `Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0`, + `Accept`: `application/json, text/javascript, */*; q=0.01`, + `Accept-Language`: `zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2`, + `Accept-Encoding`: `gzip, deflate, br`, + `Content-Type`: `application/x-www-form-urlencoded; charset=UTF-8`, + `Origin`: `https://live.bilibili.com`, + `Connection`: `keep-alive`, + `Pragma`: `no-cache`, + `Cache-Control`: `no-cache`, `Referer`:"https://live.bilibili.com/" + strconv.Itoa(roomid), `Cookie`:Cookie, }, diff --git a/bili_danmu.go b/bili_danmu.go index 3d2b6de..b4d41c5 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -59,7 +59,8 @@ func Demo(roomid ...int) { ) for { data,sig = c.Danmu_Main_mq.Pull(sig) - if data.(string) != `change_room` {continue} + if d,ok := data.(c.Danmu_Main_mq_item);!ok || d.Class != `change_room` {continue} + c.Rev = 0 //营收 change_room_chan <- true } }() diff --git a/demo/ui/2.glade b/demo/ui/2.glade index c59ee50..a3d8610 100644 --- a/demo/ui/2.glade +++ b/demo/ui/2.glade @@ -26,10 +26,12 @@ True False + 2 + 2 2 2 vertical - 3 + 4 2 @@ -38,7 +40,7 @@ 2 2 True - False + True True @@ -47,7 +49,7 @@ True True 3 - 2 + 3 True @@ -194,6 +196,8 @@ True False + 2 + 2 2 @@ -201,6 +205,81 @@ 1 + + + True + True + True + + + True + False + + + True + True + 3 + True + 20 + True + True + 回车发送 + + + 1 + 0 + + + + + True + False + 内容 + 6 + + + 0 + 0 + + + + + True + False + 格式 + + + 0 + 1 + + + + + True + True + 3 + {D}由内容替换后发送,本项可为空 + + + 1 + 1 + + + + + + + True + False + 发送弹幕 + + + + + 0 + 3 + + -- 2.39.2