use crate::minecraft::client::client::Client; use diesel::result::Error::NotFound; use json::object; use crate::minecraft::varint::varint_write; use std::collections::VecDeque; use chrono::{DateTime, Utc}; impl Client { pub async fn status_intent_handle(&self, packet: &mut VecDeque, packet_id: i32) -> Result<(),String> { let status_response = object! { "version": { "name": "idk", "protocol" : self.handshake.as_ref().unwrap().protocol_version, }, "players": { "max": 420, "online": 69 }, "description": self.get_description().await, }; if packet_id == 0 { let mut response : Vec = vec![]; let response_json = json::stringify(status_response); let mut response_json_len = varint_write(response_json.len() as i32); response.append(&mut response_json_len); response.append(&mut response_json.as_bytes().into()); println!("[{}] sent status response to client", self); self.send_packet(0x0, response).await; } else if packet_id == 1 { let mut response = vec![]; response.extend(packet.drain(..)); self.send_packet(0x1, response).await; println!("[{}] sent ping response to client", self); } Ok(()) } pub async fn get_description(&self) -> String { if let None = self.server { "How did you send a status request without a handshake ???".to_string(); } match self.server.as_ref().unwrap() { Ok(server) => { let login = match server.last_login { Some(date) => { let datetime: DateTime = date.into(); format!("{}", datetime.format("%d-%m-%Y at %H:%M").to_string()) }, None => { "never".to_string() } }; format!("§fServer is {}\nlast login: {}", server.status, login) }, Err(NotFound) => { "§cThis server does not exist".to_string() }, Err(error) => { format!("§cAn error occured while retreiving the information:\n{}", error) } } } }