forked from jmug/stoatchat
chore: allow banning users not in server
This commit is contained in:
@@ -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)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user