tuwunel_admin/room/moderation/
list_banned_rooms.rs1use futures::StreamExt;
2use ruma::OwnedRoomId;
3use tuwunel_core::{Err, Result, utils::IterStream};
4
5use crate::{admin_command, get_room_info};
6
7#[admin_command]
8pub(super) async fn list_banned_rooms(&self, no_details: bool) -> Result {
9 let room_ids: Vec<OwnedRoomId> = self
10 .services
11 .metadata
12 .list_banned_rooms()
13 .map(Into::into)
14 .collect()
15 .await;
16
17 if room_ids.is_empty() {
18 return Err!("No rooms are banned.");
19 }
20
21 let mut rooms = room_ids
22 .iter()
23 .stream()
24 .then(|room_id| get_room_info(self.services, room_id))
25 .collect::<Vec<_>>()
26 .await;
27
28 rooms.sort_by_key(|r| r.1);
29 rooms.reverse();
30
31 let num = rooms.len();
32
33 write!(self, "Rooms Banned ({num}):\n```\n").await?;
34 for (id, members, name) in &rooms {
35 if no_details {
36 writeln!(self, "{id}").await?;
37 } else {
38 writeln!(self, "{id}\tMembers: {members}\tName: {name}").await?;
39 }
40 }
41 write!(self, "```").await
42}