1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 event::message::{GroupSenderInfo, GroupSenderRole, PrivateSenderInfo, SenderSex},
7 message,
8};
9
10pub mod api_ext;
11pub mod api_impl;
12
13#[derive(Deserialize, Debug, Clone)]
14#[serde(rename_all = "snake_case")]
15pub enum ApiRetStatus {
16 Ok,
17 Async,
18 Failed,
19}
20
21#[derive(Deserialize, Debug, Clone)]
22pub struct ApiResponse<T> {
23 pub status: ApiRetStatus,
24 pub retcode: i32,
25 pub data: T,
26 pub echo: Option<String>,
27}
28
29#[derive(Deserialize, Debug, Clone)]
30pub struct BotStatus {
31 pub online: Option<bool>,
32 pub good: bool,
33 #[serde(flatten)]
34 pub data: HashMap<String, String>,
35}
36
37#[derive(Deserialize, Debug, Clone)]
38pub struct SendMessageResponse {
39 pub message_id: i64,
40}
41
42#[derive(Deserialize, Debug, Clone)]
43#[serde(tag = "message_type", rename_all = "snake_case")]
44pub enum GetMessageType {
45 Private { sender: PrivateSenderInfo },
46 Group { sender: GroupSenderInfo },
47}
48
49#[derive(Deserialize, Debug, Clone)]
50pub struct GetMessageResponse {
51 pub time: i32,
52 pub message_id: i32,
53 pub real_id: i32,
54 pub message: message::Message,
55 #[serde(flatten)]
56 pub ty: GetMessageType,
57}
58
59#[derive(Deserialize, Debug, Clone)]
60pub struct GetForwardResponse {
61 pub message: message::Message,
62}
63
64#[derive(Deserialize, Debug, Clone)]
65pub struct LoginInfo {
66 pub user_id: i64,
67 pub nickname: String,
68}
69
70#[derive(Deserialize, Debug, Clone)]
71pub struct StrangerInfo {
72 pub user_id: i64,
73 pub nickname: String,
74 pub sex: SenderSex,
75 pub age: i32,
76}
77
78#[derive(Deserialize, Debug, Clone)]
79pub struct FriendInfo {
80 pub user_id: i64,
81 pub nickname: String,
82 pub remark: String,
83}
84
85#[derive(Deserialize, Debug, Clone)]
86pub struct GroupInfoResponse {
87 pub group_id: i64,
88 pub group_name: String,
89 pub member_count: i32,
90 pub max_member_count: i32,
91}
92
93#[derive(Deserialize, Debug, Clone)]
94pub struct GroupMemberInfo {
95 pub group_id: i64,
96 pub user_id: i64,
97 pub nickname: String,
98 pub card: String,
99 pub sex: SenderSex,
100 pub age: i32,
101 pub area: Option<String>,
102 pub join_time: i32,
103 pub last_sent_time: i32,
104 pub level: String,
105 pub role: GroupSenderRole,
106 pub unfriendly: bool,
107 pub title: Option<String>,
108 pub title_expire_time: i32,
109 pub card_changeable: bool,
110}
111
112#[derive(Deserialize, Debug, Clone)]
113pub struct TalkativeInfo {
114 pub user_id: i64,
115 pub nickname: String,
116 pub avatar: String,
117 pub day_count: i32,
118}
119
120#[derive(Deserialize, Debug, Clone)]
121pub struct HonorInfo {
122 pub user_id: i64,
123 pub nickname: String,
124 pub avatar: String,
125 pub description: String,
126}
127
128#[derive(Deserialize, Debug, Clone)]
129pub struct GroupHonorInfo {
130 pub group_id: i64,
131 pub current_talkative: Option<TalkativeInfo>,
132 pub talkative_list: Option<Vec<HonorInfo>>,
133 pub performer_list: Option<Vec<HonorInfo>>,
134 pub legend_list: Option<Vec<HonorInfo>>,
135 pub strong_newbie_list: Option<Vec<HonorInfo>>,
136 pub emotion_list: Option<Vec<HonorInfo>>,
137}
138
139#[derive(Serialize, Deserialize, Debug, Clone)]
140#[serde(rename_all = "snake_case")]
141pub enum GroupHonorType {
142 Talkative,
143 Performer,
144 Legend,
145 StrongNewbie,
146 Emotion,
147 All,
148}
149
150#[derive(Deserialize, Debug, Clone)]
151pub struct GetCookiesResponse {
152 pub cookies: String,
153}
154
155#[derive(Deserialize, Debug, Clone)]
156pub struct GetCsrfTokenResponse {
157 pub token: i32,
158}
159
160#[derive(Deserialize, Debug, Clone)]
161pub struct GetCredentialsResponse {
162 pub cookies: String,
163 pub csrf_token: i32,
164}
165
166#[derive(Deserialize, Debug, Clone)]
167pub struct GetFileResponse {
168 pub file: String,
169}
170
171#[derive(Serialize, Debug, Clone)]
172#[serde(rename_all = "snake_case")]
173pub enum RecordFormat {
174 Mp3,
175 Amr,
176 Wma,
177 M4a,
178 Spx,
179 Ogg,
180 Wav,
181 Flac,
182}
183
184#[derive(Deserialize, Debug, Clone)]
185pub struct CanSendResponse {
186 pub yes: bool,
187}
188
189#[derive(Deserialize, Debug, Clone)]
190pub struct VersionInfo {
191 pub app_name: String,
192 pub app_version: String,
193 pub protocol_version: String,
194 #[serde(flatten)]
195 pub data: HashMap<String, String>,
196}