更改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 {
Caller *Caller
self *Self
storage WechatStorage
ScanCallBack func(body []byte)
LoginCallBack func(body []byte)
UUIDCallback func(uuid string)
messageHandlerGroups *MessageHandlerGroup
err error
exit chan bool
Caller *Caller
self *Self
storage WechatStorage
ScanCallBack func(body []byte)
LoginCallBack func(body []byte)
UUIDCallback func(uuid string)
MessageHandler func(msg *Message)
err error
exit chan bool
}
// 判断当前用户是否正常在线
@ -175,26 +175,17 @@ func (b *Bot) getMessage() error {
// 根据不同的消息类型来进行处理,方便后续统一调用
message.init(b)
// 调用自定义的处理方法
b.messageHandlerGroups.ProcessMessage(message)
if handler := b.MessageHandler; handler != nil {
handler(message)
}
}
return nil
}
func (b *Bot) prepare() {
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) {
bot := DefaultBot()
messageHandler := func(message *Message) {
bot.MessageHandler = func(message *Message) {
if message.Content == "logout" {
bot.Logout()
}
fmt.Println(message.Content)
}
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil {
fmt.Println(err)
@ -30,68 +29,9 @@ func TestDefaultBot(t *testing.T) {
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) {
messageHandler := func(message *Message) {
fmt.Println(message)
}
bot := DefaultBot()
bot.RegisterMessageHandler(messageHandler)
bot.UUIDCallback = PrintlnQrcodeUrl
if err := bot.Login(); err != nil {
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)
}