mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +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
|
||||
}(),
|
||||
Uin: int64(c.Uin),
|
||||
Uin: c.Uin,
|
||||
StartIndex: friendStartIndex,
|
||||
FriendCount: friendListCount,
|
||||
GroupId: 0,
|
||||
|
@ -54,6 +54,7 @@ type QQClient struct {
|
||||
running bool
|
||||
|
||||
lastMessageSeq int32
|
||||
lastMessageSeqTmp sync.Map
|
||||
onlinePushCache []int16 // reset on reconnect
|
||||
requestPacketRequestId int32
|
||||
messageSeq int32
|
||||
|
@ -153,7 +153,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
||||
continue
|
||||
}
|
||||
switch message.Head.MsgType {
|
||||
case 33:
|
||||
case 33: // 加群同步
|
||||
groupJoinLock.Lock()
|
||||
group := c.FindGroupByUin(message.Head.FromUin)
|
||||
if message.Head.AuthUin == c.Uin {
|
||||
@ -181,7 +181,28 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
|
||||
}
|
||||
}
|
||||
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 {
|
||||
continue
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
|
||||
type eventHandlers struct {
|
||||
privateMessageHandlers []func(*QQClient, *message.PrivateMessage)
|
||||
tempMessageHandlers []func(*QQClient, *message.TempMessage)
|
||||
groupMessageHandlers []func(*QQClient, *message.GroupMessage)
|
||||
groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent)
|
||||
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)) {
|
||||
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) {
|
||||
if msg == nil {
|
||||
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 {
|
||||
group := c.FindGroup(m.Head.GroupInfo.GroupCode)
|
||||
if group == nil {
|
||||
|
@ -12,6 +12,14 @@ type PrivateMessage struct {
|
||||
Elements []IMessageElement
|
||||
}
|
||||
|
||||
type TempMessage struct {
|
||||
Id int32
|
||||
GroupCode int64
|
||||
GroupName string
|
||||
Sender *Sender
|
||||
Elements []IMessageElement
|
||||
}
|
||||
|
||||
type GroupMessage struct {
|
||||
Id int32
|
||||
GroupCode int64
|
||||
@ -69,6 +77,22 @@ func (msg *PrivateMessage) ToString() (res string) {
|
||||
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) {
|
||||
for _, elem := range msg.Elements {
|
||||
switch e := elem.(type) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user