Skip to main content

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::http::routing::Route;
6use crate::model::message::Message;
7
8#[derive(Serialize, Default)]
9pub struct EditMessagePayload {
10    pub content: Option<String>,
11    pub embeds: Option<Vec<SendableEmbed>>,
12}
13pub struct EditMessageBuilder<'a> {
14    pub(crate) message: &'a Message,
15    pub(crate) ctx: &'a Context,
16    pub(crate) content: Option<String>,
17    pub(crate) embeds: Option<Vec<SendableEmbed>>,
18}
19
20
21impl<'a> EditMessageBuilder<'a> {
22    pub fn new(message: &'a Message, ctx: &'a Context) -> Self {
23        Self {
24            message,
25            ctx,
26            content: None,
27            embeds: None,
28        }
29    }
30
31    pub fn content(mut self, content: impl Into<String>) -> Self {
32        self.content = Some(content.into());
33        self
34    }
35
36    pub fn embeds(mut self, embeds: Vec<SendableEmbed>) -> Self {
37        self.embeds = Some(embeds);
38        self
39    }
40
41    pub async fn edit(self, body: EditMessagePayload) -> Result<Message, HttpError> {
42        let route = Route::EditMessage { channel_id: &self.message.channel.0, message_id: &self.message.id };
43        let message = self.ctx.http.execute::<EditMessagePayload, Message>(route, body).await?;
44        self.ctx.cache.messages.insert(message.id.clone(), message.clone()).await;
45        Ok(message)
46    }
47}