Improve webhook embeds

main
Elnu 1 year ago
parent 3758a16f8d
commit 072c7c4b8b

@ -130,55 +130,70 @@ async fn _post_comment(
} }
None => return Err(Error::InvalidUrl), // e.g. 404 None => return Err(Error::InvalidUrl), // e.g. 404
}; };
// TODO: Clean up webhook integration // TODO: Use web::block
{ // Create comment in database
let database = data.get_db(&origin)?; let database = data.get_db(&origin)?;
if let Some(webhook) = &database.settings.webhook { if comment.author.is_none() && database.settings.name_required {
let client = WebhookClient::new(&webhook); return Err(Error::NameRequired);
client.send(|message| {
let author = match &comment.author {
Some(author) => &author,
None => "Annonymous",
};
message
.username(&author)
.avatar_url(&format!(
"https://www.gravatar.com/avatar/{}?d=mp",
get_gravatar(&comment.email)
))
.embed(|embed| embed
.title(&format!("New comment on {}", page_data.content_id))
.description(&comment.text)
)
}
).await.unwrap();
}
} }
web::block(move || { if comment.email.is_none() && database.settings.email_required {
let database = data.get_db(&origin)?; return Err(Error::EmailRequired);
if comment.author.is_none() && database.settings.name_required { }
return Err(Error::NameRequired); if let Some(parent) = comment.parent {
} 'outer2: loop {
if comment.email.is_none() && database.settings.email_required { let comments = database.get_comments(&comment.content_id)?;
return Err(Error::EmailRequired); for other_comment in comments.iter() {
} if other_comment.id.unwrap() == parent {
if let Some(parent) = comment.parent { if other_comment.parent.is_none() {
'outer2: loop { break 'outer2;
let comments = database.get_comments(&comment.content_id)?;
for other_comment in comments.iter() {
if other_comment.id.unwrap() == parent {
if other_comment.parent.is_none() {
break 'outer2;
}
break;
} }
break;
} }
return Err(Error::InvalidParent);
} }
return Err(Error::InvalidParent);
} }
database.create_comment(&comment)?; }
Ok(()) database.create_comment(&comment)?;
}).await?.unwrap(); // Send notification webhook
if let Some(webhook) = &database.settings.webhook {
let client = WebhookClient::new(&webhook);
client.send(|message| {
let author = match &comment.author {
Some(author) => &author,
None => "Annonymous",
};
message
.username(&author)
.avatar_url(&format!(
"https://www.gravatar.com/avatar/{}?d=mp",
get_gravatar(&comment.email)
))
.embed(|embed| embed
.title(&format!("New comment on {}", page_data.content_id))
.description(&comment.text)
.field("Link", &format!("{}#{}",
&url // Remove any trailing hash from URL
.split("#")
.next()
.unwrap(),
&database // Get ID of just created comment
.get_comments(&page_data.content_id)
.unwrap()
.first() // returned in reverse chronological order
.unwrap()
.id
.unwrap()
), true)
.field("Content ID", &page_data.content_id, true)
.field("Email", match &comment.email {
Some(email) => email,
None => "None",
}, false)
)
}
).await.unwrap();
}
Ok(()) Ok(())
} }

Loading…
Cancel
Save