mutiny_rs/builders/
edit_message.rs

1use crate::builders::create_embed::SendableEmbed;
2use crate::context::Context;
3use crate::http::HttpError;
4use serde::Serialize;
5use crate::model::message::Message;
6
7#[derive(Serialize, Default)]
8pub struct EditMessagePayload {
9    pub content: Option<String>,
10    pub embeds: Option<Vec<SendableEmbed>>,
11}
12pub struct EditMessageBuilder<'a> {
13    pub(crate) message: &'a Message,
14    pub(crate) ctx: &'a Context,
15    pub(crate) content: Option<String>,
16    pub(crate) embeds: Option<Vec<SendableEmbed>>,
17}
18
19
20impl<'a> EditMessageBuilder<'a> {
21    pub fn new(message: &'a Message, ctx: &'a Context) -> Self {
22        Self {
23            message,
24            ctx,
25            content: None,
26            embeds: None,
27        }
28    }
29
30    pub fn content(mut self, content: impl Into<String>) -> Self {
31        self.content = Some(content.into());
32        self
33    }
34
35    pub fn embeds(mut self, embeds: Vec<SendableEmbed>) -> Self {
36        self.embeds = Some(embeds);
37        self
38    }
39
40    pub async fn edit(self, body: EditMessagePayload) -> Result<Message, HttpError> {
41        let url = format!("/channels/{}/messages/{}", self.message.channel, self.message.id);
42        let message = self.ctx.http.patch::<Message, EditMessagePayload>(&url, &body).await?;
43        self.ctx.cache.messages.insert(message.id.clone(), message.clone()).await;
44        Ok(message)
45    }
46}