From 3aab063091c1d2c0832051b8899f8176a4a34d56 Mon Sep 17 00:00:00 2001 From: Kanri Date: Mon, 5 Apr 2021 08:04:32 -0500 Subject: [PATCH] enhance IsToMe (#16) --- bot.go | 21 ++++++++++++++++++++- types.go | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bot.go b/bot.go index e49ba74..20ae197 100644 --- a/bot.go +++ b/bot.go @@ -2,6 +2,7 @@ package zero import ( "runtime/debug" + "strconv" "strings" log "github.com/sirupsen/logrus" @@ -61,6 +62,7 @@ func processEvent(response []byte, caller APICaller) { event.DetailType = event.MessageType case "notice": event.DetailType = event.NoticeType + preprocessNoticeEvent(&event) case "request": event.DetailType = event.RequestType } @@ -130,7 +132,8 @@ func preprocessMessageEvent(e *Event) { e.IsToMe = false for i, m := range e.Message { if m.Type == "at" { - if m.Data["qq"] == BotConfig.SelfID { + qq, _ := strconv.ParseInt(m.Data["qq"], 10, 64) + if qq == e.SelfID { e.IsToMe = true e.Message = append(e.Message[:i], e.Message[i+1:]...) return @@ -160,6 +163,22 @@ func preprocessMessageEvent(e *Event) { e.Message[0].Data["text"] = strings.TrimLeft(e.Message[0].Data["text"], " ") // Trim Again! } +// preprocessNoticeEvent 更新事件 +func preprocessNoticeEvent(e *Event) { + switch e.NoticeType { + case "group_upload", "friend_add", "friend_recall": + // + case "group_admin", "group_decrease", "group_increase", "group_ban", "group_recall", "honor": + if e.UserID == e.SelfID { + e.IsToMe = true + } + case "poke", "lucky_king": + if e.TargetID == e.SelfID { + e.IsToMe = true + } + } +} + // GetBot 获取指定的bot (Ctx)实例 func GetBot(id int64) *Ctx { caller, ok := APICallers.Load(id) diff --git a/types.go b/types.go index 1ac2f3f..ac624fb 100644 --- a/types.go +++ b/types.go @@ -64,6 +64,7 @@ type Event struct { MessageID int64 `json:"message_id"` GroupID int64 `json:"group_id"` UserID int64 `json:"user_id"` + TargetID int64 `json:"target_id"` SelfID int64 `json:"self_id"` RawMessage string `json:"raw_message"` // raw_message is always string Anonymous interface{} `json:"anonymous"`