修复群消息send获取和判断消息是否为@的bug

This commit is contained in:
unknown 2022-07-24 13:03:51 +08:00
parent 7411d180f1
commit 0aa3dc3361

View File

@ -100,17 +100,29 @@ func (m *Message) SenderInGroup() (*User, error) {
} }
// Receiver 获取消息的接收者 // Receiver 获取消息的接收者
// 如果消息是群组消息,则返回群组
// 如果消息是好友消息,则返回好友
// 如果消息是系统消息,则返回当前用户
func (m *Message) Receiver() (*User, error) { func (m *Message) Receiver() (*User, error) {
if m.IsSystem() {
return m.Bot.self.User, nil
}
if m.IsSendByGroup() { if m.IsSendByGroup() {
if sender, err := m.Sender(); err != nil { groups, err := m.Bot.self.Groups()
if err != nil {
return nil, err 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 { } else {
user, exist := m.Bot.self.MemberList.GetByRemarkName(m.ToUserName) user, exist := m.Bot.self.MemberList.GetByRemarkName(m.ToUserName)
if !exist { if !exist {
@ -132,7 +144,7 @@ func (m *Message) IsSendByFriend() bool {
// IsSendByGroup 判断消息是否由群组发送 // IsSendByGroup 判断消息是否由群组发送
func (m *Message) IsSendByGroup() bool { 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 回复文本消息 // ReplyText 回复文本消息
@ -389,24 +401,32 @@ func (m *Message) init(bot *Bot) {
if m.IsSendByGroup() { if m.IsSendByGroup() {
if !m.IsSystem() { if !m.IsSystem() {
// 将Username和正文分开 // 将Username和正文分开
data := strings.Split(m.Content, ":<br/>") if !m.IsSendBySelf() {
m.Content = strings.Join(data[1:], "") data := strings.Split(m.Content, ":<br/>")
m.senderInGroupUserName = data[0] m.Content = strings.Join(data[1:], "")
receiver, err := m.Receiver() m.senderInGroupUserName = data[0]
if err == nil { if strings.Contains(m.Content, "@") {
displayName := receiver.DisplayName sender, err := m.Sender()
if displayName == "" { if err == nil {
displayName = receiver.NickName receiver := sender.MemberList.SearchByUserName(1, m.ToUserName)
} if receiver != nil {
// 判断是不是@消息 displayName := receiver.First().DisplayName
atFlag := "@" + displayName + "\u2005" if displayName == "" {
// mac客户端的@是空格非\u2005 displayName = receiver.First().NickName
macAtFlag := "@" + displayName + " " }
if strings.Contains(m.Content, atFlag) || strings.Contains(m.Content, macAtFlag) { var atFlag string
m.isAt = true if strings.Contains(m.Content, "\u2005") {
m.Content = strings.Replace(m.Content, atFlag, "", -1) atFlag = "@" + displayName + "\u2005"
m.Content = strings.Replace(m.Content, macAtFlag, "", -1) } 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")
} }
} }
} }