From 8e1d7ba916c25a1170e5cb16694e19dc84a346b2 Mon Sep 17 00:00:00 2001 From: qydysky Date: Wed, 26 Apr 2023 01:14:20 +0000 Subject: [PATCH] =?utf8?q?Improve=20=E8=AF=B4=E6=98=8E=E4=BF=AE=E6=AD=A3?= =?utf8?q?=EF=BC=8C=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++--- Reply/F.go | 10 ++++---- Reply/F_test.go | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ Reply/Reply.go | 6 ++--- 4 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 Reply/F_test.go diff --git a/README.md b/README.md index 656aaf5..21aca04 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ ### 说明 本项目使用github action自动构建,构建过程详见[yml](https://github.com/qydysky/bili_danmu/blob/master/.github/workflows/go.yml) -#### 保存弹幕至db +#### 保存弹幕至DB 配置文件中添加配置项`保存弹幕至db`。参考以下实例: mysql: @@ -91,7 +91,7 @@ mysql: sqlite3: -注意:对不要并发连接,可能会导致失败 +注意:不要并发连接数据库,可能会导致失败 ```json { "保存弹幕至db": { @@ -104,7 +104,7 @@ sqlite3: } ``` -实例: +数据实例: |created|createdunix|msg|color|auth|uid|roomid| |-------|-----------|---|-----|----|---|------| diff --git a/Reply/F.go b/Reply/F.go index d75f3c0..30eac01 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -1549,16 +1549,16 @@ func (t *DanmuReLiveTriger) Check(uid, msg string) { } } -// 保存弹幕至mysql -var saveDanmuToMysql SaveDanmuToMysql +// 保存弹幕至db +var saveDanmuToDB SaveDanmuToDB -type SaveDanmuToMysql struct { +type SaveDanmuToDB struct { db *sql.DB insert string sync.Once } -func (t *SaveDanmuToMysql) init(c *c.Common) { +func (t *SaveDanmuToDB) init(c *c.Common) { t.Do(func() { if v, ok := c.K_v.LoadV(`保存弹幕至db`).(map[string]any); ok && len(v) != 0 { var ( @@ -1595,7 +1595,7 @@ func (t *SaveDanmuToMysql) init(c *c.Common) { }) } -func (t *SaveDanmuToMysql) danmu(item Danmu_item) { +func (t *SaveDanmuToDB) danmu(item Danmu_item) { if t.db == nil { return } diff --git a/Reply/F_test.go b/Reply/F_test.go new file mode 100644 index 0000000..5d4c51b --- /dev/null +++ b/Reply/F_test.go @@ -0,0 +1,64 @@ +package reply + +import ( + "context" + "database/sql" + "errors" + "fmt" + "testing" + + c "github.com/qydysky/bili_danmu/CV" + file "github.com/qydysky/part/file" + psql "github.com/qydysky/part/sqlite" +) + +func TestSaveDanmuToDB(t *testing.T) { + var common = c.Common{} + common.K_v.Store(`保存弹幕至db`, map[string]any{ + "dbname": "sqlite", + "url": "danmu.sqlite3", + "create": "create table danmu (created text, createdunix text, msg text, color text, auth text, uid text, roomid text)", + "insert": "insert into danmu values (?,?,?,?,?,?,?)", + }) + saveDanmuToDB.init(&common) + saveDanmuToDB.danmu(Danmu_item{ + msg: "可能走位配合了他的压枪", + color: "#54eed8", + auth: "畏未", + uid: "96767379", + roomid: 92613, + }) + + if db, e := sql.Open("sqlite", "danmu.sqlite3"); e != nil { + t.Fatal(e) + } else { + if e := psql.BeginTx[any](db, context.Background(), &sql.TxOptions{}).Do(psql.SqlFunc[any]{ + Ty: psql.Queryf, + Query: "select msg from danmu", + AfterQF: func(_ *any, rows *sql.Rows, txE error) (_ *any, stopErr error) { + var count = 0 + for rows.Next() { + count += 1 + var msg string + if e := rows.Scan(&msg); e != nil { + return nil, e + } + if msg != "可能走位配合了他的压枪" { + return nil, errors.New("no msg") + } + } + if count != 1 { + return nil, fmt.Errorf("no count %d", count) + } + return nil, nil + }, + }).Fin(); e != nil { + t.Fatal(e) + } + db.Close() + } + + if e := file.New("danmu.sqlite3", 0, true).Delete(); e != nil { + t.Fatal(e) + } +} diff --git a/Reply/Reply.go b/Reply/Reply.go index 3bfc39d..c1fd27b 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -1092,9 +1092,9 @@ func (replyF) danmu(s string) { msglog := msglog.Log_show_control(false) { // 附加功能 弹幕机 封禁 弹幕合并 - // 保存弹幕至sqlite - saveDanmuToMysql.init(c.C) - saveDanmuToMysql.danmu(item) + // 保存弹幕至db + saveDanmuToDB.init(c.C) + saveDanmuToDB.danmu(item) // 对指定弹幕重新录制 danmuReLiveTriger.Init(c.C) danmuReLiveTriger.Check(item.uid, item.msg) -- 2.39.2