ZeroBot-Plugin/plugin/antiabuse/db.go
源文雨 43dee54678 fix
2022-09-06 20:26:21 +08:00

67 lines
1.2 KiB
Go

package antiabuse
import (
"errors"
"strconv"
"strings"
"sync"
sqlite "github.com/FloatTech/sqlite"
)
type antidb struct {
sync.RWMutex
sqlite.Sqlite
}
type banWord struct {
Word string `db:"word"`
}
var nilban = &banWord{}
func (db *antidb) isInAntiList(uid, gid int64, msg string) bool {
grp := strconv.FormatInt(gid, 36)
db.RLock()
defer db.RUnlock()
return db.CanFind(grp, "WHERE instr('"+msg+"', word)>0")
}
func (db *antidb) insertWord(gid int64, word string) error {
grp := strconv.FormatInt(gid, 36)
db.Lock()
defer db.Unlock()
err := db.Create(grp, nilban)
if err != nil {
return err
}
return db.Insert(grp, &banWord{Word: word})
}
func (db *antidb) deleteWord(gid int64, word string) error {
grp := strconv.FormatInt(gid, 36)
db.Lock()
defer db.Unlock()
if n, _ := db.Count(grp); n == 0 {
return errors.New("本群还没有违禁词~")
}
return db.Del(grp, "WHERE word='"+word+"'")
}
func (db *antidb) listWords(gid int64) string {
grp := strconv.FormatInt(gid, 36)
word := &banWord{}
sb := strings.Builder{}
db.Lock()
defer db.Unlock()
_ = db.FindFor(grp, &word, "", func() error {
sb.WriteString(word.Word)
sb.WriteString(" |")
return nil
})
if sb.Len() <= 2 {
return ""
}
return sb.String()[:sb.Len()-2]
}