From c2c51631d5f38f307fd46673485957b435153f8d Mon Sep 17 00:00:00 2001 From: qydysky Date: Wed, 10 Jul 2024 07:18:41 +0800 Subject: [PATCH] =?utf8?q?Improve=20=E6=8C=87=E5=AE=9A=E6=88=BF=E9=97=B4?= =?utf8?q?=E5=BD=95=E5=88=B6=E5=8C=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- Reply/F/recStartEnd/recStartEnd.go | 36 +++++++++++++++++------------- Reply/Reply.go | 2 +- bili_danmu.go | 11 ++++----- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 7b0ae49..72734bb 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ #### 指定房间录制区间 配置文件中添加配置项`指定房间录制区间`。 -指定roomid的房间在指定时间段内将会开启录制。 +指定roomid的房间在指定时间段内将会开启录制。注意:注意先配置主机时区 - `start`时检查是否在直播,是则开始录制,如已在录制则切片。 - `end`时如已在录制则停止录制。 @@ -850,6 +850,7 @@ go build . #### 注意事项 * 其中[]内的内容为可选项 * 法1,2,3建议使用最新提交 +* 程序受主机时区配置影响,注意正确配置主机时区 * 弹幕及礼物会记录于danmu.log中 * 部分功能(如签到、发送弹幕、获取原画等)**需要在`demo`目录(文件夹)下放置`cookie.txt`才可用** 或 **运行时按提示使用扫码登录成功后才可用(登录信息会保存在`demo/cookie.txt`中)** * 在golang1.20+,由于某些[原因](https://github.com/golang/go/issues/57328#issuecomment-1353413399),你可能需要在构建时添加`CGO_ENABLED=0` diff --git a/Reply/F/recStartEnd/recStartEnd.go b/Reply/F/recStartEnd/recStartEnd.go index 83c5984..ac57a31 100644 --- a/Reply/F/recStartEnd/recStartEnd.go +++ b/Reply/F/recStartEnd/recStartEnd.go @@ -10,6 +10,7 @@ import ( c "github.com/qydysky/bili_danmu/CV" comp "github.com/qydysky/part/component" log "github.com/qydysky/part/log" + psync "github.com/qydysky/part/sync" "golang.org/x/exp/slices" ) @@ -104,11 +105,12 @@ func recStartCheck(ctx context.Context, ptr *c.Common) (any, error) { } type StreamCtl struct { - C *c.Common - State func(int) bool - Start func(*c.Common, int) - End func(int) - Cut func(int) + C *c.Common + Commons *psync.Map + State func(int) bool + Start func(*c.Common, int) + End func(int) + Cut func(int) } var streamCtl StreamCtl @@ -137,29 +139,31 @@ func setNextFunc() { } slices.Sort(tmp) - // logg.L(`T: `, "下个时间点", time.Now().Add(time.Second*time.Duration(tmp[0])).Format(time.DateTime)) + // logg.L(`T: `, "下个时间点", time.Second*time.Duration(tmp[0])) time.AfterFunc(time.Second*time.Duration(tmp[0]), func() { - if streamCtl.C.Liveing { - if setting, ok := roomSetting[streamCtl.C.Roomid]; ok { + roomId := streamCtl.C.Roomid + common := streamCtl.Commons.LoadV(roomId).(*c.Common) + if common.Liveing { + if setting, ok := roomSetting[roomId]; ok { now := time.Now() t := now.Hour()*3600 + now.Minute()*60 + now.Second() + 1 for _, v := range setting { if v.start != 0 && math.Abs(float64(t-v.start)) < 5 { - if streamCtl.State(streamCtl.C.Roomid) { - logg.L(`T: `, "切片", streamCtl.C.Roomid) - streamCtl.Cut(streamCtl.C.Roomid) + if streamCtl.State(roomId) { + logg.L(`T: `, "切片", roomId) + streamCtl.Cut(roomId) } else { - logg.L(`T: `, "开始", streamCtl.C.Roomid) - streamCtl.Start(streamCtl.C.Copy(), streamCtl.C.Roomid) + logg.L(`T: `, "开始", roomId) + streamCtl.Start(common, roomId) } time.Sleep(time.Second * 5) break } if v.end != 0 && math.Abs(float64(t-v.end)) < 5 { - if streamCtl.State(streamCtl.C.Roomid) { - logg.L(`T: `, "结束", streamCtl.C.Roomid) - streamCtl.End(streamCtl.C.Roomid) + if streamCtl.State(roomId) { + logg.L(`T: `, "结束", roomId) + streamCtl.End(roomId) } time.Sleep(time.Second * 5) break diff --git a/Reply/Reply.go b/Reply/Reply.go index 0f670f1..1b5646c 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -879,7 +879,7 @@ func (t replyF) live(s string) { } if _, e := recStartEnd.RecStartCheck.Run(context.Background(), t.Common); e == nil { if !StreamOStatus(t.Common.Roomid) { - StreamOStart(t.Common.Copy(), t.Common.Roomid) + StreamOStart(t.Common, t.Common.Roomid) } } else { msglog.L(`W: `, "房间", type_item.Roomid, e) diff --git a/bili_danmu.go b/bili_danmu.go index ba47c95..21342fe 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -103,11 +103,12 @@ func Start() { danmulog.Base("功能", "指定房间录制区间").L(`E: `, err) } else { _, _ = recStartEnd.LoopCheck.Run(mainCtx, recStartEnd.StreamCtl{ - C: c.C, - State: reply.StreamOStatus, - Start: reply.StreamOStart, - End: reply.StreamOStop, - Cut: func(i int) { reply.StreamOCut(i) }, + C: c.C, + Commons: c.Commons, + State: reply.StreamOStatus, + Start: reply.StreamOStart, + End: reply.StreamOStop, + Cut: func(i int) { reply.StreamOCut(i) }, }) } // 指定弹幕重启录制 -- 2.39.2