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