package utils import ( "context" "encoding/json" "fmt" "go-bot/config" "go-bot/tools" "go-bot/workers" "regexp" "strings" "time" ) type GroupMessage struct { GroupID float64 `json:"group_id"` UserID float64 `json:"user_id"` Message string `json:"raw_message"` Role string `json:"role"` Time string `json:"time"` } func Router(data map[string]interface{}) { // 输出格式化后的JSON // fmt.Println(string(jsonString)) // 读取字段值 uid := data["user_id"].(float64) gid := data["group_id"].(float64) sender := data["sender"].(map[string]interface{}) role := sender["role"].(string) mid := data["message_id"].(float64) redisClient := tools.GetRedisClient() if redisClient != nil { var group_message GroupMessage loc, err := time.LoadLocation("Asia/Shanghai") if err != nil { return } group_message.GroupID = gid group_message.UserID = uid group_message.Message = data["raw_message"].(string) group_message.Role = role group_message.Time = (time.Unix(int64(data["time"].(float64)), 0).In(loc)).Format("2006-01-02 15:04:05") jsonString, err := json.Marshal(group_message) if err != nil { return } key := fmt.Sprintf("group_message:%f:%f", gid, uid) exists, err := tools.CheckKeyExists(fmt.Sprintf("group_message:%f:%f", gid, uid)) if err != nil || !exists { redisClient.RPush(context.Background(), key, jsonString, 7*24*time.Hour) // tools.SetValue(key, string(jsonString), 10*time.Second) } else { tools.AddToContext(key, jsonString, 0) } } //包含发送消息的'!' raw_msg := data["raw_message"].(string) // 匹配回复消息 if strings.HasPrefix(raw_msg, "[CQ:reply,id=") { pattern := `^\[CQ:reply,id=(-?\d+)\]` re := regexp.MustCompile(pattern) matches := re.FindStringSubmatch(raw_msg) if len(matches) > 0 { fullMatch := matches[0] raw_msg = re.ReplaceAllString(raw_msg, "") raw_msg = raw_msg + " " + fullMatch } } prefix, err := config.GetConfig()["Prefix"].(string) if !err { panic("Prefix参数设置异常!") } // fmt.Println("raw_msg:", string(raw_msg)) if len(raw_msg) > 1 && string(raw_msg[0]) == prefix { // 去除'!' raw_msg = raw_msg[1:] parms := strings.Fields(raw_msg) worker := workers.NewWorker(parms, fmt.Sprintf("%d", int(uid)), fmt.Sprintf("%d", int(gid)), role, fmt.Sprintf("%d", int(mid)), raw_msg) // fmt.Println("router:", parms[0]) // fmt.Println("CheckPermission:", worker.CheckPermission()) // ans := NewStdAns(parms[0], fmt.Sprintf("%d", int(uid)), fmt.Sprintf("%d", int(gid)), role, fmt.Sprintf("%d", int(mid)), raw_msg) message := worker.CheckPermission() if message == "ok" { message = worker.GetMsg() worker.SendMsg(message) } else { println("权限校验失败") } } }