tuwunel_service/membership/
ban.rs1use ruma::{
2 RoomId, UserId,
3 events::room::member::{MembershipState, RoomMemberEventContent},
4};
5use tuwunel_core::{Result, implement, pdu::PduBuilder};
6
7use super::Service;
8use crate::rooms::timeline::RoomMutexGuard;
9
10#[implement(Service)]
11#[tracing::instrument(
12 level = "debug",
13 skip_all,
14 fields(%sender_user, %room_id, %user_id)
15)]
16pub async fn ban(
17 &self,
18 room_id: &RoomId,
19 user_id: &UserId,
20 reason: Option<&String>,
21 sender_user: &UserId,
22 state_lock: &RoomMutexGuard,
23) -> Result {
24 self.services
25 .timeline
26 .build_and_append_pdu(
27 PduBuilder::state(user_id.to_string(), &RoomMemberEventContent {
28 membership: MembershipState::Ban,
29 reason: reason.cloned(),
30 displayname: None,
31 avatar_url: None,
32 blurhash: None,
33 is_direct: None,
34 join_authorized_via_users_server: None,
35 third_party_invite: None,
36 }),
37 sender_user,
38 room_id,
39 state_lock,
40 )
41 .await?;
42
43 Ok(())
44}