tuwunel_admin/user/
force_join_room.rs1use 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}