slack_web_api/api/
chat.rs

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    /// https://api.slack.com/methods/chat.delete
15    pub async fn chat_delete(
16        &self,
17        request: &SlackApiChatDeleteRequest,
18    ) -> SlackApiResponse<SlackApiChatDeleteResponse> {
19        self.http_post("chat.delete", request).await
20    }
21    /// https://api.slack.com/methods/chat.deleteScheduledMessage
22    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    /// https://api.slack.com/methods/chat.getPermalink
29    pub async fn chat_get_permalink(
30        &self,
31        request: &SlackApiChatGetPermalinkRequest,
32    ) -> SlackApiResponse<SlackApiChatGetPermalinkResponse> {
33        self.http_post("chat.getPermalink", request).await
34    }
35    /// https://api.slack.com/methods/chat.meMessage
36    pub async fn chat_me_message(
37        &self,
38        request: &SlackApiChatMeMessageRequest,
39    ) -> SlackApiResponse<SlackApiChatMeMessageResponse> {
40        self.http_post("chat.meMessage", request).await
41    }
42    /// https://api.slack.com/methods/chat.postEphemeral
43    /// あなただけに表示されています
44    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    /// https://api.slack.com/methods/chat.postMessage
52    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    /// https://api.slack.com/methods/chat.scheduleMessage
59    pub async fn chat_schedule_message(
60        &self,
61        request: &SlackApiChatScheduleMessageRequest,
62    ) -> SlackApiResponse<SlackApiChatScheduleMessageResponse> {
63        self.http_post("chat.scheduleMessage", request).await
64    }
65    /// https://api.slack.com/methods/chat.unfurl
66    pub async fn chat_unfurl(
67        &self,
68        request: &SlackApiChatUnfurlRequest,
69    ) -> SlackApiResponse<SlackApiChatUnfurlResponse> {
70        self.http_post("chat.unfurl", request).await
71    }
72    /// https://api.slack.com/methods/chat.update
73    pub async fn chat_update(
74        &self,
75        request: &SlackApiChatUpdateRequest,
76    ) -> SlackApiResponse<SlackApiChatUpdateResponse> {
77        self.http_post("chat.update", request).await
78    }
79    /// https://api.slack.com/methods/chat.scheduledMessages.list
80    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}