qq_bot/auth/auth.go
2024-10-20 15:47:50 +08:00

52 lines
1.1 KiB
Go

package auth
import (
"strconv"
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/model"
"git.lxtend.com/qqbot/sqlite3"
)
func init() {
authTableCreateSQL := `
CREATE TABLE IF NOT EXISTS auth (
id INTEGER PRIMARY KEY AUTOINCREMENT,
qqid TEXT UNIQUE,
role INTEGER
);
`
sqlite3.TryCreateTable(authTableCreateSQL)
}
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 HasPermission(msg.UserId, level) {
return handler(msg)
}
return model.Reply{
ReplyMsg: "权限校验错误",
ReferOriginMsg: true,
FromMsg: msg,
}
}