Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions client/builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/ProtocolScience/AstralGo/client/internal/auth"
"github.com/ProtocolScience/AstralGo/client/pb/cmd0x6ff"
"github.com/ProtocolScience/AstralGo/client/pb/nt/media"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0x1250_0"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0x8FC_2"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0xFD4_1"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0xFE1_2"
Expand Down Expand Up @@ -1443,6 +1444,27 @@ func (c *QQClient) buildAppInfoRequestPacket(id string) (uint16, []byte) {
}
*/

func (c *QQClient) buildFriendRelationPacket(uin int64) (uint16, []byte) {

request := &oidbSvcTrpcTcp0x1250_0.Request{
TargetUin: uin,
Field3: 1,
Field6: 1,
RelationInfo: &oidbSvcTrpcTcp0x1250_0.RelationInfo{
UinInfo: &oidbSvcTrpcTcp0x1250_0.UinInfo{
SelfUin: c.Uin,
TargetUin: uin,
},
Field5: 3436,
},
}

b, _ := proto.Marshal(request)
payload := c.packOIDBPackage(0x1250, 0, b)
return c.uniPacket("OidbSvcTrpcTcp.0x1250_0", payload)

}

func (c *QQClient) buildWordSegmentationPacket(data []byte) (uint16, []byte) {
payload := c.packOIDBPackageProto(3449, 1, &oidb.D79ReqBody{
Uin: uint64(c.Uin),
Expand Down
11 changes: 11 additions & 0 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,17 @@ func (c *QQClient) getGroupMembers(group *GroupInfo, interner *intern.StringInte
}
}*/

func (c *QQClient) GetFriendRelation(target int64) (*FriendRelation, error) {
rsp, err := c.sendAndWait(c.buildFriendRelationPacket(target))
if err != nil {
return nil, err
}
if rsp == nil {
return nil, errors.New("friend relation is unavailable: rsp is nil")
}
return rsp.(*FriendRelation), nil
}

func (c *QQClient) getGroupMembers(group *GroupInfo, interner *intern.StringInterner) ([]*GroupMemberInfo, error) {
var nextUin int64
var list []*GroupMemberInfo
Expand Down
25 changes: 25 additions & 0 deletions client/friend-relation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package client

type (
FriendRelation struct {
FriendAddInfo *FriendAddInfo
CommonGroupInfo *CommonGroupInfoList
}

FriendAddInfo struct {
Reason string
}

CommonGroupInfoList struct {
CommonGroupInfo []*CommonGroupInfo
SpecialGroupInfo *CommonGroupInfo
Reason string
}

CommonGroupInfo struct {
GroupUin int64
GroupId int64
GroupName string
Timestamp int64
}
)
37 changes: 37 additions & 0 deletions client/nt.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/ProtocolScience/AstralGo/client/pb/notify"
"github.com/ProtocolScience/AstralGo/client/pb/nt/event"
ntMsg "github.com/ProtocolScience/AstralGo/client/pb/nt/message"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0x1250_0"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0xFD4_1"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0xFE1_2"
"github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0xFE5_2"
Expand Down Expand Up @@ -57,6 +58,7 @@ var NTDecoders = map[string]func(*QQClient, *network.Packet) (any, error){
"OidbSvcTrpcTcp.0x126e_100": decodeNewTechMediaResponse,
"OidbSvcTrpcTcp.0x126e_200": decodeNewTechMediaResponse,
"OidbSvcTrpcTcp.0x9067_202": decodeNewTechMediaResponse,
"OidbSvcTrpcTcp.0x1250_0": decodeNewTechFriendRelationResponse,
}

func init() {
Expand Down Expand Up @@ -147,6 +149,41 @@ func decodeNewTechGetTroopListSimplyResponse(c *QQClient, pkt *network.Packet) (
}
return l, nil
}

func decodeNewTechFriendRelationResponse(_ *QQClient, pkt *network.Packet) (any, error) {
rsp := oidbSvcTrpcTcp0x1250_0.Response{}
err := unpackOIDBPackage(pkt.Payload, &rsp)
if err != nil {
return nil, err
}
groupList := make([]*CommonGroupInfo, 0, len(rsp.CommonGroupInfo.CommonGroupInfo))
for _, g := range rsp.CommonGroupInfo.CommonGroupInfo {
groupList = append(groupList, &CommonGroupInfo{
GroupUin: g.GroupUin,
GroupId: g.GroupId,
GroupName: g.GroupName,
Timestamp: g.Timestamp,
})
}
specialGroup := &CommonGroupInfo{
GroupUin: rsp.CommonGroupInfo.SpecialGroupInfo.GroupUin,
GroupId: rsp.CommonGroupInfo.SpecialGroupInfo.GroupId,
GroupName: rsp.CommonGroupInfo.SpecialGroupInfo.GroupName,
Timestamp: rsp.CommonGroupInfo.SpecialGroupInfo.Timestamp,
}

return &FriendRelation{
FriendAddInfo: &FriendAddInfo{
Reason: rsp.FriendAddInfo.Reason,
},
CommonGroupInfo: &CommonGroupInfoList{
CommonGroupInfo: groupList,
SpecialGroupInfo: specialGroup,
Reason: rsp.CommonGroupInfo.Reason,
},
}, nil
}

func decodeNewTechGetTroopMemberListResponse(_ *QQClient, pkt *network.Packet) (any, error) {
rsp := oidbSvcTrpcTcp0xFE7_3.Response{}
err := unpackOIDBPackage(pkt.Payload, &rsp)
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
syntax = "proto3";
option go_package = "github.com/ProtocolScience/AstralGo/client/pb/nt/oidb/oidbSvcTrpcTcp0x1250_0";

message Request {
int64 targetUin = 2;
int32 field3 = 4; // 1
RelationInfo relationInfo = 5;
int32 field6 = 6; // 1
}

message RelationInfo {
UinInfo uinInfo = 3;
int32 field5 = 5; // 3436
}

message UinInfo {
int64 selfUin = 1;
int64 targetUin = 2;
}

message Response {
int64 selfUin = 1;
int64 targetUin = 2;
FriendAddInfo friendAddInfo = 11;
CommonGroupInfoList commonGroupInfo = 12;
}

message FriendAddInfo {
string reason = 4;
}

message CommonGroupInfoList{
repeated CommonGroupInfo commonGroupInfo = 1;
CommonGroupInfo specialGroupInfo = 2;
string reason = 3;
}

message CommonGroupInfo{
int64 groupUin = 1;
int64 groupId = 2;
string groupName = 3;
int64 timestamp = 4;
}