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
use std::collections::HashMap;

use bytes::Bytes;

pub mod builder;
pub mod decoder;

#[derive(Debug, Default, Clone)]
pub struct GroupSystemMessages {
    pub self_invited: Vec<SelfInvited>,
    pub join_group_requests: Vec<JoinGroupRequest>,
}

// 自己被邀请
#[derive(Debug, Default, Clone)]
pub struct SelfInvited {
    pub msg_seq: i64,
    pub msg_time: i64,
    pub invitor_uin: i64,
    pub invitor_nick: String,
    pub group_code: i64,
    pub group_name: String,
    pub actor_uin: i64,
    pub actor_nick: String,
}

// 用户申请进群
#[derive(Debug, Default, Clone)]
pub struct JoinGroupRequest {
    pub msg_seq: i64,
    pub msg_time: i64,
    pub message: String,
    pub req_uin: i64,
    pub req_nick: String,
    pub group_code: i64,
    pub group_name: String,
    pub actor_uin: i64,
    pub suspicious: bool,
    pub invitor_uin: Option<i64>,
    pub invitor_nick: Option<String>,
}

#[derive(Debug, Default, Clone)]
pub struct FriendSystemMessages {
    pub requests: Vec<NewFriendRequest>,
}

#[derive(Debug, Default, Clone)]
pub struct NewFriendRequest {
    pub msg_seq: i64,
    pub message: String,
    pub req_uin: i64,
    pub req_nick: String,
}

#[derive(Debug, Default, Clone)]
pub struct RichSigInfo {
    pub status: u8,
    pub uin: i64,
    pub dw_time: i64,
    /// 1-actionText
    /// 2-dataText
    /// 4-locationText
    /// 130-经纬度
    /// 129-actionId+dataId
    /// 猜测A:[1,128) 范围内,且不是1,2,4,字符串拼一起作为签名
    /// 猜测B:3是签名
    pub infos: HashMap<u8, Bytes>,
}

impl RichSigInfo {
    pub fn get_signature(&self) -> String {
        String::from_utf8_lossy(&self.infos.get(&3).cloned().unwrap_or_default()).into_owned()
    }
}