Skip to main content

kovi_plugin_60s/
lib.rs

1mod model;
2
3use std::sync::Arc;
4use kovi::log::{debug};
5use kovi::{serde_json, toml, Message, PluginBuilder as plugin, PluginBuilder, RuntimeBot};
6use kovi::toml::{toml};
7use kovi::utils::load_toml_data;
8use kovi_onebot::{EventRegistrar, MessageRegistrar};
9use crate::model::{Config, News, Response};
10
11#[kovi::plugin]
12async fn main() {
13    let bot = PluginBuilder::get_runtime_bot();
14    read_config(bot.clone());
15    plugin::on_msg(move |event| {
16        let bot = bot.clone();
17        async move {
18            let text = event.borrow_text().unwrap_or("");
19            if text.starts_with("/60s") {
20                if let Ok(news) = get_60s(bot).await {
21                    let msg = Message::new()
22                        .add_image(news.image.as_str());
23                    event.reply(msg);
24                } else {
25                    let msg = Message::new()
26                        .add_text("系统异常,请检查系统日志");
27                    event.reply(msg);
28                }
29            } else if text.starts_with("/help") {
30                let msg = Message::new()
31                    .add_text("- /60s")
32                    .add_text("- /help");
33                event.reply(msg);
34            }
35        }
36    });
37}
38
39fn read_config(bot: Arc<RuntimeBot>) -> Config {
40    let data_path = bot.get_data_path();
41    let config_toml_path = data_path.join("config.toml");
42    let default_config = toml! {
43        url = "http://127.0.0.1:4399"
44    };
45    let config = load_toml_data(default_config, config_toml_path).unwrap();
46    debug!("{}", config.to_string());
47    let config: Config = toml::from_str(&config.to_string()).unwrap();
48    config
49}
50
51async fn get_60s(bot: Arc<RuntimeBot>) -> Result<News, String> {
52    let client = reqwest::Client::new();
53    let config = read_config(bot);
54    match client.get(format!("{}/v2/60s", config.url)).send().await {
55        Ok(res) => {
56            let json = res.text().await.unwrap();
57            debug!("get_60s_response = {:?}", json);
58            let response: Response<News> = serde_json::from_str(json.as_str()).unwrap();
59            Ok(response.data)
60        }
61        Err(err) => {
62            debug!("get_60s_response = {:?}", err);
63            Err(err.to_string())
64        }
65    }
66
67}