fix a problem with Bot.Block
This commit is contained in:
parent
a7a234c950
commit
51d0e18c8a
6
bot.go
6
bot.go
@ -143,11 +143,9 @@ func (b *Bot) asyncCall() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bot) stopAsyncCALL(err error) {
|
func (b *Bot) stopAsyncCALL(err error) {
|
||||||
if err != nil {
|
|
||||||
b.exit <- true
|
b.exit <- true
|
||||||
b.err = err
|
b.err = err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 获取新的消息
|
// 获取新的消息
|
||||||
func (b *Bot) getMessage() error {
|
func (b *Bot) getMessage() error {
|
||||||
@ -180,6 +178,7 @@ func (b *Bot) prepare() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 注册消息处理的函数
|
||||||
func (b *Bot) RegisterMessageHandler(handler MessageHandler) {
|
func (b *Bot) RegisterMessageHandler(handler MessageHandler) {
|
||||||
if b.messageHandlerGroups == nil {
|
if b.messageHandlerGroups == nil {
|
||||||
b.messageHandlerGroups = &MessageHandlerGroup{}
|
b.messageHandlerGroups = &MessageHandlerGroup{}
|
||||||
@ -187,12 +186,13 @@ func (b *Bot) RegisterMessageHandler(handler MessageHandler) {
|
|||||||
b.messageHandlerGroups.RegisterHandler(handler)
|
b.messageHandlerGroups.RegisterHandler(handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞
|
||||||
func (b *Bot) Block() {
|
func (b *Bot) Block() {
|
||||||
<-b.exit
|
<-b.exit
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBot(caller *Caller, storage WechatStorage) *Bot {
|
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 {
|
func DefaultBot() *Bot {
|
||||||
|
32
bot_test.go
32
bot_test.go
@ -18,3 +18,35 @@ func TestDefaultBot(t *testing.T) {
|
|||||||
}
|
}
|
||||||
bot.Block()
|
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()
|
||||||
|
}
|
||||||
|
34
items.go
34
items.go
@ -34,7 +34,6 @@ func (b BaseResponse) Ok() bool {
|
|||||||
return b.Ret == 0
|
return b.Ret == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// 实现error接口
|
|
||||||
func (b BaseResponse) Error() string {
|
func (b BaseResponse) Error() string {
|
||||||
switch b.Ret {
|
switch b.Ret {
|
||||||
case 0:
|
case 0:
|
||||||
@ -42,7 +41,7 @@ func (b BaseResponse) Error() string {
|
|||||||
case 1:
|
case 1:
|
||||||
return "param error"
|
return "param error"
|
||||||
case -14:
|
case -14:
|
||||||
return "ticker error"
|
return "ticket error"
|
||||||
case 1100:
|
case 1100:
|
||||||
return "not login warn"
|
return "not login warn"
|
||||||
case 1101:
|
case 1101:
|
||||||
@ -52,12 +51,9 @@ func (b BaseResponse) Error() string {
|
|||||||
case 1203:
|
case 1203:
|
||||||
return "login env error"
|
return "login env error"
|
||||||
case 1205:
|
case 1205:
|
||||||
return "op too often"
|
return "opt too often"
|
||||||
default:
|
default:
|
||||||
if b.ErrMsg != "" {
|
return fmt.Sprintf("base response ret code %d", b.Ret)
|
||||||
return b.ErrMsg
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("base response error code %d", b.Ret)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,6 +123,30 @@ func (s *SyncCheckResponse) NorMal() bool {
|
|||||||
return s.Success() && s.Selector == "0"
|
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 {
|
type WebWxSyncResponse struct {
|
||||||
AddMsgCount int
|
AddMsgCount int
|
||||||
AddMsgList []*Message
|
AddMsgList []*Message
|
||||||
|
Loading…
x
Reference in New Issue
Block a user