fix a problem with Bot.Block

This commit is contained in:
Ivy1996-encode 2021-02-20 12:31:56 +08:00
parent a7a234c950
commit 51d0e18c8a
3 changed files with 64 additions and 12 deletions

10
bot.go
View File

@ -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 {

View File

@ -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()
}

View File

@ -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