chore: allow banning users not in server

This commit is contained in:
Paul Makles
2022-07-15 16:47:27 +01:00
parent 00ad4d54e7
commit 72aed64e5b
2 changed files with 36 additions and 16 deletions

View File

@@ -1,5 +1,5 @@
use revolt_quark::{
models::{ServerBan, User},
models::{server_member::MemberCompositeKey, ServerBan, User},
perms, Db, Error, Permission, Ref, Result,
};
@@ -47,13 +47,27 @@ pub async fn req(
.throw_permission(db, Permission::BanMembers)
.await?;
let member = target.as_member(db, &server.id).await?;
// If member exists, check privileges against them
if let Ok(member) = target.as_member(db, &server.id).await {
if member.get_ranking(permissions.server.get().unwrap())
<= permissions.get_member_rank().unwrap_or(i64::MIN)
{
return Err(Error::NotElevated);
}
if member.get_ranking(permissions.server.get().unwrap())
<= permissions.get_member_rank().unwrap_or(i64::MIN)
{
return Err(Error::NotElevated);
server.ban_member(db, member, data.reason).await.map(Json)
} else {
let server_id = server.id.to_string();
server
.ban_user(
db,
MemberCompositeKey {
server: server_id,
user: target.id,
},
data.reason,
)
.await
.map(Json)
}
server.ban_member(db, member, data.reason).await.map(Json)
}

View File

@@ -283,6 +283,18 @@ impl Server {
Ok(())
}
/// Create ban
pub async fn ban_user(
self,
db: &Database,
id: MemberCompositeKey,
reason: Option<String>,
) -> Result<ServerBan> {
let ban = ServerBan { id, reason };
db.insert_ban(&ban).await?;
Ok(ban)
}
/// Ban a member from a server
pub async fn ban_member(
self,
@@ -290,16 +302,10 @@ impl Server {
member: Member,
reason: Option<String>,
) -> Result<ServerBan> {
let ban = ServerBan {
id: member.id.clone(),
reason,
};
self.remove_member(db, member, RemovalIntention::Ban)
self.remove_member(db, member.clone(), RemovalIntention::Ban)
.await?;
db.insert_ban(&ban).await?;
Ok(ban)
self.ban_user(db, member.id, reason).await
}
}