From a378d6ed8bae908f96de368eea0552d6c523ed28 Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 21 Sep 2020 13:51:41 +0800 Subject: [PATCH] 17 --- F.go | 99 +++++++++++++++++++++++++++++++++++++++++++++++- Msg.go | 57 ++++++++++++++++------------ README.md | 9 ++++- bili_danmu.go | 7 ++-- demo/Autoban.txt | 2 + demo/go.mod | 5 ++- demo/go.sum | 5 +++ 7 files changed, 153 insertions(+), 31 deletions(-) diff --git a/F.go b/F.go index fb934b2..7dac9a1 100644 --- a/F.go +++ b/F.go @@ -6,12 +6,20 @@ import ( "strings" "sync" "time" + "os/exec" + "github.com/christopher-dG/go-obs-websocket" p "github.com/qydysky/part" -) +) //功能开关 var AllF = map[string]bool{ + "Obs":true,//obs组件(仅录播) + /* + Obs需要外部组件: + obs https://obsproject.com/wiki/install-instructions#debian-based-build-directions + obs-websocket https://github.com/Palakis/obs-websocket/releases + */ "Autoban":true,//自动封禁(仅提示,未完成) "Jiezou":true,//带节奏预警,提示弹幕礼仪 "Danmuji":true,//反射型弹幕机,回应弹幕 @@ -75,6 +83,91 @@ func selfcross2(a []string) (float32, string) { return max / all, maxS } //功能区 +type Obs struct { + Inuse bool + c obsws.Client + Prog string//程序路径 +} + +var obs = Obs { + Inuse:IsOn("Obs"), + c:obsws.Client{Host: "127.0.0.1", Port: 4444}, + Prog:"obs", +} + +func Obsf(on bool){ + if !obs.Inuse {return} + l := p.Logf().New().Open("danmu.log").Base(1, "obs") + + if on { + if p.Sys().CheckProgram("obs")[0] != 0 {l.W("obs已经启动");return} + if p.Sys().CheckProgram("obs")[0] == 0 { + if obs.Prog == "" { + l.E("未知的obs程序位置") + return + } + l.I("启动obs") + p.Exec().Startf(exec.Command(obs.Prog)) + p.Sys().Timeoutf(3) + } + + // Connect a client. + if err := obs.c.Connect(); err != nil { + l.E(err) + return + } + } else { + if p.Sys().CheckProgram("obs")[0] == 0 {l.W("obs未启动");return} + obs.c.Disconnect() + } +} + +func Obs_R(on bool){ + if !obs.Inuse {return} + + l := p.Logf().New().Open("danmu.log").Base(1, "obs_R") + if p.Sys().CheckProgram("obs")[0] == 0 { + l.W("obs未启动") + return + } else { + if err := obs.c.Connect(); err != nil { + l.E(err) + return + } + } + //录 + if on { + req := obsws.NewStartRecordingRequest() + if err := req.Send(obs.c); err != nil { + l.E(err) + return + } + resp, err := req.Receive() + if err != nil { + l.E(err) + return + } + if resp.Status() == "ok" { + l.I("开始录制") + } + } else { + req := obsws.NewStopRecordingRequest() + if err := req.Send(obs.c); err != nil { + l.E(err) + return + } + resp, err := req.Receive() + if err != nil { + l.E(err) + return + } + if resp.Status() == "ok" { + l.I("停止录制") + } + p.Sys().Timeoutf(3) + } +} + type Autoban struct { Banbuf []string buf []string @@ -335,13 +428,15 @@ var jiezou = Jiezou{ "的":nil, "哈":nil, "是":nil, + ",":nil, + "这":nil, }, } func Jiezouf(s []string) bool { if !jiezou.Inuse {return false} now,S := selfcross2(s) - jiezou.avg = (9 * jiezou.avg + now)/10 + jiezou.avg = (8 * jiezou.avg + 2 * now)/10 if jiezou.turn < len(s) {jiezou.turn += 1;return false} if _,ok := jiezou.skipS[S]; ok {return false} diff --git a/Msg.go b/Msg.go index 1977b17..8ba1d97 100644 --- a/Msg.go +++ b/Msg.go @@ -107,9 +107,6 @@ func (replayF) special_gift(s string){ } func (replayF) guard_buy(s string){ - msglog.Fileonly(true).Base(-1, "礼") - defer msglog.Base(0).Fileonly(false) - username := p.Json().GetValFromS(s, "data.username"); gift_name := p.Json().GetValFromS(s, "data.gift_name"); price := p.Json().GetValFromS(s, "data.price"); @@ -129,8 +126,10 @@ func (replayF) guard_buy(s string){ fmt.Println("\n====") fmt.Println(sh...) fmt.Print("====\n\n") - msglog.I(sh...) + msglog.Fileonly(true) + defer msglog.Fileonly(false) + msglog.Base(1, "礼").I(sh...) } func (replayF) room_change(s string){ @@ -203,16 +202,16 @@ func (replayF) send_gift(s string){ if len(sh) == 0 {return} - msglog.Fileonly(true).Base(-1, "礼") - defer msglog.Base(0).Fileonly(false) - //小于3万金瓜子 if allprice < 30000 {msglog.T(sh...);return} fmt.Println("\n====") fmt.Println(sh...) fmt.Print("====\n\n") - msglog.I(sh...) + + msglog.Fileonly(true) + defer msglog.Fileonly(false) + msglog.Base(1, "礼").I(sh...) } func (replayF) room_block_msg(s string) { @@ -235,6 +234,10 @@ func (replayF) preparing(s string) { msglog.E("roomid", roomid) return } else { + {//附加功能 obs结束 + Obs_R(false) + Obsf(false) + } if p.Sys().Type(roomid) == "float64" { msglog.I("房间", int(roomid.(float64)), "下播了") return @@ -250,6 +253,10 @@ func (replayF) live(s string) { msglog.E("roomid", roomid) return } else { + {//附加功能 obs录播 + Obsf(true) + Obs_R(true) + } if p.Sys().Type(roomid) == "float64" { msglog.I("房间", int(roomid.(float64)), "开播了") return @@ -354,18 +361,18 @@ func (replayF) danmu(s string) { msglog.Fileonly(true) defer msglog.Fileonly(false) - //F附加方法 - Danmujif(msg) - if Autobanf(msg) { - fmt.Println("风险", msg) - msglog.Base(1, "风险").I(msg) - return - } - if i := Autoskipf(msg, 50, 15); i > 0 { - msglog.I(auth, ":", msg) - return + {//附加功能 弹幕机 封禁 弹幕合并 + Danmujif(msg) + if Autobanf(msg) { + fmt.Println("风险", msg) + msglog.Base(1, "风险").I(msg) + return + } + if i := Autoskipf(msg, 50, 15); i > 0 { + msglog.I(auth, ":", msg) + return + } } - Msg_showdanmu(auth, msg) } } @@ -376,11 +383,13 @@ func Msg_senddanmu(msg string){ } func Msg_showdanmu(auth interface{}, msg string) { - if Lessdanmuf(msg, 20) > 0.7 {//与前20条弹幕重复的字数占比度>0.7的屏蔽 - if auth != nil {msglog.I(auth, ":", msg)} - return + {//附加功能 更少弹幕 + if Lessdanmuf(msg, 20) > 0.7 {//与前20条弹幕重复的字数占比度>0.7的屏蔽 + if auth != nil {msglog.I(auth, ":", msg)} + return + } + msg = Shortdanmuf(msg) } - - fmt.Println(Shortdanmuf(msg)) + fmt.Println(msg) if auth != nil {msglog.I(auth, ":", msg)} } \ No newline at end of file diff --git a/README.md b/README.md index 590b411..c16fe62 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,14 @@ var Msg_map = map[string]func(replayF, string) { 自动化功能、挑选有价值的弹幕 //功能开关 var AllF = map[string]bool{ - "Autoban":false,//自动封禁(仅提示,未完成) + "Obs":true,//obs组件(录播) + /* + Obs需要外部组件: + obs https://obsproject.com/wiki/install-instructions#debian-based-build-directions + obs-websocket https://github.com/Palakis/obs-websocket/releases + */ + "Autoban":true,//自动封禁(仅提示,未完成) + "Jiezou":true,//带节奏预警,提示弹幕礼仪 "Danmuji":true,//反射型弹幕机,回应弹幕 "Danmuji_auto":false,//自动型弹幕机,定时输出 "Autoskip":true,//刷屏缩减,相同合并 diff --git a/bili_danmu.go b/bili_danmu.go index 56249f4..5e0980f 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -78,11 +78,13 @@ func Demo() { //传输变量至Msg,以便响应弹幕"弹幕机在么" Msg_roomid = api.Roomid Msg_cookie = f - Danmuji_auto(1) + {//附加功能 弹幕机 + Danmuji_auto(1) + } } }() } - + var isclose bool for !isclose { select { @@ -107,7 +109,6 @@ func Demo() { } danmulog.I("结束退出") - os.Exit(0) } } diff --git a/demo/Autoban.txt b/demo/Autoban.txt index 5561f9a..8f63069 100644 --- a/demo/Autoban.txt +++ b/demo/Autoban.txt @@ -7,4 +7,6 @@ 菜 垃圾 媳妇的妹换衣服 点我免费 +﹏来﹏签﹏铭﹏少籹免费 +﹏来﹏签﹏名﹏婕光了啊免费 0123456789 \ No newline at end of file diff --git a/demo/go.mod b/demo/go.mod index 95fd393..aeae4e1 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -2,6 +2,9 @@ module github.com/qydysky/bili_danmu/demo go 1.14 -require github.com/qydysky/bili_danmu v0.0.0-20200914143111-fe17ba7dd5a9 +require ( + github.com/christopher-dG/go-obs-websocket v0.0.0-20200720193653-c4fed10356a5 // indirect + github.com/qydysky/bili_danmu v0.0.0-20200914143111-fe17ba7dd5a9 +) replace github.com/qydysky/bili_danmu => ../ diff --git a/demo/go.sum b/demo/go.sum index 98cf700..8476537 100644 --- a/demo/go.sum +++ b/demo/go.sum @@ -1,7 +1,10 @@ github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/christopher-dG/go-obs-websocket v0.0.0-20200720193653-c4fed10356a5 h1:UFBgEMSPv6a2vgzowHOPphVit+ZBNQ3+4Q+dEBgwIww= +github.com/christopher-dG/go-obs-websocket v0.0.0-20200720193653-c4fed10356a5/go.mod h1:P5w+dDqQEbCMFAkmucNcEQ6xgAt/NP+Aw58OQfY/H/o= github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -9,6 +12,8 @@ github.com/klauspost/compress v1.11.0 h1:wJbzvpYMVGG9iTI9VxpnNZfd4DzMPoCWze3GgSq github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo= github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/qydysky/bili_danmu v0.0.0-20200914124700-b89028b3554c h1:iFyG6L41DwT1CS16Ddi2/vjnnKLfL0TC6L6BuYcPnSo= github.com/qydysky/bili_danmu v0.0.0-20200914124700-b89028b3554c/go.mod h1:hejetn5M5YL0dZpEBtswTWEOwS9Rq8eRiN3SFco3JXA= github.com/qydysky/bili_danmu v0.0.0-20200914132045-726c917d9f37 h1:U3sncVRe/cKExu8CeWd01l7NQYcSY0HEOTP3OV0NCIY= -- 2.39.2