1use crate::{SlackApiResponse, SlackBlock, SlackClient};
2use serde_derive::{Deserialize, Serialize};
3use serde_json::Value;
4
5#[derive(Debug, Default, Clone, Serialize, Deserialize)]
6pub struct SlackMessageAttachment {
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub blocks: Option<Vec<SlackBlock>>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub color: Option<String>,
11}
12
13impl SlackClient {
14 pub async fn chat_delete(
16 &self,
17 request: &SlackApiChatDeleteRequest,
18 ) -> SlackApiResponse<SlackApiChatDeleteResponse> {
19 self.http_post("chat.delete", request).await
20 }
21 pub async fn chat_delete_scheduled_message(
23 &self,
24 request: &SlackApiChatDeleteScheduleMessageRequest,
25 ) -> SlackApiResponse<SlackApiChatDeleteScheduleMessageResponse> {
26 self.http_post("chat.deleteScheduledMessage", request).await
27 }
28 pub async fn chat_get_permalink(
30 &self,
31 request: &SlackApiChatGetPermalinkRequest,
32 ) -> SlackApiResponse<SlackApiChatGetPermalinkResponse> {
33 self.http_post("chat.getPermalink", request).await
34 }
35 pub async fn chat_me_message(
37 &self,
38 request: &SlackApiChatMeMessageRequest,
39 ) -> SlackApiResponse<SlackApiChatMeMessageResponse> {
40 self.http_post("chat.meMessage", request).await
41 }
42 pub async fn chat_post_ephemeral(
45 &self,
46 request: &SlackApiChatPostEphemeralRequest,
47 ) -> SlackApiResponse<SlackApiChatPostEphemeralResponse> {
48 self.http_post("chat.postEphemeral", request).await
49 }
50
51 pub async fn chat_post_message<B: Into<SlackApiChatPostMessageRequest>>(
53 &self,
54 request: B,
55 ) -> SlackApiResponse<SlackApiChatPostMessageResponse> {
56 self.http_post("chat.postMessage", &request.into()).await
57 }
58 pub async fn chat_schedule_message(
60 &self,
61 request: &SlackApiChatScheduleMessageRequest,
62 ) -> SlackApiResponse<SlackApiChatScheduleMessageResponse> {
63 self.http_post("chat.scheduleMessage", request).await
64 }
65 pub async fn chat_unfurl(
67 &self,
68 request: &SlackApiChatUnfurlRequest,
69 ) -> SlackApiResponse<SlackApiChatUnfurlResponse> {
70 self.http_post("chat.unfurl", request).await
71 }
72 pub async fn chat_update(
74 &self,
75 request: &SlackApiChatUpdateRequest,
76 ) -> SlackApiResponse<SlackApiChatUpdateResponse> {
77 self.http_post("chat.update", request).await
78 }
79 pub async fn chat_schedule_message_list(
81 &self,
82 request: &SlackApiChatScheduledMessagesListRequest,
83 ) -> SlackApiResponse<SlackApiChatScheduledMessagesListResponse> {
84 self.http_post("chat.scheduledMessages.list", request).await
85 }
86}
87
88#[derive(Debug, Default, Deserialize, Serialize)]
89pub struct SlackApiChatDeleteRequest {
90 pub channel: String,
91 pub ts: String,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub as_user: Option<bool>,
94}
95
96#[derive(Debug, Default, Deserialize, Serialize)]
97pub struct SlackApiChatDeleteResponse {
98 pub ok: bool,
99 pub channel: String,
100 pub ts: String,
101}
102
103#[derive(Debug, Default, Deserialize, Serialize)]
104pub struct SlackApiChatDeleteScheduleMessageRequest {
105 pub channel: String,
106 pub scheduled_message_id: String,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub as_user: Option<bool>,
109}
110
111#[derive(Debug, Default, Deserialize, Serialize)]
112pub struct SlackApiChatDeleteScheduleMessageResponse {
113 pub ok: bool,
114}
115
116#[derive(Debug, Default, Deserialize, Serialize)]
117pub struct SlackApiChatGetPermalinkRequest {
118 pub channel: String,
119 pub message_ts: String,
120}
121
122#[derive(Debug, Default, Deserialize, Serialize)]
123pub struct SlackApiChatGetPermalinkResponse {
124 pub ok: bool,
125 pub channel: String,
126 pub permalink: String,
127}
128
129#[derive(Debug, Default, Deserialize, Serialize)]
130pub struct SlackApiChatMeMessageRequest {
131 pub channel: String,
132 pub text: String,
133}
134
135#[derive(Debug, Default, Deserialize, Serialize)]
136pub struct SlackApiChatMeMessageResponse {
137 pub ok: bool,
138 pub channel: String,
139 pub ts: String,
140}
141
142#[derive(Debug, Default, Deserialize, Serialize)]
143pub struct SlackApiChatPostEphemeralRequest {
144 pub channel: String,
145 pub text: String,
146 pub user: String,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 pub as_user: Option<bool>,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub attachments: Option<Vec<SlackMessageAttachment>>,
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub blocks: Option<Vec<SlackBlock>>,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub icon_emoji: Option<String>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub icon_url: Option<String>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub link_names: Option<bool>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub parse: Option<String>,
161 #[serde(skip_serializing_if = "Option::is_none")]
162 pub thread_ts: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub username: Option<String>,
165}
166
167#[derive(Debug, Default, Deserialize, Serialize)]
168pub struct SlackApiChatPostEphemeralResponse {
169 pub ok: bool,
170 pub message_ts: String,
171}
172
173#[derive(Debug, Default, Deserialize, Serialize)]
174pub struct SlackApiChatPostMessageRequest {
175 pub channel: String,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub attachments: Option<Vec<SlackMessageAttachment>>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub blocks: Option<Vec<SlackBlock>>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub text: Option<String>,
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub as_user: Option<bool>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub icon_emoji: Option<String>,
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub icon_url: Option<String>,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub link_names: Option<bool>,
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub metadata: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub mrkdwn: Option<bool>,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub parse: Option<String>,
196 #[serde(skip_serializing_if = "Option::is_none")]
197 pub reply_broadcast: Option<bool>,
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub thread_ts: Option<String>,
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub unfurl_links: Option<bool>,
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub unfurl_media: Option<bool>,
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub username: Option<String>,
206}
207
208#[derive(Debug, Default, Deserialize, Serialize)]
209pub struct SlackApiChatPostMessageResponse {
210 pub ok: bool,
211 pub channel: String,
212 pub ts: String,
213 pub message: Value,
214}
215
216#[derive(Debug, Default, Deserialize, Serialize)]
217pub struct SlackApiChatScheduleMessageRequest {
218 pub channel: String,
219 pub post_at: u32,
220 pub text: String,
221 #[serde(skip_serializing_if = "Option::is_none")]
222 pub as_user: Option<bool>,
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub attachments: Option<Vec<SlackMessageAttachment>>,
225 #[serde(skip_serializing_if = "Option::is_none")]
226 pub blocks: Option<Vec<SlackBlock>>,
227
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub link_names: Option<bool>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub metadata: Option<String>,
232 #[serde(skip_serializing_if = "Option::is_none")]
233 pub parse: Option<String>,
234 #[serde(skip_serializing_if = "Option::is_none")]
235 pub reply_broadcast: Option<bool>,
236 #[serde(skip_serializing_if = "Option::is_none")]
237 pub thread_ts: Option<String>,
238 #[serde(skip_serializing_if = "Option::is_none")]
239 pub unfurl_links: Option<bool>,
240 #[serde(skip_serializing_if = "Option::is_none")]
241 pub unfurl_media: Option<bool>,
242}
243
244#[derive(Debug, Default, Deserialize, Serialize)]
245pub struct SlackApiChatScheduleMessageResponse {
246 pub ok: bool,
247 pub channel: String,
248 pub scheduled_message_id: String,
249 pub post_at: u32,
250 pub message: Value,
251}
252
253#[derive(Debug, Default, Deserialize, Serialize)]
254pub struct SlackApiChatUnfurlRequest {
255 pub channel: String,
256 pub ts: String,
257 pub unfurls: String,
258 pub text: String,
259
260 #[serde(skip_serializing_if = "Option::is_none")]
261 pub source: Option<String>,
262 #[serde(skip_serializing_if = "Option::is_none")]
263 pub unfurl_id: Option<String>,
264 #[serde(skip_serializing_if = "Option::is_none")]
265 pub user_auth_blocks: Option<String>,
266 #[serde(skip_serializing_if = "Option::is_none")]
267 pub user_auth_message: Option<String>,
268 #[serde(skip_serializing_if = "Option::is_none")]
269 pub user_auth_required: Option<bool>,
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub user_auth_url: Option<String>,
272}
273
274#[derive(Debug, Default, Deserialize, Serialize)]
275pub struct SlackApiChatUnfurlResponse {
276 pub ok: bool,
277}
278
279#[derive(Debug, Default, Deserialize, Serialize)]
280pub struct SlackApiChatUpdateRequest {
281 pub channel: String,
282 pub ts: String,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub as_user: Option<Vec<bool>>,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub attachments: Option<Vec<SlackMessageAttachment>>,
287 #[serde(skip_serializing_if = "Option::is_none")]
288 pub blocks: Option<Vec<SlackBlock>>,
289 #[serde(skip_serializing_if = "Option::is_none")]
290 pub file_ids: Option<Vec<String>>,
291 #[serde(skip_serializing_if = "Option::is_none")]
292 pub link_names: Option<bool>,
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub metadata: Option<String>,
295 #[serde(skip_serializing_if = "Option::is_none")]
296 pub parse: Option<String>,
297 #[serde(skip_serializing_if = "Option::is_none")]
298 pub reply_broadcast: Option<bool>,
299 #[serde(skip_serializing_if = "Option::is_none")]
300 pub text: Option<String>,
301}
302
303#[derive(Debug, Default, Deserialize, Serialize)]
304pub struct SlackApiChatUpdateResponse {
305 pub ok: bool,
306 pub channel: String,
307 pub ts: String,
308 pub text: String,
309 pub message: Value,
310}
311
312#[derive(Debug, Default, Deserialize, Serialize)]
313pub struct SlackApiChatScheduledMessagesListRequest {
314 pub channel: String,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub cursor: Option<String>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub latest: Option<String>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub limit: Option<i32>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub oldest: Option<String>,
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub team_id: Option<String>,
325}
326
327#[derive(Debug, Default, Deserialize, Serialize)]
328pub struct SlackApiChatScheduledMessagesListResponse {
329 pub ok: bool,
330 pub scheduled_messages: Value,
331 pub response_metadata: Value,
332}