Skip to main content

tuwunel_admin/user/
force_join_room.rs

1use ruma::OwnedRoomOrAliasId;
2use tuwunel_core::Result;
3use tuwunel_service::membership::Join;
4
5use crate::{admin_command, utils::parse_local_user_id};
6
7#[admin_command]
8pub(super) async fn force_join_room(&self, user_id: String, room: OwnedRoomOrAliasId) -> Result {
9	let user_id = parse_local_user_id(self.services, &user_id)?;
10	let (room_id, servers) = self
11		.services
12		.alias
13		.maybe_resolve_with_servers(&room, None)
14		.await?;
15
16	assert!(
17		self.services.globals.user_is_local(&user_id),
18		"Parsed user_id must be a local user"
19	);
20
21	self.services
22		.membership
23		.join(Join {
24			sender_user: &user_id,
25			room_id: &room_id,
26			orig_room_id: Some(&room),
27			reason: None,
28			servers: &servers,
29			is_appservice: false,
30			extra_content: None,
31		})
32		.await?;
33
34	write!(self, "{user_id} has been joined to {room_id}.").await
35}