mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
supported TempMessageEvent.
This commit is contained in:
parent
ef3d1cab23
commit
d86adf8619
@ -196,7 +196,7 @@ func (c *QQClient) buildFriendGroupListRequestPacket(friendStartIndex, friendLis
|
|||||||
}
|
}
|
||||||
return 1
|
return 1
|
||||||
}(),
|
}(),
|
||||||
Uin: int64(c.Uin),
|
Uin: c.Uin,
|
||||||
StartIndex: friendStartIndex,
|
StartIndex: friendStartIndex,
|
||||||
FriendCount: friendListCount,
|
FriendCount: friendListCount,
|
||||||
GroupId: 0,
|
GroupId: 0,
|
||||||
|
@ -54,6 +54,7 @@ type QQClient struct {
|
|||||||
running bool
|
running bool
|
||||||
|
|
||||||
lastMessageSeq int32
|
lastMessageSeq int32
|
||||||
|
lastMessageSeqTmp sync.Map
|
||||||
onlinePushCache []int16 // reset on reconnect
|
onlinePushCache []int16 // reset on reconnect
|
||||||
requestPacketRequestId int32
|
requestPacketRequestId int32
|
||||||
messageSeq int32
|
messageSeq int32
|
||||||
|
@ -153,7 +153,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
switch message.Head.MsgType {
|
switch message.Head.MsgType {
|
||||||
case 33:
|
case 33: // 加群同步
|
||||||
groupJoinLock.Lock()
|
groupJoinLock.Lock()
|
||||||
group := c.FindGroupByUin(message.Head.FromUin)
|
group := c.FindGroupByUin(message.Head.FromUin)
|
||||||
if message.Head.AuthUin == c.Uin {
|
if message.Head.AuthUin == c.Uin {
|
||||||
@ -181,7 +181,28 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
groupJoinLock.Unlock()
|
groupJoinLock.Unlock()
|
||||||
case 166:
|
case 141: // 临时会话
|
||||||
|
if message.Head.C2CTmpMsgHead == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
group := c.FindGroupByUin(message.Head.C2CTmpMsgHead.GroupUin)
|
||||||
|
if group == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mem := group.FindMember(message.Head.FromUin)
|
||||||
|
if mem == nil || message.Head.FromUin == c.Uin {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
lastSeq, ok := c.lastMessageSeqTmp.Load(mem.Uin)
|
||||||
|
if !ok {
|
||||||
|
c.lastMessageSeqTmp.Store(mem.Uin, int32(-1))
|
||||||
|
lastSeq = int32(-1)
|
||||||
|
}
|
||||||
|
if message.Head.MsgSeq > lastSeq.(int32) {
|
||||||
|
c.lastMessageSeqTmp.Store(mem.Uin, message.Head.MsgSeq)
|
||||||
|
c.dispatchTempMessage(c.parseTempMessage(message))
|
||||||
|
}
|
||||||
|
case 166: // 好友消息
|
||||||
if message.Body.RichText == nil || message.Body.RichText.Elems == nil {
|
if message.Body.RichText == nil || message.Body.RichText.Elems == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
type eventHandlers struct {
|
type eventHandlers struct {
|
||||||
privateMessageHandlers []func(*QQClient, *message.PrivateMessage)
|
privateMessageHandlers []func(*QQClient, *message.PrivateMessage)
|
||||||
|
tempMessageHandlers []func(*QQClient, *message.TempMessage)
|
||||||
groupMessageHandlers []func(*QQClient, *message.GroupMessage)
|
groupMessageHandlers []func(*QQClient, *message.GroupMessage)
|
||||||
groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent)
|
groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent)
|
||||||
groupRecalledHandlers []func(*QQClient, *GroupMessageRecalledEvent)
|
groupRecalledHandlers []func(*QQClient, *GroupMessageRecalledEvent)
|
||||||
@ -30,6 +31,10 @@ func (c *QQClient) OnPrivateMessageF(filter func(*message.PrivateMessage) bool,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *QQClient) OnTempMessage(f func(*QQClient, *message.TempMessage)) {
|
||||||
|
c.eventHandlers.tempMessageHandlers = append(c.eventHandlers.tempMessageHandlers, f)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *QQClient) OnGroupMessage(f func(*QQClient, *message.GroupMessage)) {
|
func (c *QQClient) OnGroupMessage(f func(*QQClient, *message.GroupMessage)) {
|
||||||
c.eventHandlers.groupMessageHandlers = append(c.eventHandlers.groupMessageHandlers, f)
|
c.eventHandlers.groupMessageHandlers = append(c.eventHandlers.groupMessageHandlers, f)
|
||||||
}
|
}
|
||||||
@ -87,6 +92,17 @@ func (c *QQClient) dispatchFriendMessage(msg *message.PrivateMessage) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *QQClient) dispatchTempMessage(msg *message.TempMessage) {
|
||||||
|
if msg == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, f := range c.eventHandlers.tempMessageHandlers {
|
||||||
|
cover(func() {
|
||||||
|
f(c, msg)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *QQClient) dispatchGroupMessage(msg *message.GroupMessage) {
|
func (c *QQClient) dispatchGroupMessage(msg *message.GroupMessage) {
|
||||||
if msg == nil {
|
if msg == nil {
|
||||||
return
|
return
|
||||||
|
@ -130,6 +130,22 @@ func (c *QQClient) parsePrivateMessage(msg *msg.Message) *message.PrivateMessage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *QQClient) parseTempMessage(msg *msg.Message) *message.TempMessage {
|
||||||
|
group := c.FindGroupByUin(msg.Head.C2CTmpMsgHead.GroupUin)
|
||||||
|
mem := group.FindMember(msg.Head.FromUin)
|
||||||
|
return &message.TempMessage{
|
||||||
|
Id: msg.Head.MsgSeq,
|
||||||
|
GroupCode: group.Code,
|
||||||
|
GroupName: group.Name,
|
||||||
|
Sender: &message.Sender{
|
||||||
|
Uin: mem.Uin,
|
||||||
|
Nickname: mem.Nickname,
|
||||||
|
CardName: mem.CardName,
|
||||||
|
},
|
||||||
|
Elements: parseMessageElems(msg.Body.RichText.Elems),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
||||||
group := c.FindGroup(m.Head.GroupInfo.GroupCode)
|
group := c.FindGroup(m.Head.GroupInfo.GroupCode)
|
||||||
if group == nil {
|
if group == nil {
|
||||||
|
@ -12,6 +12,14 @@ type PrivateMessage struct {
|
|||||||
Elements []IMessageElement
|
Elements []IMessageElement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TempMessage struct {
|
||||||
|
Id int32
|
||||||
|
GroupCode int64
|
||||||
|
GroupName string
|
||||||
|
Sender *Sender
|
||||||
|
Elements []IMessageElement
|
||||||
|
}
|
||||||
|
|
||||||
type GroupMessage struct {
|
type GroupMessage struct {
|
||||||
Id int32
|
Id int32
|
||||||
GroupCode int64
|
GroupCode int64
|
||||||
@ -69,6 +77,22 @@ func (msg *PrivateMessage) ToString() (res string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg *TempMessage) ToString() (res string) {
|
||||||
|
for _, elem := range msg.Elements {
|
||||||
|
switch e := elem.(type) {
|
||||||
|
case *TextElement:
|
||||||
|
res += e.Content
|
||||||
|
case *ImageElement:
|
||||||
|
res += "[Image:" + e.Filename + "]"
|
||||||
|
case *FaceElement:
|
||||||
|
res += "[" + e.Name + "]"
|
||||||
|
case *AtElement:
|
||||||
|
res += e.Display
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (msg *GroupMessage) ToString() (res string) {
|
func (msg *GroupMessage) ToString() (res string) {
|
||||||
for _, elem := range msg.Elements {
|
for _, elem := range msg.Elements {
|
||||||
switch e := elem.(type) {
|
switch e := elem.(type) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user