ZeroBot-Plugin/plugin/antiabuse/database.go
2022-08-30 14:21:57 +08:00

82 lines
1.5 KiB
Go

package antiabuse
import (
"fmt"
"time"
sqlite "github.com/FloatTech/sqlite"
)
var db = &sqlite.Sqlite{}
type banUser struct {
UUID string `db:"uuid"`
DueTime int64 `db:"due_time"`
}
func insertUser(gid, uid int64) error {
obj := &banUser{fmt.Sprintf("%d-%d", gid, uid), time.Now().Add(4 * time.Hour).UnixNano()}
return db.Insert("banUser", obj)
}
func deleteUser(gid, uid int64) error {
sql := fmt.Sprintf("WHERE uuid=%d-%d", gid, uid)
return db.Del("banUser", sql)
}
func recoverUser() error {
if !db.CanFind("banUser", "") {
return nil
}
obj := &banUser{}
var uuids []string
err := db.FindFor("banUser", obj, "", func() error {
if time.Now().UnixNano() < obj.DueTime {
uuids = append(uuids, obj.UUID)
} else {
if err := db.Del("banUser", "WHERE uuid="+obj.UUID); err != nil {
return err
}
}
return nil
},
)
if err != nil {
return err
}
banSet.AddMany(uuids)
return nil
}
type banWord struct {
GroupWord string `db:"group_word"`
}
func insertWord(gid int64, word string) error {
obj := &banWord{fmt.Sprintf("%d-%s", gid, word)}
return db.Insert("banWord", obj)
}
func deleteWord(gid int64, word string) error {
sql := fmt.Sprintf("WHERE group_word = %d-%s", gid, word)
return db.Del("banWord", sql)
}
func recoverWord() error {
if !db.CanFind("banWord", "") {
return nil
}
obj := &banWord{}
var groupWords []string
err := db.FindFor("banWord", obj, "", func() error {
groupWords = append(groupWords, obj.GroupWord)
return nil
},
)
if err != nil {
return err
}
wordSet.AddMany(groupWords)
return nil
}