1use anyhow::{anyhow, Error, Result};
2use serde::{Deserialize, Serialize};
3mod tests;
4#[derive(Debug, Serialize, Deserialize)]
5pub struct Webhook {
6 id: String,
8 name: String,
9 token: String,
10 avatar: Option<String>,
11 channel_id: String,
12 guild_id: String,
13}
14pub struct Client {
15 reqwest: reqwest::blocking::Client,
16 endpoint: String,
17 id: String,
18 token: String,
19}
20
21impl Webhook {
22 pub fn get_webhook(hook: Client) -> Result<Webhook, Error> {
24 let client = hook.reqwest;
25 let id = hook.id;
26 let token = hook.token;
27 let endpoint: &str =
29 &("https://discord.com/api/webhooks/".to_owned() + &id.to_string() + "/" + &token);
30 let resp = client.get(endpoint).send()?;
31 let respmod = resp.text().unwrap().to_string();
32 let webhook: Webhook = serde_json::from_str(&respmod)?;
33
34 Ok(webhook)
35 }
36 pub fn delete_webhook(hook: Client) -> Result<reqwest::blocking::Response, Error> {
38 let client = hook.reqwest;
39 let endpoint: &str =
40 &("https://discord.com/api/webhooks/".to_owned() + &hook.id + "/" + &hook.token);
41 let resp = client.delete(endpoint).send()?;
42 if resp.status() != 204 {
43 return Err(anyhow!("{}", resp.status()));
44 }
45 Ok(resp)
46 }
47 pub fn execute_webhook(
48 hookclient: Client,
49 body: &'static str,
50 ) -> Result<reqwest::blocking::Response, Error> {
51 let client = hookclient.reqwest;
52
53 let res = client
54 .post(hookclient.endpoint)
55 .body(body)
56 .header("Content-Type", "application/json")
57 .send()?;
58
59 Ok(res)
60 }
61 pub fn edit_message(
62 hookclient: Client,
63 body: &'static str,
64 message_id: &str,
65 ) -> Result<reqwest::blocking::Response, Error> {
66 let client = hookclient.reqwest;
67 let endpoint: &str = &(hookclient.endpoint + "/messages/" + message_id);
68 let res = client
69 .patch(endpoint)
70 .body(body)
71 .header("Content-Type", "application/json")
72 .send();
73 Ok(res.unwrap())
74 }
75 pub fn new(id: &str, token: &str) -> Result<Client, Error> {
76 Ok(Client {
77 id: id.to_string(),
78 token: token.to_string(),
79 reqwest: reqwest::blocking::Client::new(),
80 endpoint: "https://discord.com/api/webhooks/".to_owned()
81 + &id.to_string()
82 + "/"
83 + &token,
84 })
85 }
86}