From 0aa3dc3361d5bbb5ea85568e3027f1e3847920a8 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 24 Jul 2022 13:03:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BE=A4=E6=B6=88=E6=81=AFse?= =?UTF-8?q?nd=E8=8E=B7=E5=8F=96=E5=92=8C=E5=88=A4=E6=96=AD=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=98=AF=E5=90=A6=E4=B8=BA@=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- message.go | 70 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/message.go b/message.go index 7295a65..4975ba4 100644 --- a/message.go +++ b/message.go @@ -100,17 +100,29 @@ func (m *Message) SenderInGroup() (*User, error) { } // Receiver 获取消息的接收者 +// 如果消息是群组消息,则返回群组 +// 如果消息是好友消息,则返回好友 +// 如果消息是系统消息,则返回当前用户 func (m *Message) Receiver() (*User, error) { + if m.IsSystem() { + return m.Bot.self.User, nil + } if m.IsSendByGroup() { - if sender, err := m.Sender(); err != nil { + groups, err := m.Bot.self.Groups() + if err != nil { return nil, err - } else { - user, exist := sender.MemberList.GetByUserName(m.ToUserName) - if !exist { - return nil, ErrNoSuchUserFoundError - } - return user, nil } + username := m.FromUserName + if m.IsSendBySelf() { + username = m.ToUserName + } + users := groups.SearchByUserName(1, username) + if users.Count() == 0 { + return nil, ErrNoSuchUserFoundError + } + return users.First().User, nil + } else if m.ToUserName == m.Bot.self.UserName { + return m.Bot.self.User, nil } else { user, exist := m.Bot.self.MemberList.GetByRemarkName(m.ToUserName) if !exist { @@ -132,7 +144,7 @@ func (m *Message) IsSendByFriend() bool { // IsSendByGroup 判断消息是否由群组发送 func (m *Message) IsSendByGroup() bool { - return strings.HasPrefix(m.FromUserName, "@@") || (m.FromUserName == m.Bot.self.User.UserName && strings.HasPrefix(m.ToUserName, "@@")) + return strings.HasPrefix(m.FromUserName, "@@") || (m.IsSendBySelf() && strings.HasPrefix(m.ToUserName, "@@")) } // ReplyText 回复文本消息 @@ -389,24 +401,32 @@ func (m *Message) init(bot *Bot) { if m.IsSendByGroup() { if !m.IsSystem() { // 将Username和正文分开 - data := strings.Split(m.Content, ":
") - m.Content = strings.Join(data[1:], "") - m.senderInGroupUserName = data[0] - receiver, err := m.Receiver() - if err == nil { - displayName := receiver.DisplayName - if displayName == "" { - displayName = receiver.NickName - } - // 判断是不是@消息 - atFlag := "@" + displayName + "\u2005" - // mac客户端的@是空格非\u2005 - macAtFlag := "@" + displayName + " " - if strings.Contains(m.Content, atFlag) || strings.Contains(m.Content, macAtFlag) { - m.isAt = true - m.Content = strings.Replace(m.Content, atFlag, "", -1) - m.Content = strings.Replace(m.Content, macAtFlag, "", -1) + if !m.IsSendBySelf() { + data := strings.Split(m.Content, ":
") + m.Content = strings.Join(data[1:], "") + m.senderInGroupUserName = data[0] + if strings.Contains(m.Content, "@") { + sender, err := m.Sender() + if err == nil { + receiver := sender.MemberList.SearchByUserName(1, m.ToUserName) + if receiver != nil { + displayName := receiver.First().DisplayName + if displayName == "" { + displayName = receiver.First().NickName + } + var atFlag string + if strings.Contains(m.Content, "\u2005") { + atFlag = "@" + displayName + "\u2005" + } else { + atFlag = "@" + displayName + " " + } + m.isAt = strings.Contains(m.Content, atFlag) || strings.HasSuffix(m.Content, atFlag) + } + } } + } else { + // 这块不严谨,但是只能这么干了 + m.isAt = strings.Contains(m.Content, "@") || strings.Contains(m.Content, "\u2005") } } }