Skip to main content

tuwunel_admin/room/moderation/
list_banned_rooms.rs

1use 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}