]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
17
authorqydysky <qydysky@foxmail.com>
Mon, 21 Sep 2020 05:51:41 +0000 (13:51 +0800)
committerqydysky <qydysky@foxmail.com>
Mon, 21 Sep 2020 05:51:41 +0000 (13:51 +0800)
F.go
Msg.go
README.md
bili_danmu.go
demo/Autoban.txt
demo/go.mod
demo/go.sum

diff --git a/F.go b/F.go
index fb934b2bf2945d4a0eb60a07f0810158861b9854..7dac9a1a935a40b9133b9b69c09164ff84b68759 100644 (file)
--- 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 1977b1761a4f820cea9a8f11dff5533361b3ea91..8ba1d979bf6b335b30bf22f6d1f638eb21df22b4 100644 (file)
--- 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
index 590b4118e66e06e705145365291cfca14249067a..c16fe62607c8f01cd769018a49ee10e7e9abaf71 100644 (file)
--- 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,//刷屏缩减,相同合并
index 56249f4bbc9dac514e3d637b6732f6de71e0e28d..5e0980f1f2a7069ffc48201aae1f9fa77702b4c4 100644 (file)
@@ -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)
        }
 }
 
index 5561f9a600e1fe01e99b59bf4eb2e3fcb204ef4e..8f63069a7d4c8ba14f5a655b5a84fdb6ad2fcc90 100644 (file)
@@ -7,4 +7,6 @@
 菜
 垃圾
 媳妇的妹换衣服 点我免费
+﹏来﹏签﹏铭﹏少籹免费
+﹏来﹏签﹏名﹏婕光了啊免费
 0123456789
\ No newline at end of file
index 95fd393332969e9347656fc7daaef112ad17f0df..aeae4e153530ff44880a875c4759b03e36f41d2e 100644 (file)
@@ -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 => ../
index 98cf7002a97359103895003fa7b79aee8b1a2d96..8476537022767f0eb91a5c1f63e8617423db91ea 100644 (file)
@@ -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=