feat: allow empty message content when sending embed

This commit is contained in:
Paul Makles
2022-04-21 17:52:42 +01:00
parent 9c71f09a84
commit d7839f1790

View File

@@ -25,7 +25,7 @@ pub struct DataMessageSend {
/// Message content to send /// Message content to send
#[validate(length(min = 0, max = 2000))] #[validate(length(min = 0, max = 2000))]
content: String, content: Option<String>,
/// Attachments to include in message /// Attachments to include in message
#[validate(length(min = 1, max = 128))] #[validate(length(min = 1, max = 128))]
attachments: Option<Vec<String>>, attachments: Option<Vec<String>>,
@@ -68,8 +68,9 @@ pub async fn message_send(
.throw_permission_and_view_channel(db, Permission::SendMessage) .throw_permission_and_view_channel(db, Permission::SendMessage)
.await?; .await?;
if data.content.is_empty() if (data.content.as_ref().map_or(true, |v| v.is_empty()))
&& (data.attachments.is_none() || data.attachments.as_ref().unwrap().is_empty()) && (data.attachments.as_ref().map_or(true, |v| v.is_empty()))
&& (data.embeds.as_ref().map_or(true, |v| v.is_empty()))
{ {
return Err(Error::EmptyMessage); return Err(Error::EmptyMessage);
} }
@@ -84,9 +85,11 @@ pub async fn message_send(
// 1. Parse mentions in message. // 1. Parse mentions in message.
let mut mentions = HashSet::new(); let mut mentions = HashSet::new();
for capture in RE_MENTION.captures_iter(&data.content) { if let Some(content) = &data.content {
if let Some(mention) = capture.get(1) { for capture in RE_MENTION.captures_iter(&content) {
mentions.insert(mention.as_str().to_string()); if let Some(mention) = capture.get(1) {
mentions.insert(mention.as_str().to_string());
}
} }
} }
@@ -169,7 +172,7 @@ pub async fn message_send(
} }
// 6. Set content // 6. Set content
message.content = Some(data.content.clone()); message.content = data.content;
// 7. Pass-through nonce value for clients // 7. Pass-through nonce value for clients
message.nonce = Some(idempotency.into_key()); message.nonce = Some(idempotency.into_key());
@@ -177,12 +180,14 @@ pub async fn message_send(
message.create(db, &channel, Some(&user)).await?; message.create(db, &channel, Some(&user)).await?;
// Queue up a task for processing embeds // Queue up a task for processing embeds
revolt_quark::tasks::process_embeds::queue( if let Some(content) = &message.content {
channel.id().to_string(), revolt_quark::tasks::process_embeds::queue(
message.id.to_string(), channel.id().to_string(),
data.content, message.id.to_string(),
) content.clone(),
.await; )
.await;
}
Ok(Json(message)) Ok(Json(message))
} }