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::{ use revolt_quark::{
models::{ServerBan, User}, models::{server_member::MemberCompositeKey, ServerBan, User},
perms, Db, Error, Permission, Ref, Result, perms, Db, Error, Permission, Ref, Result,
}; };
@@ -47,13 +47,27 @@ pub async fn req(
.throw_permission(db, Permission::BanMembers) .throw_permission(db, Permission::BanMembers)
.await?; .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()) server.ban_member(db, member, data.reason).await.map(Json)
<= permissions.get_member_rank().unwrap_or(i64::MIN) } else {
{ let server_id = server.id.to_string();
return Err(Error::NotElevated); 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(()) 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 /// Ban a member from a server
pub async fn ban_member( pub async fn ban_member(
self, self,
@@ -290,16 +302,10 @@ impl Server {
member: Member, member: Member,
reason: Option<String>, reason: Option<String>,
) -> Result<ServerBan> { ) -> Result<ServerBan> {
let ban = ServerBan { self.remove_member(db, member.clone(), RemovalIntention::Ban)
id: member.id.clone(),
reason,
};
self.remove_member(db, member, RemovalIntention::Ban)
.await?; .await?;
db.insert_ban(&ban).await?; self.ban_user(db, member.id, reason).await
Ok(ban)
} }
} }