"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,//反射型弹幕机,回应弹幕
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
"的":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}
}
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");
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){
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) {
msglog.E("roomid", roomid)
return
} else {
+ {//附加功能 obs结束
+ Obs_R(false)
+ Obsf(false)
+ }
if p.Sys().Type(roomid) == "float64" {
msglog.I("房间", int(roomid.(float64)), "下播了")
return
msglog.E("roomid", roomid)
return
} else {
+ {//附加功能 obs录播
+ Obsf(true)
+ Obs_R(true)
+ }
if p.Sys().Type(roomid) == "float64" {
msglog.I("房间", int(roomid.(float64)), "开播了")
return
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)
}
}
}
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
自动化功能、挑选有价值的弹幕
//功能开关
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,//刷屏缩减,相同合并
//传输变量至Msg,以便响应弹幕"弹幕机在么"
Msg_roomid = api.Roomid
Msg_cookie = f
- Danmuji_auto(1)
+ {//附加功能 弹幕机
+ Danmuji_auto(1)
+ }
}
}()
}
-
+
var isclose bool
for !isclose {
select {
}
danmulog.I("结束退出")
- os.Exit(0)
}
}
菜
垃圾
媳妇的妹换衣服 点我免费
+﹏来﹏签﹏铭﹏少籹免费
+﹏来﹏签﹏名﹏婕光了啊免费
0123456789
\ No newline at end of file
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 => ../
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=
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=