1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

feature self group message event.

This commit is contained in:
Mrs4s 2021-02-11 11:06:58 +08:00
parent 9054bf96ff
commit 9f1cf68e0e
2 changed files with 26 additions and 3 deletions

View File

@ -12,6 +12,7 @@ type eventHandlers struct {
privateMessageHandlers []func(*QQClient, *message.PrivateMessage)
tempMessageHandlers []func(*QQClient, *message.TempMessage)
groupMessageHandlers []func(*QQClient, *message.GroupMessage)
selfGroupMessageHandlers []func(*QQClient, *message.GroupMessage)
groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent)
groupRecalledHandlers []func(*QQClient, *GroupMessageRecalledEvent)
friendRecalledHandlers []func(*QQClient, *FriendMessageRecalledEvent)
@ -56,6 +57,10 @@ func (c *QQClient) OnGroupMessage(f func(*QQClient, *message.GroupMessage)) {
c.eventHandlers.groupMessageHandlers = append(c.eventHandlers.groupMessageHandlers, f)
}
func (c *QQClient) OnSelfGroupMessage(f func(*QQClient, *message.GroupMessage)) {
c.eventHandlers.selfGroupMessageHandlers = append(c.eventHandlers.selfGroupMessageHandlers, f)
}
func (c *QQClient) OnGroupMuted(f func(*QQClient, *GroupMuteEvent)) {
c.eventHandlers.groupMuteEventHandlers = append(c.eventHandlers.groupMuteEventHandlers, f)
}
@ -188,6 +193,17 @@ func (c *QQClient) dispatchGroupMessage(msg *message.GroupMessage) {
}
}
func (c *QQClient) dispatchGroupMessageSelf(msg *message.GroupMessage) {
if msg == nil {
return
}
for _, f := range c.eventHandlers.selfGroupMessageHandlers {
cover(func() {
f(c, msg)
})
}
}
func (c *QQClient) dispatchGroupMuteEvent(e *GroupMuteEvent) {
if e == nil {
return

View File

@ -316,7 +316,6 @@ func decodeGroupMessagePacket(c *QQClient, _ uint16, payload []byte) (interface{
Seq: pkt.Message.Head.GetMsgSeq(),
Msg: c.parseGroupMessage(pkt.Message),
})
return nil, nil
}
if pkt.Message.Content != nil && pkt.Message.Content.GetPkgNum() > 1 {
var builder *groupMessageBuilder
@ -330,11 +329,19 @@ func decodeGroupMessagePacket(c *QQClient, _ uint16, payload []byte) (interface{
builder.MessageSlices = append(builder.MessageSlices, pkt.Message)
if int32(len(builder.MessageSlices)) >= pkt.Message.Content.GetPkgNum() {
c.groupMsgBuilders.Delete(pkt.Message.Content.GetDivSeq())
c.dispatchGroupMessage(c.parseGroupMessage(builder.build()))
if pkt.Message.Head.GetFromUin() == c.Uin {
c.dispatchGroupMessageSelf(c.parseGroupMessage(builder.build()))
} else {
c.dispatchGroupMessage(c.parseGroupMessage(builder.build()))
}
}
return nil, nil
}
c.dispatchGroupMessage(c.parseGroupMessage(pkt.Message))
if pkt.Message.Head.GetFromUin() == c.Uin {
c.dispatchGroupMessageSelf(c.parseGroupMessage(pkt.Message))
} else {
c.dispatchGroupMessage(c.parseGroupMessage(pkt.Message))
}
return nil, nil
}