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