支持 MessageMatchDispatcher 直接转换成 MessageHandler (#161)

This commit is contained in:
多吃点苹果 2022-12-12 19:38:43 +08:00 committed by GitHub
parent 659bf1e522
commit e6fcd53bd4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,6 +12,7 @@ type MessageDispatcher interface {
} }
// DispatchMessage 跟 MessageDispatcher 结合封装成 MessageHandler // DispatchMessage 跟 MessageDispatcher 结合封装成 MessageHandler
// Deprecated: use MessageMatchDispatcher.AsMessageHandler instead
func DispatchMessage(dispatcher MessageDispatcher) func(msg *Message) { func DispatchMessage(dispatcher MessageDispatcher) func(msg *Message) {
return func(msg *Message) { dispatcher.Dispatch(msg) } return func(msg *Message) { dispatcher.Dispatch(msg) }
} }
@ -85,12 +86,13 @@ type matchNode struct {
type matchNodes []*matchNode type matchNodes []*matchNode
// MessageMatchDispatcher impl MessageDispatcher interface // MessageMatchDispatcher impl MessageDispatcher interface
// dispatcher := NewMessageMatchDispatcher() //
// dispatcher.OnText(func(msg *Message){ // dispatcher := NewMessageMatchDispatcher()
// msg.ReplyText("hello") // dispatcher.OnText(func(msg *Message){
// }) // msg.ReplyText("hello")
// bot := DefaultBot() // })
// bot.MessageHandler = DispatchMessage(dispatcher) // bot := DefaultBot()
// bot.MessageHandler = DispatchMessage(dispatcher)
type MessageMatchDispatcher struct { type MessageMatchDispatcher struct {
async bool async bool
matchNodes matchNodes matchNodes matchNodes
@ -224,14 +226,22 @@ func (m *MessageMatchDispatcher) OnGroupByGroupName(groupName string, handlers .
m.OnUser(f, handlers...) m.OnUser(f, handlers...)
} }
// AsMessageHandler 将MessageMatchDispatcher转换为MessageHandler
func (m *MessageMatchDispatcher) AsMessageHandler() MessageHandler {
return func(msg *Message) {
m.Dispatch(msg)
}
}
type MessageSenderMatchFunc func(user *User) bool type MessageSenderMatchFunc func(user *User) bool
// SenderMatchFunc 抽象的匹配发送者特征的处理函数 // SenderMatchFunc 抽象的匹配发送者特征的处理函数
// dispatcher := NewMessageMatchDispatcher() //
// matchFuncList := MatchFuncList(SenderFriendRequired(), SenderNickNameContainsMatchFunc("多吃点苹果")) // dispatcher := NewMessageMatchDispatcher()
// dispatcher.RegisterHandler(matchFuncList, func(ctx *MessageContext) { // matchFuncList := MatchFuncList(SenderFriendRequired(), SenderNickNameContainsMatchFunc("多吃点苹果"))
// do your own business // dispatcher.RegisterHandler(matchFuncList, func(ctx *MessageContext) {
// }) // do your own business
// })
func SenderMatchFunc(matchFuncs ...MessageSenderMatchFunc) MatchFunc { func SenderMatchFunc(matchFuncs ...MessageSenderMatchFunc) MatchFunc {
return func(message *Message) bool { return func(message *Message) bool {
sender, err := message.Sender() sender, err := message.Sender()