feat: 添加关键词回复

This commit is contained in:
lixiangwuxian
2024-10-20 15:47:00 +08:00
parent 003c9b6f90
commit 5a56f6fdc7
9 changed files with 340 additions and 32 deletions

View File

@@ -9,7 +9,8 @@ import (
"git.lxtend.com/qqbot/model"
)
var handlers = make(map[string]model.HandlerInfo[model.Handler])
var allGroupHandlers = make(map[string]model.HandlerInfo[model.Handler])
var GroupHandlers = make(map[int64]map[string]model.HandlerInfo[model.Handler])
var frontMatchHandlers = make(map[string]model.HandlerInfo[model.Handler])
var liveHandlers = make(map[int64]map[int64]model.TryCatchHandler)
var livePrivateHandlers = make(map[int64]model.TryCatchHandler)
@@ -21,7 +22,7 @@ func RegisterPrivateHandler(handler model.Handler) {
}
func RegisterHandler(trigger string, handler model.Handler, level constants.PermissionLevel) {
handlers[trigger] = model.HandlerInfo[model.Handler]{
allGroupHandlers[trigger] = model.HandlerInfo[model.Handler]{
Trigger: trigger,
Handler: handler,
Level: level,
@@ -47,6 +48,23 @@ func RegisterLiveHandler(groupID int64, userID int64, handler model.TryCatchHand
liveHandlers[groupID][userID] = handler
}
func RegisterGroupHandler(groupID int64, trigger string, handler model.Handler, level constants.PermissionLevel) {
if _, ok := GroupHandlers[groupID]; !ok {
GroupHandlers[groupID] = make(map[string]model.HandlerInfo[model.Handler])
}
GroupHandlers[groupID][trigger] = model.HandlerInfo[model.Handler]{
Trigger: trigger,
Handler: handler,
Level: level,
}
}
func UnRegisterGroupHandler(groupID int64, trigger string) {
if _, ok := GroupHandlers[groupID]; ok {
delete(GroupHandlers[groupID], trigger)
}
}
func MsgInHandler(msg model.Message) (reply model.Reply) {
defer func() {
if r := recover(); r != nil {
@@ -85,9 +103,14 @@ func MsgInHandler(msg model.Message) (reply model.Reply) {
}
}
msgArray := strings.Split(msg.RawMsg, " ")
if handler, ok := handlers[msgArray[0]]; ok {
if handler, ok := allGroupHandlers[msgArray[0]]; ok {
return auth.TryExecHandler(msg, handler.Level, handler.Handler)
}
if groupHandler, ok := GroupHandlers[msg.GroupInfo.GroupId]; ok {
if handler, ok := groupHandler[msgArray[0]]; ok {
return auth.TryExecHandler(msg, handler.Level, handler.Handler)
}
}
if !msg.GroupInfo.IsGroupMsg && privateAllHandler != nil {
return privateAllHandler(msg)
}