qq_bot/auth/auth.go
2025-07-05 15:46:36 +08:00

51 lines
1.1 KiB
Go

package auth
import (
"strconv"
"git.lxtend.com/lixiangwuxian/qqbot/constants"
"git.lxtend.com/lixiangwuxian/qqbot/model"
"git.lxtend.com/lixiangwuxian/qqbot/sqlite3"
)
func init() {
// 使用GORM自动迁移替代手写SQL
sqlite3.AutoMigrate(&Auth{})
}
func HasPermission(qqID int64, level constants.PermissionLevel) bool {
auth, err := getAuth(qqID)
maxRetry := 50
for i := 0; i < maxRetry && (err != nil); i++ {
auth, err = getAuth(qqID)
}
if err != nil || auth.Qqid == "" {
return false
}
return auth.Role <= level
}
func SetPermission(qqID int64, level constants.PermissionLevel) error {
auth := Auth{
Qqid: strconv.Itoa(int(qqID)),
Role: level,
}
return setAuth(auth)
}
func TryExecHandler(msg model.Message, level constants.PermissionLevel, handler model.Handler) (reply *model.Reply) {
if permission, err := getAuth(msg.UserId); err == nil {
if permission.Role == constants.LEVEL_IGNORE {
return nil
}
}
if HasPermission(msg.UserId, level) {
return handler(msg)
}
return &model.Reply{
ReplyMsg: "权限校验错误",
ReferOriginMsg: true,
FromMsg: msg,
}
}