更改messageHandler处理方式

This commit is contained in:
ivy1996-encode 2021-03-16 17:20:03 +08:00
parent d8291a5df2
commit 45d57c123a
3 changed files with 15 additions and 104 deletions

35
bot.go
View File

@ -6,15 +6,15 @@ import (
) )
type Bot struct { type Bot struct {
Caller *Caller Caller *Caller
self *Self self *Self
storage WechatStorage storage WechatStorage
ScanCallBack func(body []byte) ScanCallBack func(body []byte)
LoginCallBack func(body []byte) LoginCallBack func(body []byte)
UUIDCallback func(uuid string) UUIDCallback func(uuid string)
messageHandlerGroups *MessageHandlerGroup MessageHandler func(msg *Message)
err error err error
exit chan bool exit chan bool
} }
// 判断当前用户是否正常在线 // 判断当前用户是否正常在线
@ -175,26 +175,17 @@ func (b *Bot) getMessage() error {
// 根据不同的消息类型来进行处理,方便后续统一调用 // 根据不同的消息类型来进行处理,方便后续统一调用
message.init(b) message.init(b)
// 调用自定义的处理方法 // 调用自定义的处理方法
b.messageHandlerGroups.ProcessMessage(message) if handler := b.MessageHandler; handler != nil {
handler(message)
}
} }
return nil return nil
} }
func (b *Bot) prepare() { func (b *Bot) prepare() {
if b.storage == nil { if b.storage == nil {
panic("WechatStorage can not be nil") b.storage = NewSimpleWechatStorage()
} }
if b.messageHandlerGroups == nil {
panic("message can not be nil")
}
}
// 注册消息处理的函数
func (b *Bot) RegisterMessageHandler(handler MessageHandler) {
if b.messageHandlerGroups == nil {
b.messageHandlerGroups = &MessageHandlerGroup{}
}
b.messageHandlerGroups.RegisterHandler(handler)
} }
// 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞 // 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞

View File

@ -7,13 +7,12 @@ import (
func TestDefaultBot(t *testing.T) { func TestDefaultBot(t *testing.T) {
bot := DefaultBot() bot := DefaultBot()
messageHandler := func(message *Message) { bot.MessageHandler = func(message *Message) {
if message.Content == "logout" { if message.Content == "logout" {
bot.Logout() bot.Logout()
} }
fmt.Println(message.Content) fmt.Println(message.Content)
} }
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil { if err := bot.Login(); err != nil {
fmt.Println(err) fmt.Println(err)
@ -30,68 +29,9 @@ func TestDefaultBot(t *testing.T) {
fmt.Println(bot.Block()) fmt.Println(bot.Block())
} }
func TestBotMessageHandler(t *testing.T) {
messageHandler := func(message *Message) {
if message.IsSendByGroup() {
sender, err := message.Sender()
if err != nil {
fmt.Println(err)
return
}
group := Group{sender}
members, err := group.Members()
if err != nil {
fmt.Println(err)
return
}
for _, member := range members {
fmt.Println(member)
}
if message.IsText() {
message.ReplyText(message.Content)
}
}
}
bot := DefaultBot()
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil {
fmt.Println(err)
return
}
bot.Block()
}
func TestBotMessageSender(t *testing.T) {
messageHandler := func(message *Message) {
if message.IsSendByGroup() {
sender, err := message.Sender()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(sender)
if message.IsText() || message.Content == "test message" {
message.ReplyText("hello")
}
}
}
bot := DefaultBot()
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil {
fmt.Println(err)
return
}
bot.Block()
}
func TestUser_GetAvatarResponse(t *testing.T) { func TestUser_GetAvatarResponse(t *testing.T) {
messageHandler := func(message *Message) {
fmt.Println(message)
}
bot := DefaultBot() bot := DefaultBot()
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil { if err := bot.Login(); err != nil {
fmt.Println(err) fmt.Println(err)

View File

@ -1,20 +0,0 @@
package openwechat
type MessageHandler func(message *Message)
type MessageHandlerGroup struct {
handlers []MessageHandler
}
func (m MessageHandlerGroup) ProcessMessage(message *Message) {
for _, handler := range m.handlers {
handler(message)
}
}
func (m *MessageHandlerGroup) RegisterHandler(handler MessageHandler) {
if m.handlers == nil {
m.handlers = make([]MessageHandler, 0)
}
m.handlers = append(m.handlers, handler)
}