]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 指定房间录制区间
authorqydysky <qydysky@foxmail.com>
Tue, 9 Jul 2024 23:18:41 +0000 (07:18 +0800)
committerqydysky <qydysky@foxmail.com>
Tue, 9 Jul 2024 23:18:41 +0000 (07:18 +0800)
README.md
Reply/F/recStartEnd/recStartEnd.go
Reply/Reply.go
bili_danmu.go

index 7b0ae4963ba7c51e64fc35ca39e1d58ae2f3dde9..72734bb57f351b216952c4da888f7b05ea25e357 100644 (file)
--- a/README.md
+++ b/README.md
 #### 指定房间录制区间
 配置文件中添加配置项`指定房间录制区间`。
 
-指定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`
index 83c598465ec19fefbefc8771524e5e753536e503..ac57a31aa7ec6b0d9071056fc408c977d5d97457 100644 (file)
@@ -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
index 0f670f15bb68419f87922f7b86449e403cb3b66b..1b5646c9f00fc74d190ef1d9ae72abc0b5160492 100644 (file)
@@ -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)
index ba47c951453aa6817b619ad90febe55f85ea876b..21342fe087b25bb92c2199d683e35ba4bbbb15c9 100644 (file)
@@ -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) },
                        })
                }
                // 指定弹幕重启录制