From 45d57c123a07ad26b3fb2c5114828d14bef593b3 Mon Sep 17 00:00:00 2001 From: ivy1996-encode <15055461510@163.com> Date: Tue, 16 Mar 2021 17:20:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9messageHandler=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot.go | 35 ++++++++++--------------- bot_test.go | 64 ++-------------------------------------------- message_handler.go | 20 --------------- 3 files changed, 15 insertions(+), 104 deletions(-) delete mode 100644 message_handler.go diff --git a/bot.go b/bot.go index 43a2244..54d4c9c 100644 --- a/bot.go +++ b/bot.go @@ -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) } // 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞 diff --git a/bot_test.go b/bot_test.go index c71f7fb..ac4600d 100644 --- a/bot_test.go +++ b/bot_test.go @@ -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) diff --git a/message_handler.go b/message_handler.go deleted file mode 100644 index 0963579..0000000 --- a/message_handler.go +++ /dev/null @@ -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) -}