rust_discord_lib/
lib.rs

1use reqwest::header::CONTENT_TYPE;
2use reqwest::ClientBuilder;
3use serde_json::{json, Result, Value};
4use std::process;
5
6pub async fn send_discord(
7    webhook_url: &str,
8    message: &str,
9    username: &str,
10) -> std::result::Result<(), reqwest::Error> {
11    if webhook_url.contains("https://discord.com/api/webhooks/") {
12        let json_message = match jsonify(username, message) {
13            Ok(j) => j,
14            Err(_e) => process::exit(3),
15        };
16        push_message(webhook_url, json_message).await?;
17    } else {
18        println!("invalid discord url");
19    }
20    Ok(())
21}
22
23async fn push_message(api_url: &str, json_message: Value) -> reqwest::Result<String> {
24    let client = ClientBuilder::new()
25        .danger_accept_invalid_certs(true)
26        .no_gzip()
27        .build();
28
29    let response = match client {
30        Ok(r) => {
31            r.post(api_url)
32                .header(CONTENT_TYPE, "application/json")
33                .json(&json_message)
34                .send()
35                .await
36        }
37        Err(_e) => process::exit(3),
38    };
39    return match response {
40        Ok(r) => r.text().await,
41        Err(e) => Err(e),
42    };
43}
44
45pub fn jsonify(username: &str, message: &str) -> Result<Value> {
46    let data = json!({
47    "username": username,
48    "content": message,
49    });
50    Ok(data)
51}
52
53// #[cfg(test)]
54// mod tests {
55//     use crate::send_discord;
56//
57//     #[test]
58//     fn test_send_wh() {
59//         let rt = tokio::runtime::Runtime::new();
60//         rt.unwrap().block_on(send_discord(
61//             "webhook_url",
62//             "Hello World",
63//             "Lazarus"
64//         )).unwrap();
65//     }
66// }