vkapi2/account/
methods.rs

1use crate::account::types::{
2    GetInfoOptions, ResponseBanned, ResponseInfo, SetOnlineOptions, UnregisterDeviceOptions,
3};
4use crate::error::{VkApiError, VkError};
5use crate::{send_request, ParamGrid, VkApi};
6use serde_json::Value;
7
8const API: &str = "https://api.vk.com/method/account.";
9
10pub async fn ban(api: &VkApi, owner_id: i64) -> Result<u8, VkApiError> {
11    let mut params = ParamGrid::new();
12    params.insert_if_not_exists("owner_id", owner_id);
13
14    let response_text = send_request(
15        &api.client,
16        Some(params),
17        &format!("{}ban", API),
18        &api.flow_key,
19        api.v,
20    )
21    .await?;
22
23    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
24        return Err(VkApiError::VkError(error));
25    }
26
27    Ok(1)
28}
29
30pub async fn unban(api: &VkApi, owner_id: i64) -> Result<u8, VkApiError> {
31    let mut params = ParamGrid::new();
32    params.insert_if_not_exists("owner_id", owner_id);
33
34    let response_text = send_request(
35        &api.client,
36        Some(params),
37        &format!("{}unban", API),
38        &api.flow_key,
39        api.v,
40    )
41    .await?;
42
43    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
44        return Err(VkApiError::VkError(error));
45    }
46
47    Ok(1)
48}
49
50pub async fn set_offline(api: &VkApi) -> Result<u8, VkApiError> {
51    let response_text = send_request(
52        &api.client,
53        None,
54        &format!("{}setOffline", API),
55        &api.flow_key,
56        api.v,
57    )
58    .await?;
59
60    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
61        return Err(VkApiError::VkError(error));
62    }
63
64    Ok(1)
65}
66
67pub async fn set_online(api: &VkApi, options: Option<SetOnlineOptions>) -> Result<u8, VkApiError> {
68    let mut params = ParamGrid::new();
69
70    match options {
71        Some(options) => {
72            params.insert_if_not_exists(
73                "voip",
74                match options.voip {
75                    true => "1".to_string(),
76                    false => "0".to_string(),
77                },
78            );
79        }
80        None => (),
81    }
82
83    let response_text = send_request(
84        &api.client,
85        Some(params),
86        &format!("{}setOnline", API),
87        &api.flow_key,
88        api.v,
89    )
90    .await?;
91
92    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
93        return Err(VkApiError::VkError(error));
94    }
95
96    Ok(1)
97}
98
99pub async fn get_info(
100    api: &VkApi,
101    options: Option<GetInfoOptions>,
102) -> Result<ResponseInfo, VkApiError> {
103    let mut params = ParamGrid::new();
104    let mut fields = String::new();
105
106    match options {
107        Some(options) => {
108            if options.country {
109                fields.push_str("country,");
110            };
111            if options.https_required {
112                fields.push_str("https_required,");
113            };
114            if options.intro {
115                fields.push_str("intro,");
116            };
117            if options.lang {
118                fields.push_str("lang,");
119            };
120            if options.no_wall_replies {
121                fields.push_str("no_wall_replies,");
122            };
123            if options.own_posts_default {
124                fields.push_str("own_posts_default,");
125            };
126        }
127        None => (),
128    };
129
130    params.insert_if_not_exists("fields", fields);
131
132    let response_text = send_request(
133        &api.client,
134        Some(params),
135        &format!("{}getInfo", API),
136        &api.flow_key,
137        api.v,
138    )
139    .await?;
140
141    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
142        return Err(VkApiError::VkError(error));
143    } else {
144        let json: Value = serde_json::from_str(&response_text)?;
145        let data: ResponseInfo = serde_json::from_value(json["response"].clone())?;
146        return Ok(data);
147    }
148}
149
150pub async fn change_password() -> Result<(), VkApiError> {
151    // let mut params = match params {
152    //     Some(params) => params,
153    //     None => ParamGrid::new(),
154    // };
155
156    // params.insert_if_not_exists("v", api.v);
157
158    // let response = api
159    //     .client
160    //     .post(format!("{}ban", API))
161    //     .header("Authorization", format!("Bearer {}", api.flow_key))
162    //     .form(&params.data)
163    //     .send()
164    //     .await?;
165
166    // if let Ok(error) = response.json::<VkError>().await {
167    //     return Err(VkApiError::VkError(error));
168    // };
169
170    // Ok(())
171    todo!()
172}
173
174pub async fn get_active_offers() -> Result<(), VkApiError> {
175    // let mut params = ParamGrid::new();
176
177    // params.insert_if_not_exists("offset", offset);
178    // params.insert_if_not_exists("count", count);
179
180    // let response_text = send_request(
181    //     &api.client,
182    //     Some(params),
183    //     &format!("{}getInfo", API),
184    //     &api.flow_key,
185    //     api.v,
186    // )
187    // .await?;
188
189    // if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
190    //     return Err(VkApiError::VkError(error));
191    // } else {
192    //     let json: Value = serde_json::from_str(&response_text)?;
193    //     let data: ResponseInfo = serde_json::from_value(json["response"].clone())?;
194    //     return Ok(data);
195    // }
196
197    // Ok(())
198    todo!()
199}
200
201pub async fn get_app_permissions() -> Result<(), VkApiError> {
202    todo!()
203}
204
205pub async fn get_banned(
206    api: &VkApi,
207    offset: usize,
208    count: usize,
209) -> Result<ResponseBanned, VkApiError> {
210    let mut params = ParamGrid::new();
211
212    params.insert_if_not_exists("offset", offset);
213    params.insert_if_not_exists("count", count);
214
215    let response_text = send_request(
216        &api.client,
217        Some(params),
218        &format!("{}getBanned", API),
219        &api.flow_key,
220        api.v,
221    )
222    .await?;
223
224    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
225        return Err(VkApiError::VkError(error));
226    } else {
227        let json: Value = serde_json::from_str(&response_text)?;
228        let data: ResponseBanned = serde_json::from_value(json["response"].clone())?;
229        return Ok(data);
230    }
231}
232
233pub async fn get_counters() -> Result<(), VkApiError> {
234    // let mut params = match params {
235    //     Some(params) => params,
236    //     None => ParamGrid::new(),
237    // };
238
239    // params.insert_if_not_exists("v", api.v);
240
241    // let response = api
242    //     .client
243    //     .post(format!("{}ban", API))
244    //     .header("Authorization", format!("Bearer {}", api.flow_key))
245    //     .form(&params.data)
246    //     .send()
247    //     .await?;
248
249    // if let Ok(error) = response.json::<VkError>().await {
250    //     return Err(VkApiError::VkError(error));
251    // };
252
253    // Ok(())
254    todo!()
255}
256
257pub async fn get_profile_info() -> Result<(), VkApiError> {
258    // let mut params = match params {
259    //     Some(params) => params,
260    //     None => ParamGrid::new(),
261    // };
262
263    // params.insert_if_not_exists("v", api.v);
264
265    // let response = api
266    //     .client
267    //     .post(format!("{}ban", API))
268    //     .header("Authorization", format!("Bearer {}", api.flow_key))
269    //     .form(&params.data)
270    //     .send()
271    //     .await?;
272
273    // if let Ok(error) = response.json::<VkError>().await {
274    //     return Err(VkApiError::VkError(error));
275    // };
276
277    // Ok(())
278    todo!()
279}
280
281pub async fn get_push_settings() -> Result<(), VkApiError> {
282    // let mut params = match params {
283    //     Some(params) => params,
284    //     None => ParamGrid::new(),
285    // };
286
287    // params.insert_if_not_exists("v", api.v);
288
289    // let response = api
290    //     .client
291    //     .post(format!("{}ban", API))
292    //     .header("Authorization", format!("Bearer {}", api.flow_key))
293    //     .form(&params.data)
294    //     .send()
295    //     .await?;
296
297    // if let Ok(error) = response.json::<VkError>().await {
298    //     return Err(VkApiError::VkError(error));
299    // };
300
301    // Ok(())
302    todo!()
303}
304
305pub async fn lookup_contacts() -> Result<(), VkApiError> {
306    // let mut params = match params {
307    //     Some(params) => params,
308    //     None => ParamGrid::new(),
309    // };
310
311    // params.insert_if_not_exists("v", api.v);
312
313    // let response = api
314    //     .client
315    //     .post(format!("{}ban", API))
316    //     .header("Authorization", format!("Bearer {}", api.flow_key))
317    //     .form(&params.data)
318    //     .send()
319    //     .await?;
320
321    // if let Ok(error) = response.json::<VkError>().await {
322    //     return Err(VkApiError::VkError(error));
323    // };
324
325    // Ok(())
326    todo!()
327}
328
329pub async fn register_device() -> Result<(), VkApiError> {
330    // let mut params = match params {
331    //     Some(params) => params,
332    //     None => ParamGrid::new(),
333    // };
334
335    // params.insert_if_not_exists("v", api.v);
336
337    // let response = api
338    //     .client
339    //     .post(format!("{}ban", API))
340    //     .header("Authorization", format!("Bearer {}", api.flow_key))
341    //     .form(&params.data)
342    //     .send()
343    //     .await?;
344
345    // if let Ok(error) = response.json::<VkError>().await {
346    //     return Err(VkApiError::VkError(error));
347    // };
348
349    // Ok(())
350    todo!()
351}
352
353pub async fn save_profile_info() -> Result<(), VkApiError> {
354    // let mut params = match params {
355    //     Some(params) => params,
356    //     None => ParamGrid::new(),
357    // };
358
359    // params.insert_if_not_exists("v", api.v);
360
361    // let response = api
362    //     .client
363    //     .post(format!("{}ban", API))
364    //     .header("Authorization", format!("Bearer {}", api.flow_key))
365    //     .form(&params.data)
366    //     .send()
367    //     .await?;
368
369    // if let Ok(error) = response.json::<VkError>().await {
370    //     return Err(VkApiError::VkError(error));
371    // };
372
373    // Ok(())
374    todo!()
375}
376
377pub async fn set_info() -> Result<(), VkApiError> {
378    // let mut params = match params {
379    //     Some(params) => params,
380    //     None => ParamGrid::new(),
381    // };
382
383    // params.insert_if_not_exists("v", api.v);
384
385    // let response = api
386    //     .client
387    //     .post(format!("{}ban", API))
388    //     .header("Authorization", format!("Bearer {}", api.flow_key))
389    //     .form(&params.data)
390    //     .send()
391    //     .await?;
392
393    // if let Ok(error) = response.json::<VkError>().await {
394    //     return Err(VkApiError::VkError(error));
395    // };
396
397    // Ok(())
398    todo!()
399}
400
401pub async fn set_name_in_menu(api: &VkApi, user_id: usize, name: String) -> Result<u8, VkApiError> {
402    let mut params = ParamGrid::new();
403
404    params.insert_if_not_exists("user_id", user_id);
405    params.insert_if_not_exists("name", name);
406
407    let response_text = send_request(
408        &api.client,
409        Some(params),
410        &format!("{}setNameInMenu", API),
411        &api.flow_key,
412        api.v,
413    )
414    .await?;
415
416    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
417        return Err(VkApiError::VkError(error));
418    }
419
420    Ok(1)
421}
422
423pub async fn set_push_settings() -> Result<(), VkApiError> {
424    // let mut params = match params {
425    //     Some(params) => params,
426    //     None => ParamGrid::new(),
427    // };
428
429    // params.insert_if_not_exists("v", api.v);
430
431    // let response = api
432    //     .client
433    //     .post(format!("{}ban", API))
434    //     .header("Authorization", format!("Bearer {}", api.flow_key))
435    //     .form(&params.data)
436    //     .send()
437    //     .await?;
438
439    // if let Ok(error) = response.json::<VkError>().await {
440    //     return Err(VkApiError::VkError(error));
441    // };
442
443    // Ok(())
444    todo!()
445}
446
447pub async fn set_silence_mode() -> Result<(), VkApiError> {
448    // let mut params = match params {
449    //     Some(params) => params,
450    //     None => ParamGrid::new(),
451    // };
452
453    // params.insert_if_not_exists("v", api.v);
454
455    // let response = api
456    //     .client
457    //     .post(format!("{}ban", API))
458    //     .header("Authorization", format!("Bearer {}", api.flow_key))
459    //     .form(&params.data)
460    //     .send()
461    //     .await?;
462
463    // if let Ok(error) = response.json::<VkError>().await {
464    //     return Err(VkApiError::VkError(error));
465    // };
466
467    // Ok(())
468    todo!()
469}
470
471pub async fn unregister_device(
472    api: &VkApi,
473    device_id: i64,
474    options: Option<UnregisterDeviceOptions>,
475) -> Result<u8, VkApiError> {
476    let mut params = ParamGrid::new();
477
478    params.insert_if_not_exists("device_id", device_id);
479
480    match options {
481        Some(options) => {
482            params.insert_if_not_exists(
483                "sandbox",
484                match options.sandbox {
485                    true => "1".to_string(),
486                    false => "0".to_string(),
487                },
488            );
489        }
490        None => (),
491    }
492
493    let response_text = send_request(
494        &api.client,
495        Some(params),
496        &format!("{}unregisterDevice", API),
497        &api.flow_key,
498        api.v,
499    )
500    .await?;
501
502    if let Ok(error) = serde_json::from_str::<VkError>(&response_text) {
503        return Err(VkApiError::VkError(error));
504    }
505
506    Ok(1)
507}