html terminal
Diffstat (limited to 'src/bot/player.rs')
-rw-r--r--src/bot/player.rs38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/bot/player.rs b/src/bot/player.rs
index 29b534d..f0d6a0f 100644
--- a/src/bot/player.rs
+++ b/src/bot/player.rs
@@ -1,8 +1,9 @@
-use super::{get_nextblock, strip_colors, Context};
+use super::{get_nextblock, strip_colors, Context, FAIL, SUCCESS};
use crate::send;
use anyhow::Result;
use futures_util::StreamExt;
use itertools::Itertools;
+use serenity::http::CacheHttp;
use std::net::Ipv4Addr;
use std::str::FromStr;
use std::time::Instant;
@@ -82,3 +83,38 @@ pub async fn autocomplete<'a>(
.filter(move |p| futures::future::ready(p.name.starts_with(partial)))
.map(|p| p.name)
}
+
+#[poise::command(slash_command, prefix_command, category = "Info", rename = "players")]
+/// lists the currently online players.
+pub async fn list(ctx: Context<'_>) -> Result<()> {
+ let _ = ctx.defer().await;
+ let players = Players::get_all(&ctx.data().stdin).await.unwrap().clone();
+ let perms = ctx
+ .partial_guild()
+ .await
+ .unwrap()
+ .member_permissions(ctx.http(), ctx.author().id)
+ .await?;
+ poise::send_reply(ctx, |m| {
+ m.embed(|e| {
+ if players.is_empty() {
+ return e.title("no players online.").color(FAIL);
+ }
+ e.fields(players.into_iter().map(|p| {
+ let admins = if p.admin { " [A]" } else { "" };
+ (
+ p.name,
+ if perms.use_slash_commands() {
+ format!("{id}, {ip}", id = p.uuid, ip = p.ip) + admins
+ } else {
+ admins.to_string()
+ },
+ true,
+ )
+ }));
+ e.description("currently online players.").color(SUCCESS)
+ })
+ })
+ .await?;
+ Ok(())
+}