78 lines
2.1 KiB
Rust
78 lines
2.1 KiB
Rust
use mcquery::Query;
|
||
use std::{
|
||
time::Duration,
|
||
env
|
||
};
|
||
|
||
#[tokio::main]
|
||
async fn main() {
|
||
let buffer_size = match env::args().nth(3) {
|
||
Some(arg) => match arg.parse() {
|
||
Ok(size) => size,
|
||
Err(err) => {
|
||
eprintln!("Error parsing buffer size");
|
||
eprintln!("{}", err);
|
||
std::process::exit(1);
|
||
},
|
||
},
|
||
None => 1024,
|
||
};
|
||
|
||
println!("Creating {}B buffer...", buffer_size);
|
||
let mut buffer = vec![0; buffer_size];
|
||
|
||
let address = (
|
||
match env::args().nth(1) {
|
||
Some(ip) => ip,
|
||
None => {
|
||
eprintln!("No server IP specified");
|
||
std::process::exit(1);
|
||
},
|
||
}, match env::args().nth(2).unwrap_or("25565".to_owned()).parse() {
|
||
Ok(port) => port,
|
||
Err(err) => {
|
||
eprintln!("Error parsing port");
|
||
eprintln!("{}", err);
|
||
std::process::exit(1);
|
||
},
|
||
}
|
||
);
|
||
println!("Connecting with {}:{}...", address.0, address.1);
|
||
|
||
if let Query::Full(stat) = match Query::get_full(
|
||
address,
|
||
Duration::from_secs(5),
|
||
&mut buffer
|
||
).await {
|
||
Ok(query) => query,
|
||
Err(err) => {
|
||
eprintln!("{}", err);
|
||
std::process::exit(1);
|
||
}
|
||
} {
|
||
println!("\nFull query response:");
|
||
println!(" KV section: {{");
|
||
for (key, value) in stat.kv {
|
||
println!(" {}: {}", key, value);
|
||
}
|
||
println!(" }}");
|
||
println!(" Players: {}",
|
||
if stat.players.len() > 0 {
|
||
stat.players.join(", ")
|
||
} else {
|
||
"–".to_owned()
|
||
}
|
||
);
|
||
println!(" Software: {}", stat.software.unwrap_or("vanilla".to_owned()));
|
||
print!(" Plugins:");
|
||
match stat.plugins {
|
||
Some(plugins) => {
|
||
println!();
|
||
for plugin in plugins {
|
||
println!(" {}", plugin);
|
||
}
|
||
},
|
||
None => println!(" –")
|
||
};
|
||
};
|
||
} |