fix: send relationship info for bots (#935)

* fix: send relationship info for bots

Signed-off-by: Zomatree <me@zomatree.live>

* fix: dont allow bots to block users

Signed-off-by: Zomatree <me@zomatree.live>

* fix: always allow users to view bot's profile

Signed-off-by: Zomatree <me@zomatree.live>

---------

Signed-off-by: Zomatree <me@zomatree.live>
This commit is contained in:
Zomatree
2026-08-24 19:07:09 +01:00
committed by GitHub
parent 365572ccd8
commit 405d9bdb8c
4 changed files with 19 additions and 21 deletions

View File

@@ -1045,9 +1045,7 @@ impl crate::User {
P: Into<Option<&'a crate::User>>,
{
let perspective = perspective.into();
let (relationship, can_see_profile) = if self.bot.is_some() {
(RelationshipStatus::None, true)
} else if let Some(perspective) = perspective {
let (relationship, can_see_profile) = if let Some(perspective) = perspective {
let mut query = DatabasePermissionQuery::new(db, perspective).user(&self);
if perspective.id == self.id {
@@ -1126,9 +1124,7 @@ impl crate::User {
P: Into<Option<&'a crate::User>>,
{
let perspective = perspective.into();
let (relationship, can_see_profile) = if self.bot.is_some() {
(RelationshipStatus::None, true)
} else if let Some(perspective) = perspective {
let (relationship, can_see_profile) = if let Some(perspective) = perspective {
if perspective.id == self.id {
(RelationshipStatus::User, true)
} else {

View File

@@ -6,11 +6,7 @@ use crate::{
/// Calculate permissions against a user
pub async fn calculate_user_permissions<P: PermissionQuery>(query: &mut P) -> PermissionValue {
if query.are_we_privileged().await {
return u64::MAX.into();
}
if query.are_the_users_same().await {
if query.are_we_privileged().await || query.are_the_users_same().await {
return u64::MAX.into();
}
@@ -26,17 +22,15 @@ pub async fn calculate_user_permissions<P: PermissionQuery>(query: &mut P) -> Pe
_ => {}
}
if query.have_mutual_connection().await {
if query.have_mutual_connection().await || query.user_is_bot().await {
permissions = UserPermission::Access as u64 + UserPermission::ViewProfile as u64;
};
if query.user_is_bot().await || query.are_we_a_bot().await {
permissions += UserPermission::SendMessage as u64;
}
if query.have_mutual_connection().await && (query.are_we_a_bot().await || query.user_is_bot().await) {
permissions += UserPermission::SendMessage as u64;
};
permissions.into()
} else {
permissions.into()
}
permissions.into()
// TODO: add boolean switch for permission for users to globally message a user
// maybe an enum?

View File

@@ -1,7 +1,7 @@
use revolt_database::util::reference::Reference;
use revolt_database::{Database, User};
use revolt_models::v0;
use revolt_result::Result;
use revolt_result::{create_error, Result};
use rocket::serde::json::Json;
use rocket::State;
@@ -15,6 +15,10 @@ pub async fn block(
mut user: User,
target: Reference<'_>,
) -> Result<Json<v0::User>> {
if user.bot.is_some() {
return Err(create_error!(IsBot));
}
let mut target = target.as_user(db).await?;
user.block_user(db, &mut target).await?;

View File

@@ -1,7 +1,7 @@
use revolt_database::util::reference::Reference;
use revolt_database::{Database, User};
use revolt_models::v0;
use revolt_result::Result;
use revolt_result::{create_error, Result};
use rocket::serde::json::Json;
use rocket::State;
@@ -15,6 +15,10 @@ pub async fn unblock(
mut user: User,
target: Reference<'_>,
) -> Result<Json<v0::User>> {
if user.bot.is_some() {
return Err(create_error!(IsBot));
}
let mut target = target.as_user(db).await?;
user.unblock_user(db, &mut target).await?;