diff --git a/Cargo.lock b/Cargo.lock index 7bb67a67..f1fd1ecb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3572,6 +3572,7 @@ dependencies = [ "revolt-database", "revolt-models", "revolt-permissions", + "revolt-presence", "revolt-result", "revolt_rocket_okapi", "rocket", diff --git a/crates/bonfire/src/events/impl.rs b/crates/bonfire/src/events/impl.rs index 46c854b8..325267f4 100644 --- a/crates/bonfire/src/events/impl.rs +++ b/crates/bonfire/src/events/impl.rs @@ -180,7 +180,7 @@ impl State { .collect(); // Make sure we see our own user correctly. - users.push(user.into_self().await); + users.push(user.into_self(true).await); // Set subscription state internally. self.reset_state().await; @@ -540,6 +540,20 @@ impl State { } } + EventV1::Message(message) => { + // Since Message events are fanned out to many clients, + // we must reconstruct the relationship value at this end. + if let Some(user) = &mut message.user { + user.relationship = self + .cache + .users + .get(&self.cache.user_id) + .expect("missing self?") + .relationship_with(&message.author) + .into(); + } + } + _ => {} } diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 6450d16a..3d15fc2c 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -77,6 +77,7 @@ revolt-models = { path = "../core/models", features = [ "validator", "rocket", ] } +revolt-presence = { path = "../core/presence" } revolt-result = { path = "../core/result", features = ["rocket", "okapi"] } revolt-permissions = { path = "../core/permissions", features = ["schemas"] } diff --git a/crates/delta/src/routes/bots/fetch_owned.rs b/crates/delta/src/routes/bots/fetch_owned.rs index 8a40b228..db4017ce 100644 --- a/crates/delta/src/routes/bots/fetch_owned.rs +++ b/crates/delta/src/routes/bots/fetch_owned.rs @@ -24,7 +24,7 @@ pub async fn fetch_owned_bots(db: &State, user: User) -> Result Result> { - Ok(Json(user.into_self().await)) + Ok(Json(user.into_self(false).await)) } diff --git a/crates/delta/src/routes/users/fetch_user.rs b/crates/delta/src/routes/users/fetch_user.rs index e8886ca9..68be67b9 100644 --- a/crates/delta/src/routes/users/fetch_user.rs +++ b/crates/delta/src/routes/users/fetch_user.rs @@ -15,7 +15,7 @@ use rocket::{serde::json::Json, State}; #[get("/")] pub async fn fetch(db: &State, user: User, target: Reference) -> Result> { if user.id == target.id { - return Ok(Json(user.into_self().await)); + return Ok(Json(user.into_self(false).await)); } let target = target.as_user(db).await?;