From 0229414e57825991dab64267d5f96244f5438da4 Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 24 Apr 2023 22:30:56 +0800 Subject: [PATCH] =?utf8?q?Fix=20=E4=BF=9D=E5=AD=98=E5=BC=B9=E5=B9=95?= =?utf8?q?=E8=87=B3sqlite?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- README.md | 1 - Reply/F.go | 60 +++++++++++++++++++++++++++++++++++++++++++++++- Reply/Reply.go | 14 +++-------- bili_danmu.go | 2 -- go.mod | 17 +++++++++++++- go.sum | 38 +++++++++++++++++++++++++++++- plugin/plugin.go | 22 ------------------ 7 files changed, 115 insertions(+), 39 deletions(-) delete mode 100644 plugin/plugin.go diff --git a/README.md b/README.md index 41f2bd0..f11fc02 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,6 @@ #### 保存弹幕至sqlite 配置文件中`保存弹幕至sqlite`,如果设置了文件路径,如`a.sqlite3`,将会在工作目录生成`a.sqlite3`,并记录弹幕。 -这是一个插件,构建方式可能变化,请查看[SaveDanmuToSqlite3](https://pkg.go.dev/github.com/qydysky/bili_danmu_plugin#SaveDanmuToSqlite3) #### 指定房间录制回调 配置文件添加了如下配置 diff --git a/Reply/F.go b/Reply/F.go index 40c971a..88daa05 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -18,9 +18,11 @@ import ( "sync/atomic" "time" - // "runtime" + "database/sql" + psql "github.com/qydysky/part/sqlite" "golang.org/x/text/encoding/simplifiedchinese" + _ "modernc.org/sqlite" "github.com/dustin/go-humanize" c "github.com/qydysky/bili_danmu/CV" @@ -1546,3 +1548,59 @@ func (t *DanmuReLiveTriger) Check(uid, msg string) { } } } + +// 保存弹幕至sqlite +var saveDanmuToSqlite3 SaveDanmuToSqlite3 + +type SaveDanmuToSqlite3 struct { + db *sql.DB + sync.Once +} + +func (t *SaveDanmuToSqlite3) init(c *c.Common) { + t.Do(func() { + if v, ok := c.K_v.LoadV(`保存弹幕至sqlite`).(string); ok && v != "" { + if db, e := sql.Open("sqlite3", v); e != nil { + panic(e) + } else { + t.db = db + } + + ctx := context.Background() + tx := psql.BeginTx[any](t.db, ctx, &sql.TxOptions{}) + tx = tx.Do(psql.SqlFunc[any]{ + Ty: psql.Execf, + Ctx: ctx, + Query: "create table danmu (created text, createdunix text, msg text, color text, auth text, uid text, roomid text)", + SkipSqlErr: true, + }) + if e := tx.Fin(); e != nil { + panic(e) + } + } + }) +} + +func (t *SaveDanmuToSqlite3) danmu(item Danmu_item) { + if t.db != nil { + ctx := context.Background() + tx := psql.BeginTx[any](t.db, ctx, &sql.TxOptions{}) + tx = tx.Do(psql.SqlFunc[any]{ + Ty: psql.Execf, + Ctx: ctx, + Query: "insert into danmu values (?, ?, ?, ?, ?, ?, ?)", + Args: []any{time.Now().Format(time.DateTime), time.Now().Unix(), item.msg, item.color, item.auth, item.uid, item.roomid}, + AfterEF: func(_ *any, result sql.Result, txE error) (_ *any, stopErr error) { + if v, e := result.RowsAffected(); e != nil { + return nil, e + } else if v != 1 { + return nil, errors.New("插入数量错误") + } + return nil, nil + }, + }) + if e := tx.Fin(); e != nil { + c.C.Log.Base_add("保存弹幕至sqlite").L(`E: `, e) + } + } +} diff --git a/Reply/Reply.go b/Reply/Reply.go index d3b2cee..514665d 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -14,7 +14,6 @@ import ( F "github.com/qydysky/bili_danmu/F" ws_msg "github.com/qydysky/bili_danmu/Reply/ws_msg" send "github.com/qydysky/bili_danmu/Send" - plugin "github.com/qydysky/bili_danmu/plugin" p "github.com/qydysky/part" mq "github.com/qydysky/part/msgq" pstrings "github.com/qydysky/part/strings" @@ -1093,16 +1092,9 @@ func (replyF) danmu(s string) { msglog := msglog.Log_show_control(false) { // 附加功能 弹幕机 封禁 弹幕合并 - // 传送Danmu - plugin.Plugin.Push_tag(`Danmu`, plugin.Danmu{ - Msg: item.msg, - Color: item.color, - Border: item.border, - Mode: item.mode, - Auth: item.auth, - Uid: item.uid, - Roomid: item.roomid, - }) + // 保存弹幕至sqlite + saveDanmuToSqlite3.init(c.C) + saveDanmuToSqlite3.danmu(item) // 对指定弹幕重新录制 danmuReLiveTriger.Init(c.C) danmuReLiveTriger.Check(item.uid, item.msg) diff --git a/bili_danmu.go b/bili_danmu.go index 618b529..eb42aca 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -15,7 +15,6 @@ import ( reply "github.com/qydysky/bili_danmu/Reply" send "github.com/qydysky/bili_danmu/Send" Cmd "github.com/qydysky/bili_danmu/cmd" - plugin "github.com/qydysky/bili_danmu/plugin" sys "github.com/qydysky/part/sys" msgq "github.com/qydysky/part/msgq" @@ -76,7 +75,6 @@ func Start() { if c.C.K_v.Len() == 0 { panic("未能加载配置") } - plugin.Plugin.Push_tag(`Event`, plugin.LoadKv) } { diff --git a/go.mod b/go.mod index adab188..a2171db 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,21 @@ require ( require golang.org/x/exp v0.0.0-20230420155640-133eef4313cb -require github.com/pmezard/go-difflib v1.0.0 // indirect +require ( + github.com/google/uuid v1.3.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + lukechampine.com/uint128 v1.2.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.4 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.0.1 // indirect +) require ( github.com/andybalholm/brotli v1.0.5 @@ -34,5 +48,6 @@ require ( golang.org/x/sys v0.7.0 // indirect golang.org/x/tools v0.8.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + modernc.org/sqlite v1.22.0 rsc.io/qr v0.2.0 // indirect ) diff --git a/go.sum b/go.sum index 6ff0420..daae466 100644 --- a/go.sum +++ b/go.sum @@ -8,23 +8,34 @@ github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gotk3/gotk3 v0.6.1 h1:GJ400a0ecEEWrzjBvzBzH+pB/esEMIGdB9zPSmBdoeo= github.com/gotk3/gotk3 v0.6.1/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= github.com/klauspost/compress v1.16.4/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ= github.com/mdp/qrterminal/v3 v3.0.0 h1:ywQqLRBXWTktytQNDKFjhAvoGkLVN3J2tAFZ0kMd9xQ= github.com/mdp/qrterminal/v3 v3.0.0/go.mod h1:NJpfAs7OAm77Dy8EkWrtE4aq+cE6McoLXlBqXQEwvE0= github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw= github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/qydysky/part v0.24.16 h1:w+dqb0pacS8bYkLi8pb0wY0sz4q5TCsdEmiO0g9EYeM= github.com/qydysky/part v0.24.16/go.mod h1:vZgRwVF/3s1R07lJO3lbnyfFaY/3xeLkkaeFCPpzjlI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= @@ -49,6 +60,7 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -59,5 +71,29 @@ golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/libc v1.22.4 h1:wymSbZb0AlrjdAVX3cjreCHTPCpPARbQXNz6BHPzdwQ= +modernc.org/libc v1.22.4/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.22.0 h1:Uo+wEWePCspy4SAu0w2VbzUHEftOs7yoaWX/cYjsq84= +modernc.org/sqlite v1.22.0/go.mod h1:cxbLkB5WS32DnQqeH4h4o1B0eMr8W/y8/RGuxQ3JsC0= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws= +modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= diff --git a/plugin/plugin.go b/plugin/plugin.go deleted file mode 100644 index 4ce4c5a..0000000 --- a/plugin/plugin.go +++ /dev/null @@ -1,22 +0,0 @@ -package plugin - -import ( - msgq "github.com/qydysky/part/msgq" -) - -// Event -const ( - LoadKv = iota -) - -var Plugin msgq.Msgq - -type Danmu struct { - Msg string - Color string - Border bool - Mode int - Auth any - Uid string - Roomid int -} -- 2.39.2