From 92f9e10a270407b6fd9afba03e6392e76dbdbb57 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 14 Nov 2020 16:09:45 +0800 Subject: [PATCH 1/3] add send friend poke --- client/builders.go | 18 ++++++++++++++++++ client/client.go | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/client/builders.go b/client/builders.go index d1a564cf..090c10c4 100644 --- a/client/builders.go +++ b/client/builders.go @@ -1019,6 +1019,24 @@ func (c *QQClient) buildGroupPokePacket(groupCode, target int64) (uint16, []byte return seq, packet } +// OidbSvc.0xed3 +func (c *QQClient) buildFriendPokePacket(target int64) (uint16, []byte) { + seq := c.nextSeq() + body := &oidb.DED3ReqBody{ + ToUin: target, + AioUin: target, + } + b, _ := proto.Marshal(body) + req := &oidb.OIDBSSOPkg{ + Command: 3795, + ServiceType: 1, + Bodybuffer: b, + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xed3", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + // OidbSvc.0x55c_1 func (c *QQClient) buildGroupAdminSetPacket(groupCode, member int64, flag bool) (uint16, []byte) { seq := c.nextSeq() diff --git a/client/client.go b/client/client.go index 763fe518..5d4a30eb 100644 --- a/client/client.go +++ b/client/client.go @@ -616,6 +616,10 @@ func (c *QQClient) sendGroupPoke(groupCode, target int64) { _, _ = c.sendAndWait(c.buildGroupPokePacket(groupCode, target)) } +func (c *QQClient) SendFriendPoke(target int64) { + _, _ = c.sendAndWait(c.buildFriendPokePacket(target)) +} + func (c *QQClient) UploadGroupImage(groupCode int64, img []byte) (*message.GroupImageElement, error) { h := md5.Sum(img) seq, pkt := c.buildGroupImageStorePacket(groupCode, h[:], int32(len(img))) From bf906743759ee1611a470f3e0b49a95048ca7ff8 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 14 Nov 2020 17:11:44 +0800 Subject: [PATCH 2/3] support friend poke --- client/decoders.go | 16 ++++++++++++++++ client/entities.go | 3 +-- client/events.go | 26 +++++++++++++++++++++----- client/notify.go | 14 ++++++++++++++ 4 files changed, 52 insertions(+), 7 deletions(-) diff --git a/client/decoders.go b/client/decoders.go index 9a404ee3..d005ea8d 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -776,6 +776,22 @@ func decodeOnlinePushReqPacket(c *QQClient, seq uint16, payload []byte) (interfa c.dispatchLeaveGroupEvent(&GroupLeaveEvent{Group: g}) } groupLeaveLock.Unlock() + case 290: + t := ¬ify.GeneralGrayTipInfo{} + _ = proto.Unmarshal(probuf, t) + var sender int64 + for _, templ := range t.MsgTemplParam { + if templ.Name == "uin_str1" { + sender, _ = strconv.ParseInt(templ.Value, 10, 64) + } + } + if sender == 0 { + return nil, nil + } + c.dispatchFriendNotifyEvent(&FriendPokeNotifyEvent{ + Sender: sender, + Receiver: c.Uin, + }) case 0x44: s44 := pb.Sub44{} if err := proto.Unmarshal(probuf, &s44); err != nil { diff --git a/client/entities.go b/client/entities.go index d4f10c56..deb6766f 100644 --- a/client/entities.go +++ b/client/entities.go @@ -44,7 +44,6 @@ type ( Nickname string Remark string FaceId int16 - //msgSeqList *utils.Cache } @@ -130,7 +129,7 @@ type ( Member *GroupMemberInfo } - IGroupNotifyEvent interface { + INotifyEvent interface { From() int64 Content() string } diff --git a/client/events.go b/client/events.go index 83a23c0d..441b6bc5 100644 --- a/client/events.go +++ b/client/events.go @@ -26,7 +26,8 @@ type eventHandlers struct { disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent) logHandlers []func(*QQClient, *LogEvent) serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) bool - notifyHandlers []func(*QQClient, IGroupNotifyEvent) + groupNotifyHandlers []func(*QQClient, INotifyEvent) + friendNotifyHandlers []func(*QQClient, INotifyEvent) offlineFileHandlers []func(*QQClient, *OfflineFileEvent) groupMessageReceiptHandlers sync.Map } @@ -119,8 +120,12 @@ func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) { c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f) } -func (c *QQClient) OnGroupNotify(f func(*QQClient, IGroupNotifyEvent)) { - c.eventHandlers.notifyHandlers = append(c.eventHandlers.notifyHandlers, f) +func (c *QQClient) OnGroupNotify(f func(*QQClient, INotifyEvent)) { + c.eventHandlers.groupNotifyHandlers = append(c.eventHandlers.groupNotifyHandlers, f) +} + +func (c *QQClient) OnFriendNotify(f func(*QQClient, INotifyEvent)) { + c.eventHandlers.friendNotifyHandlers = append(c.eventHandlers.friendNotifyHandlers, f) } func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool { @@ -320,11 +325,22 @@ func (c *QQClient) dispatchNewFriendEvent(e *NewFriendEvent) { } } -func (c *QQClient) dispatchGroupNotifyEvent(e IGroupNotifyEvent) { +func (c *QQClient) dispatchGroupNotifyEvent(e INotifyEvent) { if e == nil { return } - for _, f := range c.eventHandlers.notifyHandlers { + for _, f := range c.eventHandlers.groupNotifyHandlers { + cover(func() { + f(c, e) + }) + } +} + +func (c *QQClient) dispatchFriendNotifyEvent(e INotifyEvent) { + if e == nil { + return + } + for _, f := range c.eventHandlers.friendNotifyHandlers { cover(func() { f(c, e) }) diff --git a/client/notify.go b/client/notify.go index c52c9206..915a06be 100644 --- a/client/notify.go +++ b/client/notify.go @@ -28,6 +28,12 @@ type ( Uin int64 Nick string } + + // FriendPokeNotifyEvent 好友戳一戳提示事件 + FriendPokeNotifyEvent struct { + Sender int64 + Receiver int64 + } ) // grayTipProcessor 提取出来专门用于处理群内 notify tips @@ -88,6 +94,14 @@ func (e *GroupPokeNotifyEvent) Content() string { return fmt.Sprintf("%d戳了戳%d", e.Sender, e.Receiver) } +func (e *FriendPokeNotifyEvent) From() int64 { + return e.Sender +} + +func (e *FriendPokeNotifyEvent) Content() string { + return fmt.Sprintf("%d戳了戳%d", e.Sender, e.Receiver) +} + func (e *GroupRedBagLuckyKingNotifyEvent) From() int64 { return e.GroupCode } From a455b21bad18c077442fee711b25524471aa02af Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 14 Nov 2020 17:14:50 +0800 Subject: [PATCH 3/3] fmt --- client/decoders.go | 2 +- client/notify.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/decoders.go b/client/decoders.go index d005ea8d..91461d3b 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -789,7 +789,7 @@ func decodeOnlinePushReqPacket(c *QQClient, seq uint16, payload []byte) (interfa return nil, nil } c.dispatchFriendNotifyEvent(&FriendPokeNotifyEvent{ - Sender: sender, + Sender: sender, Receiver: c.Uin, }) case 0x44: diff --git a/client/notify.go b/client/notify.go index 915a06be..41508fff 100644 --- a/client/notify.go +++ b/client/notify.go @@ -31,8 +31,8 @@ type ( // FriendPokeNotifyEvent 好友戳一戳提示事件 FriendPokeNotifyEvent struct { - Sender int64 - Receiver int64 + Sender int64 + Receiver int64 } )