1use async_trait::async_trait;
2
3use crate::{
4 event::{message::GroupAnonymousInfo, request::GroupRequestSubType},
5 message::IntoMessage,
6};
7
8use super::{
9 BotStatus, CanSendResponse, FriendInfo, GetCookiesResponse, GetCredentialsResponse,
10 GetCsrfTokenResponse, GetFileResponse, GetForwardResponse, GetMessageResponse, GroupHonorInfo,
11 GroupHonorType, GroupInfoResponse, LoginInfo, RecordFormat, SendMessageResponse, StrangerInfo,
12 VersionInfo,
13};
14
15#[async_trait]
16pub trait ApiExt {
17 type Error;
18
19 async fn send_private_message<M>(
20 &self,
21 user_id: i64,
22 message: M,
23 auto_escape: Option<bool>,
24 ) -> Result<SendMessageResponse, Self::Error>
25 where
26 M: IntoMessage + Send;
27
28 async fn send_group_message<M>(
29 &self,
30 group_id: i64,
31 message: M,
32 auto_escape: Option<bool>,
33 ) -> Result<SendMessageResponse, Self::Error>
34 where
35 M: IntoMessage + Send;
36
37 async fn delete_message(&self, message_id: i64) -> Result<(), Self::Error>;
38
39 async fn get_message(&self, message_id: i64) -> Result<GetMessageResponse, Self::Error>;
40
41 async fn get_forward_message(&self, message_id: i64)
42 -> Result<GetForwardResponse, Self::Error>;
43
44 async fn send_like(&self, user_id: i64, times: Option<i32>) -> Result<(), Self::Error>;
45
46 async fn set_group_kick(
47 &self,
48 group_id: i64,
49 user_id: i64,
50 reject_add_request: Option<bool>,
51 ) -> Result<(), Self::Error>;
52
53 async fn set_group_ban(
54 &self,
55 group_id: i64,
56 user_id: i64,
57 duration: Option<i64>,
58 ) -> Result<(), Self::Error>;
59
60 async fn set_group_anonymous_ban(
61 &self,
62 group_id: i64,
63 anonymous: Option<GroupAnonymousInfo>,
64 flag: Option<String>,
65 duration: Option<i64>,
66 ) -> Result<(), Self::Error>;
67
68 async fn set_whole_group_ban(
69 &self,
70 group_id: i64,
71 enable: Option<bool>,
72 ) -> Result<(), Self::Error>;
73
74 async fn set_group_admin(
75 &self,
76 group_id: i64,
77 user_id: i64,
78 enable: Option<bool>,
79 ) -> Result<(), Self::Error>;
80
81 async fn set_group_anonymous(
82 &self,
83 group_id: i64,
84 enable: Option<bool>,
85 ) -> Result<(), Self::Error>;
86
87 async fn set_group_card(
88 &self,
89 group_id: i64,
90 user_id: i64,
91 card: Option<String>,
92 ) -> Result<(), Self::Error>;
93
94 async fn set_group_name(&self, group_id: i64, group_name: String) -> Result<(), Self::Error>;
95
96 async fn set_group_leave(
97 &self,
98 group_id: i64,
99 is_dismiss: Option<bool>,
100 ) -> Result<(), Self::Error>;
101
102 async fn set_group_special_title(
103 &self,
104 group_id: i64,
105 user_id: i64,
106 special_title: Option<String>,
107 duration: Option<i64>,
108 ) -> Result<(), Self::Error>;
109
110 async fn set_friend_add_request(
111 &self,
112 flag: String,
113 approve: Option<bool>,
114 remark: Option<String>,
115 ) -> Result<(), Self::Error>;
116
117 async fn set_group_add_request(
118 &self,
119 flag: String,
120 sub_type: GroupRequestSubType,
121 approve: Option<bool>,
122 reason: Option<String>,
123 ) -> Result<(), Self::Error>;
124
125 async fn get_login_info(&self) -> Result<LoginInfo, Self::Error>;
126
127 async fn get_stranger_info(
128 &self,
129 user_id: i64,
130 no_cache: Option<bool>,
131 ) -> Result<StrangerInfo, Self::Error>;
132
133 async fn get_friend_list(&self) -> Result<Vec<FriendInfo>, Self::Error>;
134
135 async fn get_group_info(
136 &self,
137 group_id: i64,
138 no_cache: Option<bool>,
139 ) -> Result<GroupInfoResponse, Self::Error>;
140
141 async fn get_group_list(&self) -> Result<Vec<GroupInfoResponse>, Self::Error>;
142
143 async fn get_group_member_info(
144 &self,
145 group_id: i64,
146 user_id: i64,
147 no_cache: Option<bool>,
148 ) -> Result<GroupInfoResponse, Self::Error>;
149
150 async fn get_group_member_list(&self, group_id: i64) -> Result<Vec<FriendInfo>, Self::Error>;
151
152 async fn get_group_honor_info(
153 &self,
154 group_id: i64,
155 ty: GroupHonorType,
156 ) -> Result<GroupHonorInfo, Self::Error>;
157
158 async fn get_cookies(&self, domain: Option<String>) -> Result<GetCookiesResponse, Self::Error>;
159
160 async fn get_csrf_token(&self) -> Result<GetCsrfTokenResponse, Self::Error>;
161
162 async fn get_credentials(
163 &self,
164 domain: Option<String>,
165 ) -> Result<GetCredentialsResponse, Self::Error>;
166
167 async fn get_record(
168 &self,
169 file: String,
170 out_format: RecordFormat,
171 ) -> Result<GetFileResponse, Self::Error>;
172
173 async fn get_image(&self, file: String) -> Result<GetFileResponse, Self::Error>;
174
175 async fn can_send_image(&self) -> Result<CanSendResponse, Self::Error>;
176
177 async fn can_send_record(&self) -> Result<CanSendResponse, Self::Error>;
178
179 async fn get_status(&self) -> Result<BotStatus, Self::Error>;
180
181 async fn get_version_info(&self) -> Result<VersionInfo, Self::Error>;
182
183 async fn set_restart(&self, delay: Option<i32>) -> Result<(), Self::Error>;
184
185 async fn clean_cache(&self) -> Result<(), Self::Error>;
186}