From 2f3823abe2cf0435f32dcb1306f5df7de6c10423 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Sat, 19 Mar 2022 11:29:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E8=88=94=E7=8B=97?= =?UTF-8?q?=E6=97=A5=E8=AE=B0=E5=92=8C=E4=BF=AE=E5=A4=8D=E7=9D=A1=E7=9C=A0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9A=84=E9=97=AE=E9=A2=98=20(#152)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:添加舔狗日记和修复睡眠管理的问题 * fix:修lint * fix:修改铅笔小说网址 * fix:修改铅笔小说网址 --- README.md | 2 + main.go | 1 + plugin/novel/qianbi.go | 4 +- plugin/sleep_manage/{model => }/model.go | 37 +++++++--------- plugin/sleep_manage/sleep_manage.go | 23 +++------- plugin/tiangou/tiangou.go | 54 ++++++++++++++++++++++++ 6 files changed, 80 insertions(+), 41 deletions(-) rename plugin/sleep_manage/{model => }/model.go (82%) create mode 100644 plugin/tiangou/tiangou.go diff --git a/README.md b/README.md index eba3e381..d4b3c9c1 100644 --- a/README.md +++ b/README.md @@ -361,6 +361,8 @@ print("run[CQ:image,file="+j["img"]+"]") - api早上8点更新,推荐定时在8点30后。配合插件`job`中的记录在"cron"触发的指令使用 - [x] /启用 zaobao - [x] /禁用 zaobao +- **舔狗日记** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou"` + - [x] 舔狗日记 ``` 记录在"00 9 * * *"触发的指令 今日早报 diff --git a/main.go b/main.go index ba73d608..66a5681e 100644 --- a/main.go +++ b/main.go @@ -100,6 +100,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/setutime" // 来份涩图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao" // 沙雕app _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shindan" // 测定 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou" // 舔狗日记 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tracemoe" // 搜番 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation" // 翻译 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/vtb_quotation" // vtb语录 diff --git a/plugin/novel/qianbi.go b/plugin/novel/qianbi.go index 5de16299..4f929beb 100644 --- a/plugin/novel/qianbi.go +++ b/plugin/novel/qianbi.go @@ -25,14 +25,14 @@ import ( ) const ( - websiteURL = "https://www.23qb.net" + websiteURL = "https://www.23qb.com" websiteTitle = "铅笔小说" errorTitle = "出现错误!" username = "zerobot" password = "123456" submit = "%26%23160%3B%B5%C7%26%23160%3B%26%23160%3B%C2%BC%26%23160%3B" ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" - loginURL = websiteURL + "/login.php?do=submit&jumpurl=https%3A%2F%2Fwww.23qb.net%2F" + loginURL = websiteURL + "/login.php?do=submit&jumpurl=https%3A%2F%2Fwww.23qb.com%2F" searchURL = websiteURL + "/saerch.php" idReg = `/(\d+)/` ) diff --git a/plugin/sleep_manage/model/model.go b/plugin/sleep_manage/model.go similarity index 82% rename from plugin/sleep_manage/model/model.go rename to plugin/sleep_manage/model.go index fccae455..140d4a38 100644 --- a/plugin/sleep_manage/model/model.go +++ b/plugin/sleep_manage/model.go @@ -1,5 +1,4 @@ -// Package model 睡眠管理数据库 -package model +package sleepmanage import ( "os" @@ -10,11 +9,14 @@ import ( log "github.com/sirupsen/logrus" ) -// SleepDB 睡眠数据库 -type SleepDB gorm.DB +// sdb 睡眠数据库全局变量 +var sdb *sleepdb -// Initialize 初始化 -func Initialize(dbpath string) *SleepDB { +// sleepdb 睡眠数据库结构体 +type sleepdb gorm.DB + +// initialize 初始化 +func initialize(dbpath string) *sleepdb { var err error if _, err = os.Stat(dbpath); err != nil || os.IsNotExist(err) { // 生成文件 @@ -29,27 +31,18 @@ func Initialize(dbpath string) *SleepDB { panic(err) } gdb.AutoMigrate(&SleepManage{}) - return (*SleepDB)(gdb) -} - -// Open 打开 -func Open(dbpath string) (*SleepDB, error) { - db, err := gorm.Open("sqlite3", dbpath) - if err != nil { - return nil, err - } - return (*SleepDB)(db), nil + return (*sleepdb)(gdb) } // Close 关闭 -func (sdb *SleepDB) Close() error { +func (sdb *sleepdb) Close() error { db := (*gorm.DB)(sdb) return db.Close() } // SleepManage 睡眠信息 type SleepManage struct { - gorm.Model + ID uint `gorm:"primary_key"` GroupID int64 `gorm:"column:group_id"` UserID int64 `gorm:"column:user_id"` SleepTime time.Time `gorm:"column:sleep_time"` @@ -60,8 +53,8 @@ func (SleepManage) TableName() string { return "sleep_manage" } -// Sleep 更新睡眠时间 -func (sdb *SleepDB) Sleep(gid, uid int64) (position int, awakeTime time.Duration) { +// sleep 更新睡眠时间 +func (sdb *sleepdb) sleep(gid, uid int64) (position int, awakeTime time.Duration) { db := (*gorm.DB)(sdb) now := time.Now() var today time.Time @@ -92,8 +85,8 @@ func (sdb *SleepDB) Sleep(gid, uid int64) (position int, awakeTime time.Duration return position, awakeTime } -// GetUp 更新起床时间 -func (sdb *SleepDB) GetUp(gid, uid int64) (position int, sleepTime time.Duration) { +// getUp 更新起床时间 +func (sdb *sleepdb) getUp(gid, uid int64) (position int, sleepTime time.Duration) { db := (*gorm.DB)(sdb) now := time.Now() today := now.Add(-time.Hour*time.Duration(-6+now.Hour()) - time.Minute*time.Duration(now.Minute()) - time.Second*time.Duration(now.Second())) diff --git a/plugin/sleep_manage/sleep_manage.go b/plugin/sleep_manage/sleep_manage.go index 9c3ef50e..0f85542d 100644 --- a/plugin/sleep_manage/sleep_manage.go +++ b/plugin/sleep_manage/sleep_manage.go @@ -12,8 +12,6 @@ import ( control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/control/order" - - "github.com/FloatTech/ZeroBot-Plugin/plugin/sleep_manage/model" ) func init() { @@ -22,15 +20,13 @@ func init() { Help: "sleepmanage\n- 早安\n- 晚安", PrivateDataFolder: "sleep", }) - dbfile := engine.DataFolder() + "manage.db" + go func() { + sdb = initialize(engine.DataFolder() + "manage.db") + log.Println("[sleepmanage]加载sleepmanage数据库") + }() engine.OnFullMatch("早安", isMorning, zero.OnlyGroup).SetBlock(true). Handle(func(ctx *zero.Ctx) { - db, err := model.Open(dbfile) - if err != nil { - log.Errorln(err) - return - } - position, getUpTime := db.GetUp(ctx.Event.GroupID, ctx.Event.UserID) + position, getUpTime := sdb.getUp(ctx.Event.GroupID, ctx.Event.UserID) log.Println(position, getUpTime) hour, minute, second := timeDuration(getUpTime) if (hour == 0 && minute == 0 && second == 0) || hour >= 24 { @@ -38,16 +34,10 @@ func init() { } else { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(fmt.Sprintf("早安成功!你的睡眠时长为%d时%d分%d秒,你是今天第%d个起床的", hour, minute, second, position))) } - db.Close() }) engine.OnFullMatch("晚安", isEvening, zero.OnlyGroup).SetBlock(true). Handle(func(ctx *zero.Ctx) { - db, err := model.Open(dbfile) - if err != nil { - log.Errorln(err) - return - } - position, sleepTime := db.Sleep(ctx.Event.GroupID, ctx.Event.UserID) + position, sleepTime := sdb.sleep(ctx.Event.GroupID, ctx.Event.UserID) log.Println(position, sleepTime) hour, minute, second := timeDuration(sleepTime) if (hour == 0 && minute == 0 && second == 0) || hour >= 24 { @@ -55,7 +45,6 @@ func init() { } else { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(fmt.Sprintf("晚安成功!你的清醒时长为%d时%d分%d秒,你是今天第%d个睡觉的", hour, minute, second, position))) } - db.Close() }) } diff --git a/plugin/tiangou/tiangou.go b/plugin/tiangou/tiangou.go new file mode 100644 index 00000000..6402ed30 --- /dev/null +++ b/plugin/tiangou/tiangou.go @@ -0,0 +1,54 @@ +// Package tiangou 舔狗日记 +package tiangou + +import ( + sql "github.com/FloatTech/sqlite" + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/control/order" + "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/file" + "github.com/sirupsen/logrus" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +type tiangou struct { + ID uint32 `db:"id"` + Text string `db:"text"` +} + +var db = &sql.Sqlite{} + +func init() { + en := control.Register("tiangou", order.AcquirePrio(), &control.Options{ + DisableOnDefault: false, + Help: "舔狗日记\n" + + "- 舔狗日记", + PublicDataFolder: "Tiangou", + }) + + go func() { + dbpath := en.DataFolder() + db.DBPath = dbpath + "tiangou.db" + _, err := file.GetLazyData(db.DBPath, false, true) + if err != nil { + panic(err) + } + err = db.Create("tiangou", &tiangou{}) + if err != nil { + panic(err) + } + c, _ := db.Count("tiangou") + logrus.Infoln("[tiangou]加载", c, "条舔狗日记") + }() + + en.OnFullMatch("舔狗日记").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + var t tiangou + err := db.Pick("tiangou", &t) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return + } + ctx.SendChain(message.Text(t.Text)) + }) +}