p4nimau-rust

Форк
0
/
bot.rs 
82 строки · 2.3 Кб
1
use reqwest::Client;
2
use serde::{Deserialize, Serialize};
3
use std::sync::{Arc, Mutex};
4

5
mod commands;
6

7
use crate::{
8
    config::AppConfig,
9
    vkapi::{
10
        types::{VkMessage},
11
        GroupClient, UserClient,
12
    }, bot::commands::*
13
};
14

15
use self::commands::Command;
16

17
#[derive(Serialize, Deserialize, Debug)]
18
#[serde(tag = "type", content = "object")]
19
#[serde(rename_all = "snake_case")]
20
pub enum Event {
21
    MessageNew(VkMessage),
22
    // may be new events, but i need only this one
23
}
24

25
impl Event {
26
    pub fn handle(
27
        self,
28
        http_client: Client,
29
        cfg: Arc<Mutex<AppConfig>>,
30
        user_client: Arc<UserClient>,
31
        group_client: Arc<GroupClient>,
32
        last_time_post: Arc<Mutex<u64>>,
33
    ) {
34
        let msg = match self {
35
            Event::MessageNew(msg) => msg.message,
36
        };
37
        dbg!{&msg};
38
        if msg.text.starts_with('!') {return;}
39
        if msg.attachments.is_empty() {
40
            macro_rules! execute {
41
                ($x:expr) => {
42
                    if msg.text.starts_with($x.alias().as_str()) {return $x.execute(msg, cfg, group_client)} 
43
                };
44
            }
45
            execute!(Help);
46
            execute!(GetCfg);
47
            execute!(GetMyId);
48
            execute!(AddAdmin);
49
            execute!(DelAdmin);
50
            execute!(AddAnecdote);
51
            execute!(AddCheckOk);
52
            execute!(AddErrorMsg);
53
            execute!(AddForbidden);
54
            execute!(AddSuccess);
55
            execute!(AddUnresolved);
56
            execute!(DelAnecdote);
57
            execute!(DelCheckOk);
58
            execute!(DelErrorMsg);
59
            execute!(DelForbidden);
60
            execute!(DelSuccess);
61
            execute!(DelUnresolved);
62
            execute!(EditAnecdote);
63
            execute!(EditAnecdoteLength);
64
            execute!(EditCheckOk);
65
            execute!(EditErrorMsg);
66
            execute!(EditForbidden);
67
            execute!(EditSuccess);
68
            execute!(EditUnresolved);
69
            execute!(Get);
70
            execute!(SwitchMain);
71
            execute!(EditCheckOkPhrase);
72
            let checkok = CheckOkCommand(cfg.clone());
73
            execute!(checkok);
74
        }
75
        if !cfg.lock().unwrap().main_chat_ids.contains(&msg.peer_id) {
76
            return;
77
        }
78
        tokio::spawn(
79
            user_client.main_wall_post(http_client, cfg, last_time_post, msg)
80
        );
81
    }
82
}
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.