botcat-capoo 1.0.3

A NapCat based QQ bot implemented in Rust
Documentation
use serde_json::json;
use tracing::{error, info};

use crate::{api::napcat::napcat_request, config::AppConfig, model::message::Message};

pub async fn send_group_message(config: &AppConfig, group_id: u64, message: Message) {
    let body = json!({
        "group_id": group_id,
        "message": message,
    });

    let res = napcat_request(config, "/send_group_msg", &body).await;
    match res {
        Ok(response) => {
            info!("Group message sent successfully: {response:?}");
        }
        Err(err) => {
            error!("Error sending group message: {err:?}");
        }
    }
}

pub async fn send_private_message(config: &AppConfig, to: u64, message: Message) {
    let body = json!({
        "user_id": to,
        "message": message,
    });

    let res = napcat_request(config, "/send_private_msg", &body).await;
    match res {
        Ok(response) => {
            info!("Private message sent successfully: {response:?}");
        }
        Err(err) => {
            error!("Error sending private message: {err:?}");
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    use crate::model::message::segment::MessageSegment;

    #[tokio::test]
    #[ignore = "Requires an API server in internal network"]
    async fn test_send_group_message() {
        let config = AppConfig::init().expect("Failed to load config");
        println!("Loaded config");
        let message = vec![
            MessageSegment::At {
                qq: "46595749".to_string(),
            },
            MessageSegment::Text {
                text: " Ich habe keine Ahnung.".to_string(),
            },
        ];
        send_group_message(&config, 738943282, message).await;
    }

    #[tokio::test]
    #[ignore = "Requires an API server in internal network"]
    async fn test_send_private_message() {
        let config = AppConfig::init().expect("Failed to load config");
        println!("Loaded config");
        let message = vec![MessageSegment::Text {
            text: "Hello, user!".to_string(),
        }];
        send_private_message(&config, 46595749, message).await;
    }
}