rive_http/channels/
messaging.rs

1use crate::prelude::*;
2use rive_models::{
3    data::{
4        BulkDeleteMessagesData, EditMessageData, FetchMessagesData, SearchForMessagesData,
5        SendMessageData,
6    },
7    message::{BulkMessageResponse, Message},
8};
9
10impl Client {
11    /// Lets the server and all other clients know that we've seen this message id in this channel.
12    pub async fn acknowledge_message(
13        &self,
14        channel_id: impl Into<String>,
15        message_id: impl Into<String>,
16    ) -> Result<()> {
17        self.client
18            .put(ep!(
19                self,
20                "/channels/{}/ack/{}",
21                channel_id.into(),
22                message_id.into()
23            ))
24            .auth(&self.authentication)
25            .send()
26            .await?
27            .process_error()
28            .await?;
29        Ok(())
30    }
31
32    /// Fetch multiple messages.
33    pub async fn fetch_messages(
34        &self,
35        channel_id: impl Into<String>,
36        data: FetchMessagesData,
37    ) -> Result<BulkMessageResponse> {
38        Ok(self
39            .client
40            .get(ep!(self, "/channels/{}/messages", channel_id.into()))
41            .auth(&self.authentication)
42            .query(&data)
43            .send()
44            .await?
45            .process_error()
46            .await?
47            .json()
48            .await?)
49    }
50
51    /// Send a message to a given channel.
52    pub async fn send_message(
53        &self,
54        channel_id: impl Into<String>,
55        data: SendMessageData,
56    ) -> Result<Message> {
57        Ok(self
58            .client
59            .post(ep!(self, "/channels/{}/messages", channel_id.into()))
60            .auth(&self.authentication)
61            .json(&data)
62            .send()
63            .await?
64            .process_error()
65            .await?
66            .json()
67            .await?)
68    }
69
70    /// Search for messages within the given parameters.
71    pub async fn search_for_messages(
72        &self,
73        channel_id: impl Into<String>,
74        data: SearchForMessagesData,
75    ) -> Result<Message> {
76        Ok(self
77            .client
78            .post(ep!(self, "/channels/{}/messages/search", channel_id.into()))
79            .auth(&self.authentication)
80            .json(&data)
81            .send()
82            .await?
83            .process_error()
84            .await?
85            .json()
86            .await?)
87    }
88
89    /// Retrieves a message by its ID.
90    pub async fn fetch_message(
91        &self,
92        channel_id: impl Into<String>,
93        message_id: impl Into<String>,
94    ) -> Result<Message> {
95        Ok(self
96            .client
97            .get(ep!(
98                self,
99                "/channels/{}/messages/{}",
100                channel_id.into(),
101                message_id.into()
102            ))
103            .auth(&self.authentication)
104            .send()
105            .await?
106            .process_error()
107            .await?
108            .json()
109            .await?)
110    }
111
112    /// Delete a message you've sent or one you have permission to delete.
113    pub async fn delete_message(
114        &self,
115        channel_id: impl Into<String>,
116        message_id: impl Into<String>,
117    ) -> Result<()> {
118        self.client
119            .delete(ep!(
120                self,
121                "/channels/{}/messages/{}",
122                channel_id.into(),
123                message_id.into()
124            ))
125            .auth(&self.authentication)
126            .send()
127            .await?
128            .process_error()
129            .await?;
130        Ok(())
131    }
132
133    pub async fn edit_message(
134        &self,
135        channel_id: impl Into<String>,
136        message_id: impl Into<String>,
137        data: EditMessageData,
138    ) -> Result<Message> {
139        Ok(self
140            .client
141            .patch(ep!(
142                self,
143                "/channels/{}/messages/{}",
144                channel_id.into(),
145                message_id.into()
146            ))
147            .auth(&self.authentication)
148            .json(&data)
149            .send()
150            .await?
151            .process_error()
152            .await?
153            .json()
154            .await?)
155    }
156
157    /// Delete multiple messages you've sent or one you have permission to delete.
158    ///
159    /// This will always require ManageMessages permission regardless of whether you own the message or not.
160    ///
161    /// Messages must have been sent within the past 1 week.
162    pub async fn bulk_delete_messages(
163        &self,
164        channel_id: impl Into<String>,
165        data: BulkDeleteMessagesData,
166    ) -> Result<()> {
167        self.client
168            .delete(ep!(self, "/channels/{}/messages/bulk", channel_id.into(),))
169            .auth(&self.authentication)
170            .json(&data)
171            .send()
172            .await?
173            .process_error()
174            .await?;
175        Ok(())
176    }
177}