From 1454945f32b7b942c8c4ec54e7bb8f47f1aed92c Mon Sep 17 00:00:00 2001 From: Tamipes Date: Thu, 11 Dec 2025 23:16:05 +0100 Subject: [PATCH] feat: better looking motd, and kubernetes native motd handling --- src/kube_cache.rs | 23 +++++++++++++++++++++++ src/main.rs | 16 ++++++++++------ src/mc_server.rs | 1 + 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/kube_cache.rs b/src/kube_cache.rs index 035667e..14e0bd0 100644 --- a/src/kube_cache.rs +++ b/src/kube_cache.rs @@ -339,6 +339,29 @@ impl MinecraftServerHandle for Server { let port = a.iter().find(|x| x.name.clone().unwrap() == "mc-router")?; port.node_port.map(|x| x.to_string()) } + + fn get_motd(&self) -> Option { + let all_container_motds = self + .dep + .spec + .clone()? + .template + .spec? + .containers + .iter() + .map(|cont| match cont.env.clone() { + Some(es) => es + .iter() + .filter(|e| e.name.as_str() == "MOTD") + .map(|x| x.value.clone()) + .collect::>>() + .first()? + .clone(), + None => None, + }) + .collect::>>(); + all_container_motds.first()?.clone() + } } impl Server { diff --git a/src/main.rs b/src/main.rs index 6dcb3d4..41b0ac2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,7 +142,7 @@ async fn handle_status( status_struct.players.max = 0; status_struct.players.online = 0; status_struct.description.text = format!( - "Could not find §kserver§r: §f§o{server_addr}§r\nMinecraft Ingress{bye_message}" + "Could not find §kserver§r: §f§o{server_addr}§r\nMinecraft Ingress {bye_message}" ); mc_server::complete_status_request(client_stream, status_struct).await?; @@ -159,9 +159,13 @@ async fn handle_status( return Ok(()); } }; - tracing::debug!("kube server status: {:?}", server.query_status().await?); let status = server.query_status().await?; tracing::info!(status = ?status, "status request"); + let motd = server + .get_motd() + .unwrap_or("A minecraft server (proxy motd)".to_string()); + + tracing::trace!(motd); match status { ServerDeploymentStatus::Connectable(mut server_stream) => { return server @@ -171,13 +175,13 @@ async fn handle_status( ServerDeploymentStatus::Starting | ServerDeploymentStatus::PodOk => { status_struct.players.max = 1; status_struct.players.online = 1; - status_struct.description.text = format!("\n§2Server is starting...§r{bye_message}"); + status_struct.description.text = + format!("{motd}\n§2Starting!§r §b§oWait a bit§r§b^^§r{bye_message}"); } ServerDeploymentStatus::Offline => { status_struct.players.max = 1; - status_struct.description.text = format!( - "Server is currently §onot§r running. \n§aJoin to start it!§r {bye_message}" - ); + status_struct.description.text = + format!("{motd}\n§4Offline§r §2§oJoin to start!§r{bye_message}"); } }; diff --git a/src/mc_server.rs b/src/mc_server.rs index a1e330a..a960ec9 100644 --- a/src/mc_server.rs +++ b/src/mc_server.rs @@ -69,6 +69,7 @@ pub trait MinecraftServerHandle: Clone { fn get_internal_address(&self) -> Option; fn get_addr(&self) -> Option; fn get_port(&self) -> Option; + fn get_motd(&self) -> Option; async fn query_server_connectable(&self) -> Result { let address = self