diff --git a/set_version.sh b/set_version.sh index 3b4132d1c5bf60f3977f753d0b5b517edf34913f..23f0096a38cfa4c1319fbf7ad2152d427c768a72 100755 --- a/set_version.sh +++ b/set_version.sh @@ -1,3 +1,3 @@ #!/bin/bash -export version=0.5.1-alpha.19 +export version=0.5.1-alpha.20 echo "pub const VERSION: &str = \"${version}\";" > src/version.rs diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 520307c903fe3090e24139b0f4e93484a1c82256..4db564678f4754fe3b5a21c72a2d34b10912addb 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -228,6 +228,30 @@ impl User { Ok(users) } + /// Utility function to get all of a user's memberships. + pub async fn fetch_memberships(id: &str) -> Result<Vec<Member>> { + Ok(get_collection("server_members") + .find( + doc! { + "_id.user": id + }, + None, + ) + .await + .map_err(|_| Error::DatabaseError { + operation: "find", + with: "server_members", + })? + .filter_map(async move |s| s.ok()) + .collect::<Vec<Document>>() + .await + .into_iter() + .filter_map(|x| { + from_document(x).ok() + }) + .collect::<Vec<Member>>()) + } + /// Utility function to get all the server IDs the user is in. pub async fn fetch_server_ids(id: &str) -> Result<Vec<String>> { Ok(get_collection("server_members") diff --git a/src/notifications/events.rs b/src/notifications/events.rs index 6d3a407b6cabb1c2fa1eaacf6c3b20ce5d64b81b..f93925c62929c9525ebbbffd42c8dff54ff41486 100644 --- a/src/notifications/events.rs +++ b/src/notifications/events.rs @@ -66,6 +66,7 @@ pub enum ClientboundNotification { users: Vec<User>, servers: Vec<Server>, channels: Vec<Channel>, + members: Vec<Member> }, Message(Message), diff --git a/src/notifications/payload.rs b/src/notifications/payload.rs index d79a16cf571351270924079561156de53e44657f..f79d3fdddf78237024a95001d9d4b1b4cb57a31c 100644 --- a/src/notifications/payload.rs +++ b/src/notifications/payload.rs @@ -19,7 +19,11 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> { ); } - let server_ids = User::fetch_server_ids(&user.id).await?; + let members = User::fetch_memberships(&user.id).await?; + let server_ids: Vec<String> = members.iter() + .map(|x| x.id.server.clone()) + .collect(); + let mut cursor = get_collection("servers") .find( doc! { @@ -114,5 +118,6 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> { users, servers, channels, + members }) } diff --git a/src/routes/channels/message_edit.rs b/src/routes/channels/message_edit.rs index a356a682fd9b746e4af43850b6ad89eb5f7bd12c..cf8f7f0572f3823a83dfe8a90c18d82a32f3ff90 100644 --- a/src/routes/channels/message_edit.rs +++ b/src/routes/channels/message_edit.rs @@ -29,7 +29,7 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result< Err(Error::MissingPermission)? } - let message = msg.fetch_message(&channel).await?; + let mut message = msg.fetch_message(&channel).await?; if message.author != user.id { Err(Error::CannotEditMessage)? } @@ -40,6 +40,7 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result< "edited": Bson::DateTime(edited) }; + message.content = Content::Text(edit.content.clone()); let mut update = json!({ "content": edit.content, "edited": DateTime(edited) }); if let Some(embeds) = &message.embeds { diff --git a/src/version.rs b/src/version.rs index 24a1ed1c44bf04b8f41a86525d10e0669c6cc646..a16194be9e54694aaf70c09f98ea19bb41a779ff 100644 --- a/src/version.rs +++ b/src/version.rs @@ -1 +1 @@ -pub const VERSION: &str = "0.5.1-alpha.19"; +pub const VERSION: &str = "0.5.1-alpha.20";