From 51d0e18c8af31754ac554222369d6dea12065af0 Mon Sep 17 00:00:00 2001 From: Ivy1996-encode <2682904957@qq.com> Date: Sat, 20 Feb 2021 12:31:56 +0800 Subject: [PATCH] fix a problem with Bot.Block --- bot.go | 10 +++++----- bot_test.go | 32 ++++++++++++++++++++++++++++++++ items.go | 34 +++++++++++++++++++++++++++------- 3 files changed, 64 insertions(+), 12 deletions(-) diff --git a/bot.go b/bot.go index f6bde96..71b76c3 100644 --- a/bot.go +++ b/bot.go @@ -143,10 +143,8 @@ func (b *Bot) asyncCall() error { } func (b *Bot) stopAsyncCALL(err error) { - if err != nil { - b.exit <- true - b.err = err - } + b.exit <- true + b.err = err } // 获取新的消息 @@ -180,6 +178,7 @@ func (b *Bot) prepare() { } } +// 注册消息处理的函数 func (b *Bot) RegisterMessageHandler(handler MessageHandler) { if b.messageHandlerGroups == nil { b.messageHandlerGroups = &MessageHandlerGroup{} @@ -187,12 +186,13 @@ func (b *Bot) RegisterMessageHandler(handler MessageHandler) { b.messageHandlerGroups.RegisterHandler(handler) } +// 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞 func (b *Bot) Block() { <-b.exit } func NewBot(caller *Caller, storage WechatStorage) *Bot { - return &Bot{Caller: caller, storage: storage} + return &Bot{Caller: caller, storage: storage, exit: make(chan bool)} } func DefaultBot() *Bot { diff --git a/bot_test.go b/bot_test.go index 88caf69..1b7fa6a 100644 --- a/bot_test.go +++ b/bot_test.go @@ -18,3 +18,35 @@ func TestDefaultBot(t *testing.T) { } 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() +} diff --git a/items.go b/items.go index 628647a..20c2b21 100644 --- a/items.go +++ b/items.go @@ -34,7 +34,6 @@ func (b BaseResponse) Ok() bool { return b.Ret == 0 } -// 实现error接口 func (b BaseResponse) Error() string { switch b.Ret { case 0: @@ -42,7 +41,7 @@ func (b BaseResponse) Error() string { case 1: return "param error" case -14: - return "ticker error" + return "ticket error" case 1100: return "not login warn" case 1101: @@ -52,12 +51,9 @@ func (b BaseResponse) Error() string { case 1203: return "login env error" case 1205: - return "op too often" + return "opt too often" default: - if b.ErrMsg != "" { - return b.ErrMsg - } - return fmt.Sprintf("base response error code %d", b.Ret) + return fmt.Sprintf("base response ret code %d", b.Ret) } } @@ -127,6 +123,30 @@ func (s *SyncCheckResponse) NorMal() bool { return s.Success() && s.Selector == "0" } +// 实现error接口 +func (s *SyncCheckResponse) Error() string { + switch s.RetCode { + case "0": + return "" + case "1": + return "param error" + case "-14": + return "ticker error" + case "1100": + return "not login warn" + case "1101": + return "not login check" + case "1102": + return "cookie invalid error" + case "1203": + return "login env error" + case "1205": + return "op too often" + default: + return fmt.Sprintf("sync check response error code %s", s.RetCode) + } +} + type WebWxSyncResponse struct { AddMsgCount int AddMsgList []*Message