mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-12 02:00:24 +00:00
优化
This commit is contained in:
@@ -5,67 +5,50 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
sqlite "github.com/FloatTech/sqlite"
|
||||
"github.com/FloatTech/ttl"
|
||||
ctrl "github.com/FloatTech/zbpctrl"
|
||||
"github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
)
|
||||
|
||||
var managers *ctrl.Manager[*zero.Ctx] // managers lazy load
|
||||
var db = &sqlite.Sqlite{}
|
||||
var mu sync.RWMutex
|
||||
|
||||
func onDel(uid int64, _ struct{}) {
|
||||
if managers == nil {
|
||||
return
|
||||
}
|
||||
if err := managers.DoUnblock(uid); err != nil {
|
||||
logrus.Errorln("[antiabuse] do unblock:", err)
|
||||
}
|
||||
type antidb struct {
|
||||
sync.RWMutex
|
||||
sqlite.Sqlite
|
||||
}
|
||||
|
||||
var cache = ttl.NewCacheOn(4*time.Hour, [4]func(int64, struct{}){nil, nil, onDel, nil})
|
||||
|
||||
type banWord struct {
|
||||
Word string `db:"word"`
|
||||
}
|
||||
|
||||
var nilban = &banWord{}
|
||||
|
||||
func insertWord(gid int64, word string) error {
|
||||
func (db *antidb) insertWord(gid int64, word string) error {
|
||||
grp := strconv.FormatInt(gid, 36)
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
db.Lock()
|
||||
defer db.Unlock()
|
||||
err := db.Create(grp, nilban)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return db.Insert(grp, (*banWord)(unsafe.Pointer(&word)))
|
||||
return db.Insert(grp, &banWord{Word: word})
|
||||
}
|
||||
|
||||
func deleteWord(gid int64, word string) error {
|
||||
func (db *antidb) deleteWord(gid int64, word string) error {
|
||||
grp := strconv.FormatInt(gid, 36)
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
db.Lock()
|
||||
defer db.Unlock()
|
||||
if n, _ := db.Count(grp); n == 0 {
|
||||
return errors.New("本群还没有违禁词~")
|
||||
}
|
||||
return db.Del(grp, "WHRER word='"+word+"'")
|
||||
}
|
||||
|
||||
func listWords(gid int64) string {
|
||||
func (db *antidb) listWords(gid int64) string {
|
||||
grp := strconv.FormatInt(gid, 36)
|
||||
word := ""
|
||||
ptr := (*banWord)(unsafe.Pointer(&word))
|
||||
word := &banWord{}
|
||||
sb := strings.Builder{}
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
_ = db.FindFor(grp, ptr, "", func() error {
|
||||
sb.WriteString(word)
|
||||
db.Lock()
|
||||
defer db.Unlock()
|
||||
_ = db.FindFor(grp, &word, "", func() error {
|
||||
sb.WriteString(word.Word)
|
||||
sb.WriteString(" |")
|
||||
return nil
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user