Added custom motd system
This commit is contained in:
parent
c46031c737
commit
22e7743af4
|
@ -2,3 +2,4 @@
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
test_server/*
|
test_server/*
|
||||||
main_icon.png
|
main_icon.png
|
||||||
|
motd.json
|
||||||
|
|
|
@ -10,3 +10,4 @@ tokio = { version = "1", features = ["full"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
base64 = "0.21.5"
|
base64 = "0.21.5"
|
||||||
|
rand = "0.8.5"
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
// Yeahbut December 2023
|
// Yeahbut December 2023
|
||||||
|
|
||||||
use std::fs::File;
|
use std::fs::{self, File};
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
use tokio::net::tcp::{OwnedReadHalf, OwnedWriteHalf};
|
use tokio::net::tcp::{OwnedReadHalf, OwnedWriteHalf};
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
|
use serde_json::Value;
|
||||||
use base64::{Engine as _, engine::general_purpose};
|
use base64::{Engine as _, engine::general_purpose};
|
||||||
|
use rand::Rng;
|
||||||
|
|
||||||
use crate::mc_types;
|
use crate::mc_types;
|
||||||
use crate::handshake;
|
use crate::handshake;
|
||||||
|
@ -52,7 +54,42 @@ async fn online_players(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn motd() -> String {
|
fn motd() -> String {
|
||||||
"A Minecraft Server Proxy".to_string()
|
let default = "A Minecraft Server Proxy".to_string();
|
||||||
|
let file_path = "./motd.json";
|
||||||
|
|
||||||
|
let data = match fs::read_to_string(file_path) {
|
||||||
|
Ok(data) => data,
|
||||||
|
Err(_) => return default,
|
||||||
|
};
|
||||||
|
|
||||||
|
let motd_data: Value = match serde_json::from_str(&data) {
|
||||||
|
Ok(value) => value,
|
||||||
|
Err(_) => return default,
|
||||||
|
};
|
||||||
|
|
||||||
|
let length1 = motd_data["line1"].as_array().map_or(0, |v| v.len());
|
||||||
|
let length2 = motd_data["line2"].as_array().map_or(0, |v| v.len());
|
||||||
|
|
||||||
|
if length1 == 0 || length2 == 0 {
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
let rand1 = rng.gen_range(0..length1) as usize;
|
||||||
|
let rand2 = rng.gen_range(0..length2) as usize;
|
||||||
|
|
||||||
|
let line1: &str = match motd_data["line1"][rand1].as_str() {
|
||||||
|
Some(s) => s,
|
||||||
|
None => return default,
|
||||||
|
};
|
||||||
|
|
||||||
|
let line2: &str = match motd_data["line2"][rand2].as_str() {
|
||||||
|
Some(s) => s,
|
||||||
|
None => return default,
|
||||||
|
};
|
||||||
|
|
||||||
|
let line: String = format!("{}\n{}", line1, line2);
|
||||||
|
line
|
||||||
}
|
}
|
||||||
|
|
||||||
fn favicon() -> Option<String> {
|
fn favicon() -> Option<String> {
|
||||||
|
@ -66,10 +103,11 @@ fn favicon() -> Option<String> {
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
if let Err(_) = file.read_to_end(&mut buffer) {
|
if let Err(_) = file.read_to_end(&mut buffer) {
|
||||||
return None
|
return None
|
||||||
}
|
};
|
||||||
|
|
||||||
let base64_string = general_purpose::STANDARD_NO_PAD.encode(buffer);
|
let base64_string = general_purpose::STANDARD_NO_PAD.encode(buffer);
|
||||||
let full_string = "data:image/png;base64,".to_string() + &base64_string;
|
let full_string: String =
|
||||||
|
format!("data:image/png;base64,{}", base64_string);
|
||||||
|
|
||||||
Some(full_string)
|
Some(full_string)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue