Merge pull request '🐛 修复AI插件会响应@所有人
消息事件 #7' (#9) from dev into main
All checks were successful
BuildImage / build-image (push) Successful in 1m35s
All checks were successful
BuildImage / build-image (push) Successful in 1m35s
Reviewed-on: #9
This commit is contained in:
commit
0c2010c348
@ -26,13 +26,13 @@ func Plugin() {
|
|||||||
// 私聊指令消息
|
// 私聊指令消息
|
||||||
dispatcher.RegisterHandler(func(m *model.Message) bool {
|
dispatcher.RegisterHandler(func(m *model.Message) bool {
|
||||||
// 私聊消息 或 群聊艾特机器人并且以/开头的消息
|
// 私聊消息 或 群聊艾特机器人并且以/开头的消息
|
||||||
return (m.IsPrivateText() || (m.IsAt() && m.CleanContentStartWith("/"))) && service.CheckIsEnableCommand(m.FromUser)
|
return (m.IsPrivateText() || (m.IsAt() && !m.IsAtAll() && m.CleanContentStartWith("/"))) && service.CheckIsEnableCommand(m.FromUser)
|
||||||
}, plugins.Command)
|
}, plugins.Command)
|
||||||
|
|
||||||
// AI消息插件
|
// AI消息插件
|
||||||
dispatcher.RegisterHandler(func(m *model.Message) bool {
|
dispatcher.RegisterHandler(func(m *model.Message) bool {
|
||||||
// 群内@或者私聊文字消息
|
// 群内@或者私聊文字消息
|
||||||
return m.IsAt() || m.IsPrivateText()
|
return m.IsAt() && !m.IsAtAll() || m.IsPrivateText()
|
||||||
}, plugins.AI)
|
}, plugins.AI)
|
||||||
|
|
||||||
// 欢迎新成员
|
// 欢迎新成员
|
||||||
|
@ -2,6 +2,7 @@ package model
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"github.com/duke-git/lancet/v2/slice"
|
||||||
"go-wechat/types"
|
"go-wechat/types"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@ -31,6 +32,21 @@ type systemMsgDataXml struct {
|
|||||||
Type string `xml:"type,attr"`
|
Type string `xml:"type,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// atMsgDataXml
|
||||||
|
// @description: 微信@消息的xml结构
|
||||||
|
type atMsgDataXml struct {
|
||||||
|
XMLName xml.Name `xml:"msgsource"`
|
||||||
|
Text string `xml:",chardata"`
|
||||||
|
AtUserList string `xml:"atuserlist"`
|
||||||
|
Silence string `xml:"silence"`
|
||||||
|
MemberCount string `xml:"membercount"`
|
||||||
|
Signature string `xml:"signature"`
|
||||||
|
TmpNode struct {
|
||||||
|
Text string `xml:",chardata"`
|
||||||
|
PublisherID string `xml:"publisher-id"`
|
||||||
|
} `xml:"tmp_node"`
|
||||||
|
}
|
||||||
|
|
||||||
// sysMsg
|
// sysMsg
|
||||||
// @description: 消息主体
|
// @description: 消息主体
|
||||||
type sysMsg struct{}
|
type sysMsg struct{}
|
||||||
@ -92,6 +108,22 @@ func (m Message) IsAt() bool {
|
|||||||
return strings.HasSuffix(m.DisplayFullContent, "在群聊中@了你")
|
return strings.HasSuffix(m.DisplayFullContent, "在群聊中@了你")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsAtAll
|
||||||
|
// @description: 是否是At所有人的消息
|
||||||
|
// @receiver m
|
||||||
|
// @return bool
|
||||||
|
func (m Message) IsAtAll() bool {
|
||||||
|
// 解析raw里面的xml
|
||||||
|
var d atMsgDataXml
|
||||||
|
if err := xml.Unmarshal([]byte(m.Raw), &d); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// 转换@用户列表为数组
|
||||||
|
atUserList := strings.Split(d.AtUserList, ",")
|
||||||
|
// 判断是否包含@所有人
|
||||||
|
return slice.Contain(atUserList, "notify@all")
|
||||||
|
}
|
||||||
|
|
||||||
// IsPrivateText
|
// IsPrivateText
|
||||||
// @description: 是否是私聊消息
|
// @description: 是否是私聊消息
|
||||||
// @receiver m
|
// @receiver m
|
||||||
|
Loading…
Reference in New Issue
Block a user