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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
use bytes::Bytes;
use std::time::Duration;

pub use crate::command::multi_msg::{ForwardMessage, ForwardNode, MessageNode};
pub use crate::command::oidb_svc::{
    LinkShare, MusicShare, MusicVersion, ProfileDetailUpdate, ShareTarget,
};
pub use crate::command::stat_svc::{CustomOnlineStatus, ExtOnlineStatus, OnlineStatus, Status};
use crate::msg::MessageChain;
use crate::{jce, pb};

#[derive(Default, Debug)]
pub struct AccountInfo {
    pub nickname: String,
    pub age: u8,
    pub gender: u8,
}

#[derive(Default, Debug)]
pub struct AddressInfo {
    pub srv_sso_addrs: Vec<String>,
    pub other_srv_addrs: Vec<String>,
    pub file_storage_info: jce::FileStoragePushFSSvcList,
}

#[derive(Debug, Default)]
pub struct OtherClientInfo {
    pub app_id: i64,
    pub instance_id: i32,
    pub sub_platform: String,
    pub device_kind: String,
}

pub struct QiDianAccountInfo {
    pub master_uin: i64,
    pub ext_name: String,
    pub create_time: i64,

    pub big_data_req_addrs: Vec<String>,
    pub big_data_req_session: BigDataReqSessionInfo,
}

#[derive(Debug, Default)]
pub struct BigDataReqSessionInfo {
    pub sig_session: Bytes,
    pub session_key: Bytes,
}

#[derive(Debug, Default)]
pub struct GroupInfo {
    pub uin: i64,
    pub code: i64,
    pub name: String,
    pub memo: String,
    pub owner_uin: i64,
    pub group_create_time: u32,
    pub group_level: u32,
    pub member_count: u16,
    pub max_member_count: u16,
    // 全群禁言时间
    pub shut_up_timestamp: i64,
    // 自己被禁言时间
    pub my_shut_up_timestamp: i64,
    // 最后一条信息的SEQ,只有通过 GetGroupInfo 函数获取的 GroupInfo 才会有
    pub last_msg_seq: i64,
}

#[derive(Debug, Default, Clone)]
pub struct GroupMemberInfo {
    pub group_code: i64,
    pub uin: i64,
    pub gender: u8,
    pub nickname: String,
    pub card_name: String,
    pub level: u16,
    pub join_time: i64,
    pub last_speak_time: i64,
    pub special_title: String,
    pub special_title_expire_time: i64,
    pub shut_up_timestamp: i64,
    pub permission: GroupMemberPermission,
}

#[derive(Debug, Clone, derivative::Derivative)]
#[derivative(Default)]
pub enum GroupMemberPermission {
    Owner = 1,
    Administrator = 2,
    #[derivative(Default)]
    Member = 3,
}

/// 好友信息
#[derive(Debug, Default, Clone)]
pub struct FriendInfo {
    pub uin: i64,
    pub nick: String,
    pub remark: String,
    pub face_id: i16,
    pub group_id: u8,
}

/// 好友分组信息
#[derive(Debug, Default, Clone)]
pub struct FriendGroupInfo {
    pub group_id: u8,
    pub group_name: String,
    pub friend_count: i32,
    pub online_friend_count: i32,
    pub seq_id: u8,
}

#[derive(Debug, Default, Clone)]
pub struct SummaryCardInfo {
    pub uin: i64,
    pub sex: u8,
    pub age: u8,
    pub nickname: String,
    pub level: i32,
    pub city: String,
    pub sign: String,
    pub mobile: String,
    pub login_days: i64,
    /// 用于点赞
    pub cookie: Bytes,
}

#[derive(Debug, Clone, Default)]
pub struct FriendMessage {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub target: i64,
    pub time: i32,
    pub from_uin: i64,
    pub from_nick: String,
    pub elements: MessageChain,
}

#[derive(Debug, Clone, Default)]
pub struct GroupMessage {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub group_code: i64,
    pub group_name: String,
    pub group_card: String,
    pub from_uin: i64,
    pub time: i32,
    pub elements: MessageChain,
}

#[derive(Debug, Clone, Default)]
pub struct GroupTempMessage {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub from_uin: i64,
    pub from_nick: String,
    pub time: i32,
    pub elements: MessageChain,
    pub group_code: i64,
}

#[derive(Debug, Clone, Default)]
pub struct NewMember {
    pub group_code: i64,
    pub member_uin: i64,
}

#[derive(Debug, Clone, Default)]
pub struct GroupMute {
    pub group_code: i64,
    pub operator_uin: i64,
    pub target_uin: i64,
    pub duration: Duration,
}

#[derive(Debug, Clone, Default)]
pub struct FriendMessageRecall {
    pub msg_seq: i32,
    pub friend_uin: i64,
    pub time: i64,
}

#[derive(Debug, Clone, Default)]
pub struct GroupMessageRecall {
    pub msg_seq: i32,
    pub group_code: i64,
    pub operator_uin: i64,
    pub author_uin: i64,
    pub time: i32,
}

#[derive(Debug, Clone, Default)]
pub struct GroupLeave {
    pub group_code: i64,
    pub member_uin: i64,
    pub operator_uin: Option<i64>,
}

#[derive(Debug, Clone, Default)]
pub struct FriendPoke {
    pub sender: i64,
    pub receiver: i64,
}

#[derive(Debug, Clone, Default)]
pub struct GroupNameUpdate {
    pub group_code: i64,
    pub operator_uin: i64,
    pub group_name: String,
}

#[derive(Debug, Clone, Default)]
pub struct DeleteFriend {
    pub uin: i64,
}

#[derive(Debug, Clone, Default)]
pub struct MemberPermissionChange {
    pub group_code: i64,
    pub member_uin: i64,
    pub new_permission: GroupMemberPermission,
}

#[derive(Debug, Clone, Default)]
pub struct GroupDisband {
    pub group_code: i64,
    pub operator_uin: i64,
}

// 用于撤回
#[derive(Debug, Clone, Default)]
pub struct MessageReceipt {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub time: i64,
}

#[derive(Debug, Clone, Default)]
pub struct GroupAudio(pub pb::msg::Ptt);

#[derive(Debug, Clone, Default)]
pub struct GroupAudioMessage {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub group_code: i64,
    pub group_name: String,
    pub group_card: String,
    pub from_uin: i64,
    pub time: i32,
    pub audio: GroupAudio,
}

#[derive(Debug, Clone, Default)]
pub struct FriendAudio(pub pb::msg::Ptt);

#[derive(Debug, Clone, Default)]
pub struct FriendAudioMessage {
    pub seqs: Vec<i32>,
    pub rands: Vec<i32>,
    pub target: i64,
    pub time: i32,
    pub from_uin: i64,
    pub from_nick: String,
    pub audio: FriendAudio,
}
// 群文件总数
#[derive(Debug, Clone, Default)]
pub struct GroupFileCount {
    pub is_full: bool,
    pub all_file_count: u32,
    pub limit_count: u32,
    pub file_too_many: bool,
}

// 群文件列表
#[derive(Debug, Clone, Default)]
pub struct GroupFileList {
    pub all_file_count: u32,
    pub is_end: bool,
    pub items: Vec<GroupFileItem>,
    pub role: u32,
    pub next_index: u32,
}
// 群文件列表
#[derive(Debug, Clone, Default)]
pub struct GroupFileItem {
    pub r#type: u32,
    pub folder_info: GroupFolderInfo,
    pub file_info: GroupFileInfo,
}

// 群文件夹
#[derive(Debug, Clone, Default)]
pub struct GroupFolderInfo {
    pub folder_id: String,
    pub parent_folder_id: String,
    pub folder_name: String,
    pub create_time: u32,
    pub modify_time: u32,
    pub create_uin: u64,
    pub creator_name: String,
    pub total_file_count: u32,
}
// 群文件
#[derive(Debug, Clone, Default)]
pub struct GroupFileInfo {
    pub file_id: String,
    pub file_name: String,
    pub file_size: u64,
    pub bus_id: u32,
    pub uploaded_size: u64,
    pub upload_time: u32,
    pub dead_time: u32,
    pub modify_time: u32,
    pub download_times: u32,
    pub sha: String,
    pub sha3: Bytes,
    pub md5: Bytes,
    pub local_path: String,
    pub uploader_name: String,
    pub uploader_uin: u64,
    pub parent_folder_id: String,
}