更改messageHandler处理方式
This commit is contained in:
parent
d8291a5df2
commit
45d57c123a
35
bot.go
35
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)
|
||||
}
|
||||
|
||||
// 当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞
|
||||
|
64
bot_test.go
64
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)
|
||||
|
@ -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)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user