Skip to main content

tuwunel_service/membership/
ban.rs

1use 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}