From 78c890aa592fec7b1b2743b1586396cf38698ee7 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 11 Jun 2021 18:07:37 +0100 Subject: [PATCH] Messaging: Parse mentions. --- src/database/entities/message.rs | 5 ++++- src/routes/channels/delete_channel.rs | 1 + src/routes/channels/edit_channel.rs | 3 +++ src/routes/channels/group_add_member.rs | 1 + src/routes/channels/group_remove_member.rs | 1 + src/routes/channels/message_send.rs | 14 +++++++++++++- 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 3609110a..07c2ecac 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -59,10 +59,12 @@ pub struct Message { pub edited: Option, #[serde(skip_serializing_if = "Option::is_none")] pub embeds: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub mentions: Option> } impl Message { - pub fn create(author: String, channel: String, content: Content) -> Message { + pub fn create(author: String, channel: String, content: Content, mentions: Option>) -> Message { Message { id: Ulid::new().to_string(), nonce: None, @@ -73,6 +75,7 @@ impl Message { attachments: None, edited: None, embeds: None, + mentions } } diff --git a/src/routes/channels/delete_channel.rs b/src/routes/channels/delete_channel.rs index 9c6245c5..7b3dfed0 100644 --- a/src/routes/channels/delete_channel.rs +++ b/src/routes/channels/delete_channel.rs @@ -102,6 +102,7 @@ pub async fn req(user: User, target: Ref) -> Result<()> { "00000000000000000000000000".to_string(), id.clone(), Content::SystemMessage(SystemMessage::UserLeft { id: user.id }), + None ) .publish(&target) .await diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs index 249b29ba..8d33a14c 100644 --- a/src/routes/channels/edit_channel.rs +++ b/src/routes/channels/edit_channel.rs @@ -119,6 +119,7 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { name, by: user.id.clone(), }), + None ) .publish(&target) .await @@ -132,6 +133,7 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { by: user.id.clone(), }), + None ) .publish(&target) .await @@ -143,6 +145,7 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { "00000000000000000000000000".to_string(), id.clone(), Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }), + None ) .publish(&target) .await diff --git a/src/routes/channels/group_add_member.rs b/src/routes/channels/group_add_member.rs index fcd0810b..bb6aa70f 100644 --- a/src/routes/channels/group_add_member.rs +++ b/src/routes/channels/group_add_member.rs @@ -62,6 +62,7 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> { id: member.id, by: user.id, }), + None ) .publish(&channel) .await diff --git a/src/routes/channels/group_remove_member.rs b/src/routes/channels/group_remove_member.rs index f26922f8..9f7ea617 100644 --- a/src/routes/channels/group_remove_member.rs +++ b/src/routes/channels/group_remove_member.rs @@ -58,6 +58,7 @@ pub async fn req(user: User, target: Ref, member: Ref) -> Result<()> { id: member.id, by: user.id, }), + None ) .publish(&channel) .await diff --git a/src/routes/channels/message_send.rs b/src/routes/channels/message_send.rs index 60591fa0..be68c45e 100644 --- a/src/routes/channels/message_send.rs +++ b/src/routes/channels/message_send.rs @@ -4,8 +4,9 @@ use crate::util::result::{Error, Result}; use mongodb::{bson::doc, options::FindOneOptions}; use rocket_contrib::json::{Json, JsonValue}; use serde::{Deserialize, Serialize}; -use ulid::Ulid; use validator::Validate; +use regex::Regex; +use ulid::Ulid; #[derive(Validate, Serialize, Deserialize)] pub struct Data { @@ -18,6 +19,10 @@ pub struct Data { attachment: Option, } +lazy_static! { + static ref RE_ULID: Regex = Regex::new(r"<@([0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26})>").unwrap(); +} + #[post("//messages", data = "")] pub async fn req(user: User, target: Ref, message: Json) -> Result { message @@ -66,6 +71,12 @@ pub async fn req(user: User, target: Ref, message: Json) -> Result) -> Result 0 { Some(mentions) } else { None } }; msg.clone().publish(&target).await?;