1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
use std::collections::HashMap;

use bytes::{BufMut, Bytes, BytesMut};
use jcers::JcePut;

use crate::command::common::{pack_uni_request_data, PbToBytes};
use crate::protocol::packet::*;
use crate::{jce, pb};

impl super::super::super::Engine {
    // SummaryCard.ReqSummaryCard
    pub fn build_summary_card_request_packet(&self, target: i64) -> Packet {
        let seq = self.next_seq();
        let gate = pb::profilecard::GateVaProfileGateReq {
            u_cmd: Some(3),
            st_privilege_req: Some(pb::profilecard::GatePrivilegeBaseInfoReq {
                u_req_uin: Some(target),
            }),
            st_gift_req: Some(pb::profilecard::GateGetGiftListReq {
                uin: Some(target as i32),
            }),
            st_vip_care: Some(pb::profilecard::GateGetVipCareReq { uin: Some(target) }),
            oidb_flag: vec![
                pb::profilecard::GateOidbFlagInfo {
                    fieled: Some(42334),
                    byets_value: None,
                },
                pb::profilecard::GateOidbFlagInfo {
                    fieled: Some(42340),
                    byets_value: None,
                },
                pb::profilecard::GateOidbFlagInfo {
                    fieled: Some(42344),
                    byets_value: None,
                },
                pb::profilecard::GateOidbFlagInfo {
                    fieled: Some(42354),
                    byets_value: None,
                },
            ],
            ..Default::default()
        }
        .to_bytes();
        let business_buf = {
            let mut w = BytesMut::new();
            let comm = pb::profilecard::BusiComm {
                ver: Some(1),
                seq: Some(seq as i32),
                fromuin: Some(self.uin()),
                touin: Some(target),
                service: Some(16),
                platform: Some(2),
                qqver: Some(self.transport.version.build_ver.into()),
                build: Some(4945),
                ..Default::default()
            }
            .to_bytes();
            w.put_u8(40);
            w.put_u32(comm.len() as u32);
            w.put_u32(gate.len() as u32);
            w.put_slice(&comm);
            w.put_slice(&gate);
            w.put_u8(42);
            w.freeze()
        };

        let req = jce::SummaryCardReq {
            uin: target,
            come_from: 31,
            get_control: 69181,
            add_friend_source: 3001,
            secure_sig: Bytes::from(vec![0]),
            req_medal_wall_info: 0,
            req_0x5eb_field_id: vec![
                27225, 27224, 42122, 42121, 27236, 27238, 42167, 42172, 40324, 42284, 42326, 42325,
                42356, 42363, 42361, 42367, 42377, 42425, 42505, 42488,
            ],
            req_services: vec![business_buf],
            req_nearby_god_info: 1,
            req_extend_card: 1,
            ..Default::default()
        };
        let mut head = jcers::JceMut::new();
        head.put_i32(2, 0);
        let buf = jce::RequestDataVersion3 {
            map: HashMap::from([
                ("ReqHead".to_string(), pack_uni_request_data(&head.freeze())),
                (
                    "ReqSummaryCard".to_string(),
                    pack_uni_request_data(&req.freeze()),
                ),
            ]),
        };
        let pkt = jce::RequestPacket {
            i_version: 3,
            s_servant_name: "SummaryCardServantObj".to_string(),
            s_func_name: "ReqSummaryCard".to_string(),
            s_buffer: buf.freeze(),
            ..Default::default()
        };
        self.uni_packet("SummaryCard.ReqSummaryCard", pkt.freeze())
    }
}