mutiny_rs/builders/
edit_message.rs1use 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}