adminroom: improved room list outputs, add counts
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
0e7c3cb338
commit
74b29ce067
2 changed files with 48 additions and 24 deletions
|
@ -101,7 +101,8 @@ pub(crate) async fn remote_user_in_rooms(_body: Vec<&str>, user_id: Box<UserId>)
|
||||||
rooms.reverse();
|
rooms.reverse();
|
||||||
|
|
||||||
let output_plain = format!(
|
let output_plain = format!(
|
||||||
"Rooms {user_id} shares with us:\n{}",
|
"Rooms {user_id} shares with us ({}):\n{}",
|
||||||
|
rooms.len(),
|
||||||
rooms
|
rooms
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(id, members, name)| format!("{id}\tMembers: {members}\tName: {name}"))
|
.map(|(id, members, name)| format!("{id}\tMembers: {members}\tName: {name}"))
|
||||||
|
@ -109,15 +110,16 @@ pub(crate) async fn remote_user_in_rooms(_body: Vec<&str>, user_id: Box<UserId>)
|
||||||
.join("\n")
|
.join("\n")
|
||||||
);
|
);
|
||||||
let output_html = format!(
|
let output_html = format!(
|
||||||
"<table><caption>Rooms {user_id} shares with \
|
"<table><caption>Rooms {user_id} shares with us \
|
||||||
us</caption>\n<tr><th>id</th>\t<th>members</th>\t<th>name</th></tr>\n{}</table>",
|
({})</caption>\n<tr><th>id</th>\t<th>members</th>\t<th>name</th></tr>\n{}</table>",
|
||||||
|
rooms.len(),
|
||||||
rooms
|
rooms
|
||||||
.iter()
|
.iter()
|
||||||
.fold(String::new(), |mut output, (id, members, name)| {
|
.fold(String::new(), |mut output, (id, members, name)| {
|
||||||
writeln!(
|
writeln!(
|
||||||
output,
|
output,
|
||||||
"<tr><td>{}</td>\t<td>{}</td>\t<td>{}</td></tr>",
|
"<tr><td>{}</td>\t<td>{}</td>\t<td>{}</td></tr>",
|
||||||
escape_html(id.as_ref()),
|
id,
|
||||||
members,
|
members,
|
||||||
escape_html(name)
|
escape_html(name)
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,11 +6,8 @@ use ruma::{
|
||||||
};
|
};
|
||||||
use tracing::{debug, error, info, warn};
|
use tracing::{debug, error, info, warn};
|
||||||
|
|
||||||
use super::{
|
use super::{super::Service, RoomModerationCommand};
|
||||||
super::{escape_html, Service},
|
use crate::{escape_html, get_room_info, services, user_is_local, Result};
|
||||||
RoomModerationCommand,
|
|
||||||
};
|
|
||||||
use crate::{services, user_is_local, Result};
|
|
||||||
|
|
||||||
pub(crate) async fn process(command: RoomModerationCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn process(command: RoomModerationCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
match command {
|
match command {
|
||||||
|
@ -479,26 +476,51 @@ async fn list_banned_rooms(_body: Vec<&str>) -> Result<RoomMessageEventContent>
|
||||||
|
|
||||||
match rooms {
|
match rooms {
|
||||||
Ok(room_ids) => {
|
Ok(room_ids) => {
|
||||||
// TODO: add room name from our state cache if available, default to the room ID
|
if room_ids.is_empty() {
|
||||||
// as the room name if we dont have it TODO: do same if we have a room alias for
|
return Ok(RoomMessageEventContent::text_plain("No rooms are banned."));
|
||||||
// this
|
}
|
||||||
let plain_list = room_ids.iter().fold(String::new(), |mut output, room_id| {
|
|
||||||
writeln!(output, "- `{room_id}`").unwrap();
|
|
||||||
output
|
|
||||||
});
|
|
||||||
|
|
||||||
let html_list = room_ids.iter().fold(String::new(), |mut output, room_id| {
|
let mut rooms = room_ids
|
||||||
writeln!(output, "<li><code>{}</code></li>", escape_html(room_id.as_ref())).unwrap();
|
.into_iter()
|
||||||
output
|
.map(|room_id| get_room_info(&room_id))
|
||||||
});
|
.collect::<Vec<_>>();
|
||||||
|
rooms.sort_by_key(|r| r.1);
|
||||||
|
rooms.reverse();
|
||||||
|
|
||||||
let plain = format!("Rooms:\n{plain_list}");
|
let output_plain = format!(
|
||||||
let html = format!("Rooms:\n<ul>{html_list}</ul>");
|
"Rooms Banned ({}):\n```\n{}```",
|
||||||
Ok(RoomMessageEventContent::text_html(plain, html))
|
rooms.len(),
|
||||||
|
rooms
|
||||||
|
.iter()
|
||||||
|
.map(|(id, members, name)| format!("{id}\tMembers: {members}\tName: {name}"))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join("\n")
|
||||||
|
);
|
||||||
|
|
||||||
|
let output_html = format!(
|
||||||
|
"<table><caption>Rooms Banned ({}) \
|
||||||
|
</caption>\n<tr><th>id</th>\t<th>members</th>\t<th>name</th></tr>\n{}</table>",
|
||||||
|
rooms.len(),
|
||||||
|
rooms
|
||||||
|
.iter()
|
||||||
|
.fold(String::new(), |mut output, (id, members, name)| {
|
||||||
|
writeln!(
|
||||||
|
output,
|
||||||
|
"<tr><td>{}</td>\t<td>{}</td>\t<td>{}</td></tr>",
|
||||||
|
id,
|
||||||
|
members,
|
||||||
|
escape_html(name.as_ref())
|
||||||
|
)
|
||||||
|
.expect("should be able to write to string buffer");
|
||||||
|
output
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(output_plain, output_html))
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Failed to list banned rooms: {}", e);
|
error!("Failed to list banned rooms: {}", e);
|
||||||
Ok(RoomMessageEventContent::text_plain(format!("Unable to list room aliases: {e}")))
|
Ok(RoomMessageEventContent::text_plain(format!("Unable to list banned rooms: {e}")))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue