更改messageHandler处理方式
This commit is contained in:
parent
d8291a5df2
commit
45d57c123a
35
bot.go
35
bot.go
@ -6,15 +6,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Bot struct {
|
type Bot struct {
|
||||||
Caller *Caller
|
Caller *Caller
|
||||||
self *Self
|
self *Self
|
||||||
storage WechatStorage
|
storage WechatStorage
|
||||||
ScanCallBack func(body []byte)
|
ScanCallBack func(body []byte)
|
||||||
LoginCallBack func(body []byte)
|
LoginCallBack func(body []byte)
|
||||||
UUIDCallback func(uuid string)
|
UUIDCallback func(uuid string)
|
||||||
messageHandlerGroups *MessageHandlerGroup
|
MessageHandler func(msg *Message)
|
||||||
err error
|
err error
|
||||||
exit chan bool
|
exit chan bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断当前用户是否正常在线
|
// 判断当前用户是否正常在线
|
||||||
@ -175,26 +175,17 @@ func (b *Bot) getMessage() error {
|
|||||||
// 根据不同的消息类型来进行处理,方便后续统一调用
|
// 根据不同的消息类型来进行处理,方便后续统一调用
|
||||||
message.init(b)
|
message.init(b)
|
||||||
// 调用自定义的处理方法
|
// 调用自定义的处理方法
|
||||||
b.messageHandlerGroups.ProcessMessage(message)
|
if handler := b.MessageHandler; handler != nil {
|
||||||
|
handler(message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bot) prepare() {
|
func (b *Bot) prepare() {
|
||||||
if b.storage == nil {
|
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) {
|
func TestDefaultBot(t *testing.T) {
|
||||||
bot := DefaultBot()
|
bot := DefaultBot()
|
||||||
messageHandler := func(message *Message) {
|
bot.MessageHandler = func(message *Message) {
|
||||||
if message.Content == "logout" {
|
if message.Content == "logout" {
|
||||||
bot.Logout()
|
bot.Logout()
|
||||||
}
|
}
|
||||||
fmt.Println(message.Content)
|
fmt.Println(message.Content)
|
||||||
}
|
}
|
||||||
bot.RegisterMessageHandler(messageHandler)
|
|
||||||
bot.UUIDCallback = PrintlnQrcodeUrl
|
bot.UUIDCallback = PrintlnQrcodeUrl
|
||||||
if err := bot.Login(); err != nil {
|
if err := bot.Login(); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@ -30,68 +29,9 @@ func TestDefaultBot(t *testing.T) {
|
|||||||
fmt.Println(bot.Block())
|
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) {
|
func TestUser_GetAvatarResponse(t *testing.T) {
|
||||||
messageHandler := func(message *Message) {
|
|
||||||
fmt.Println(message)
|
|
||||||
}
|
|
||||||
bot := DefaultBot()
|
bot := DefaultBot()
|
||||||
bot.RegisterMessageHandler(messageHandler)
|
|
||||||
bot.UUIDCallback = PrintlnQrcodeUrl
|
bot.UUIDCallback = PrintlnQrcodeUrl
|
||||||
if err := bot.Login(); err != nil {
|
if err := bot.Login(); err != nil {
|
||||||
fmt.Println(err)
|
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