diff --git a/client/client.go b/client/client.go index 69b8aa12..9f0d9579 100644 --- a/client/client.go +++ b/client/client.go @@ -106,6 +106,8 @@ type QQClient struct { GroupDigestEvent EventHandle[*GroupDigestEvent] OtherClientStatusChangedEvent EventHandle[*OtherClientStatusChangedEvent] OfflineFileEvent EventHandle[*OfflineFileEvent] + GroupDisbandEvent EventHandle[*GroupDisbandEvent] + DeleteFriendEvent EventHandle[*DeleteFriendEvent] // message state msgSvcCache *utils.Cache[unit] diff --git a/client/decoders.go b/client/decoders.go index 789b6cb1..3a7ea414 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -732,6 +732,15 @@ func decodeOnlinePushTransPacket(c *QQClient, pkt *network.Packet) (any, error) Operator: g.FindMember(operator), }) } + case 0x01, 0x81: // kosbot add: 群解散. 暂时这样 See https://github.com/lz1998/ricq/blob/064ddddca19aa0410e2514852e3a151fd9913371/ricq-core/src/command/online_push/decoder.rs#L86 + c.GroupDisbandEvent.dispatch(c, &GroupDisbandEvent{ + Group: g, + Operator: g.FindMember(operator), + Time: int64(info.MsgTime.Unwrap()), + }) + if err = c.ReloadGroupList(); err != nil { + return nil, err + } } } } diff --git a/client/entities.go b/client/entities.go index b1e312ce..642ecbfb 100644 --- a/client/entities.go +++ b/client/entities.go @@ -191,6 +191,17 @@ type ( DownloadUrl string } + GroupDisbandEvent struct { + Group *GroupInfo + Time int64 + Operator *GroupMemberInfo + } + + DeleteFriendEvent struct { + Uin int64 + Nickname string + } + // GroupDigest 群精华消息 GroupDigest struct { GroupCode int64 `json:"group_code,string"` diff --git a/client/online_push.go b/client/online_push.go index 3cc5560c..e87bc79a 100644 --- a/client/online_push.go +++ b/client/online_push.go @@ -208,6 +208,10 @@ func msgType0x210Sub27Decoder(c *QQClient, protobuf []byte) error { if m.DelFriend != nil { frdUin := m.DelFriend.Uins[0] if frd := c.FindFriend(int64(frdUin)); frd != nil { + c.DeleteFriendEvent.dispatch(c, &DeleteFriendEvent{ + Uin: frd.Uin, + Nickname: frd.Nickname, + }) if err := c.ReloadFriendList(); err != nil { return errors.Wrap(err, "failed to reload friend list") }