Skip to main content

flow_bot/api/
mod.rs

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}