ProjectWIND/core/events_handler.go

87 lines
2.1 KiB
Go
Raw Permalink Normal View History

2024-12-05 01:00:07 +08:00
package core
import (
"ProjectWIND/LOG"
2024-12-07 17:16:44 +08:00
"ProjectWIND/wba"
2024-12-05 01:00:07 +08:00
"encoding/json"
"fmt"
"strings"
)
func HandleMessage(msgJson []byte) {
2024-12-07 17:16:44 +08:00
var msg wba.MessageEventInfo
2024-12-05 01:00:07 +08:00
err := json.Unmarshal(msgJson, &msg)
if err != nil {
2024-12-27 15:56:59 +08:00
LOG.ERROR("消息事件反序列化失败: %v", err)
2024-12-05 01:00:07 +08:00
}
// 处理消息
LOG.INFO("收到消息:(来自:%v-%v:%v-%v)%v", msg.MessageType, msg.GroupId, msg.UserId, msg.Sender.Nickname, msg.RawMessage)
//如果消息文本内容为bot发送框架信息。
cmd, args := CmdSplit(msg)
2024-12-07 17:16:44 +08:00
_, ok := CmdMap[cmd]
2024-12-05 01:00:07 +08:00
if ok {
2024-12-07 17:16:44 +08:00
LOG.DEBUG("执行命令:%v %v", cmd, args)
CmdMap[cmd].SOLVE(args, msg)
2024-12-05 01:00:07 +08:00
}
// TODO: 处理消息内容
}
func HandleNotice(msgJson []byte) {
2024-12-07 17:16:44 +08:00
var notice wba.NoticeEventInfo
2024-12-05 01:00:07 +08:00
err := json.Unmarshal(msgJson, &notice)
if err != nil {
2024-12-27 15:56:59 +08:00
LOG.ERROR("通知事件反序列化失败: %v", err)
2024-12-05 01:00:07 +08:00
}
// TODO: 处理通知
}
func HandleRequest(msgJson []byte) {
2024-12-07 17:16:44 +08:00
var request wba.NoticeEventInfo
2024-12-05 01:00:07 +08:00
err := json.Unmarshal(msgJson, &request)
if err != nil {
2024-12-27 15:56:59 +08:00
LOG.ERROR("请求事件反序列化失败: %v", err)
2024-12-05 01:00:07 +08:00
}
// TODO: 处理请求
}
func HandleMetaEvent(msgJson []byte) {
2024-12-07 17:16:44 +08:00
var meta wba.NoticeEventInfo
2024-12-05 01:00:07 +08:00
err := json.Unmarshal(msgJson, &meta)
if err != nil {
2024-12-27 15:56:59 +08:00
LOG.ERROR("元事件反序列化失败: %v", err)
2024-12-05 01:00:07 +08:00
}
// TODO: 处理元事件
}
2024-12-07 17:16:44 +08:00
func CmdSplit(msg wba.MessageEventInfo) (string, []string) {
2024-12-05 01:00:07 +08:00
text := msg.RawMessage
if strings.HasPrefix(text, fmt.Sprintf("[CQ:at,qq=%d]", msg.SelfId)) {
text = strings.TrimPrefix(text, fmt.Sprintf("[CQ:at,qq=%d]", msg.SelfId))
} else {
if statusCheck(msg) {
return "", []string{}
}
}
//检查有无application.CmdList中的命令前缀
for _, prefix := range cmdPrefix {
if strings.HasPrefix(text, prefix) {
text = strings.TrimPrefix(text, prefix)
2024-12-07 17:16:44 +08:00
for cmd := range CmdMap {
2024-12-05 01:00:07 +08:00
if strings.HasPrefix(text, cmd) {
text = strings.TrimPrefix(text, cmd)
2024-12-07 17:16:44 +08:00
text = strings.TrimPrefix(text, " ")
2024-12-05 01:00:07 +08:00
return cmd, strings.Split(text, " ")
}
}
}
}
return "", []string{}
}
2024-12-07 17:16:44 +08:00
func statusCheck(msg wba.MessageEventInfo) bool {
2024-12-05 01:00:07 +08:00
//TODO: 检查当前组群工作状态
return false
}
var cmdPrefix = []string{"/", "!", "", "", ".", "。"}