Skip to main content

tuwunel_admin/user/
list_joined_rooms.rs

1use futures::StreamExt;
2use ruma::OwnedRoomId;
3use tuwunel_core::{Err, Result};
4
5use crate::{admin_command, get_room_info, utils::parse_local_user_id};
6
7#[admin_command]
8pub(super) async fn list_joined_rooms(&self, user_id: String) -> Result {
9	// Validate user id
10	let user_id = parse_local_user_id(self.services, &user_id)?;
11
12	let mut rooms: Vec<(OwnedRoomId, u64, String)> = self
13		.services
14		.state_cache
15		.rooms_joined(&user_id)
16		.then(|room_id| get_room_info(self.services, room_id))
17		.collect()
18		.await;
19
20	if rooms.is_empty() {
21		return Err!("User is not in any rooms.");
22	}
23
24	rooms.sort_by_key(|r| r.1);
25	rooms.reverse();
26
27	write!(self, "Rooms {user_id} Joined ({}):\n```\n", rooms.len()).await?;
28	for (id, members, name) in &rooms {
29		writeln!(self, "{id}\tMembers: {members}\tName: {name}").await?;
30	}
31	write!(self, "```").await
32}