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

feat: delete friend.

This commit is contained in:
Mrs4s 2021-04-29 09:51:15 +08:00
parent fd31a4eb28
commit b66d8a9a95
No known key found for this signature in database
GPG Key ID: 3186E98FA19CE3A7
4 changed files with 62 additions and 3 deletions

View File

@ -529,6 +529,14 @@ type (
Version int32 `jceId:"2"` Version int32 `jceId:"2"`
ReqServices [][]byte `jceId:"3"` // busi ReqServices [][]byte `jceId:"3"` // busi
} }
DelFriendReq struct {
IJceStruct
Uin int64 `jceId:"0"`
DelUin int64 `jceId:"1"`
DelType byte `jceId:"2"`
Version int32 `jceId:"3"`
}
) )
func (pkt *RequestPacket) ToBytes() []byte { func (pkt *RequestPacket) ToBytes() []byte {
@ -838,3 +846,9 @@ func (pkt *SvcReqRegisterNew) ToBytes() []byte {
w.WriteJceStructRaw(pkt) w.WriteJceStructRaw(pkt)
return w.Bytes() return w.Bytes()
} }
func (pkt *DelFriendReq) ToBytes() []byte {
w := NewJceWriter()
w.WriteJceStructRaw(pkt)
return w.Bytes()
}

View File

@ -651,6 +651,31 @@ func (c *QQClient) buildSummaryCardRequestPacket(target int64) (uint16, []byte)
return seq, packet return seq, packet
} }
// friendlist.delFriend
func (c *QQClient) buildFriendDeletePacket(target int64) (uint16, []byte) {
seq := c.nextSeq()
req := &jce.DelFriendReq{
Uin: c.Uin,
DelUin: target,
DelType: 2,
Version: 1,
}
buf := &jce.RequestDataVersion3{
Map: map[string][]byte{"DF": packUniRequestData(req.ToBytes())},
}
pkt := &jce.RequestPacket{
IVersion: 3,
IRequestId: c.nextPacketSeq(),
SServantName: "mqq.IMService.FriendListServiceServantObj",
SFuncName: "DelFriendReq",
SBuffer: buf.ToBytes(),
Context: make(map[string]string),
Status: make(map[string]string),
}
packet := packets.BuildUniPacket(c.Uin, seq, "friendlist.delFriend", 1, c.OutGoingPacketSessionId, []byte{}, c.sigInfo.d2Key, pkt.ToBytes())
return seq, packet
}
// friendlist.GetTroopListReqV2 // friendlist.GetTroopListReqV2
func (c *QQClient) buildGroupListRequestPacket(vecCookie []byte) (uint16, []byte) { func (c *QQClient) buildGroupListRequestPacket(vecCookie []byte) (uint16, []byte) {
seq := c.nextSeq() seq := c.nextSeq()
@ -665,10 +690,8 @@ func (c *QQClient) buildGroupListRequestPacket(vecCookie []byte) (uint16, []byte
VersionNum: 1, VersionNum: 1,
GetLongGroupName: 1, GetLongGroupName: 1,
} }
b := append([]byte{0x0A}, req.ToBytes()...)
b = append(b, 0x0B)
buf := &jce.RequestDataVersion3{ buf := &jce.RequestDataVersion3{
Map: map[string][]byte{"GetTroopListReqV2Simplify": b}, Map: map[string][]byte{"GetTroopListReqV2Simplify": packUniRequestData(req.ToBytes())},
} }
pkt := &jce.RequestPacket{ pkt := &jce.RequestPacket{
IVersion: 3, IVersion: 3,

View File

@ -141,6 +141,7 @@ var decoders = map[string]func(*QQClient, *incomingPacketInfo, []byte) (interfac
"MessageSvc.PushForceOffline": decodeForceOfflinePacket, "MessageSvc.PushForceOffline": decodeForceOfflinePacket,
"PbMessageSvc.PbMsgWithDraw": decodeMsgWithDrawResponse, "PbMessageSvc.PbMsgWithDraw": decodeMsgWithDrawResponse,
"friendlist.getFriendGroupList": decodeFriendGroupListResponse, "friendlist.getFriendGroupList": decodeFriendGroupListResponse,
"friendlist.delFriend": decodeFriendDeleteResponse,
"friendlist.GetTroopListReqV2": decodeGroupListResponse, "friendlist.GetTroopListReqV2": decodeGroupListResponse,
"friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse, "friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse,
"group_member_card.get_group_member_card_info": decodeGroupMemberInfoResponse, "group_member_card.get_group_member_card_info": decodeGroupMemberInfoResponse,
@ -715,6 +716,14 @@ func (c *QQClient) FindFriend(uin int64) *FriendInfo {
return nil return nil
} }
func (c *QQClient) DeleteFriend(uin int64) error {
if c.FindFriend(uin) == nil {
return errors.New("friend not found")
}
_, err := c.sendAndWait(c.buildFriendDeletePacket(uin))
return errors.Wrap(err, "delete friend error")
}
func (c *QQClient) FindGroupByUin(uin int64) *GroupInfo { func (c *QQClient) FindGroupByUin(uin int64) *GroupInfo {
for _, g := range c.GroupList { for _, g := range c.GroupList {
f := g f := g

View File

@ -481,6 +481,19 @@ func decodeFriendGroupListResponse(_ *QQClient, _ *incomingPacketInfo, payload [
return rsp, nil return rsp, nil
} }
// friendlist.delFriend
func decodeFriendDeleteResponse(_ *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) {
request := &jce.RequestPacket{}
request.ReadFrom(jce.NewJceReader(payload))
data := &jce.RequestDataVersion3{}
data.ReadFrom(jce.NewJceReader(request.SBuffer))
r := jce.NewJceReader(data.Map["DFRESP"][1:])
if ret := r.ReadInt32(2); ret != 0 {
return nil, errors.Errorf("delete friend error: %v", ret)
}
return nil, nil
}
// friendlist.GetTroopListReqV2 // friendlist.GetTroopListReqV2
func decodeGroupListResponse(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) { func decodeGroupListResponse(c *QQClient, _ *incomingPacketInfo, payload []byte) (interface{}, error) {
request := &jce.RequestPacket{} request := &jce.RequestPacket{}