This commit is contained in:
August 2026-05-06 01:03:02 -04:00
parent 46485ad396
commit c56f4c7772
Signed by: shibedrill
SSH Key Fingerprint: SHA256:M0m3JW1s38BgO2t0fG146Yxd9OJ2IOqkvCAsuRHQ6Pw
5 changed files with 40 additions and 45 deletions

0
src/bot_runner.rs Normal file
View File

View File

@ -1,30 +0,0 @@
use poise::serenity_prelude::{ActivityData, OnlineStatus};
use crate::types::ServerResponse;
pub fn set_presence(ctx: &poise::serenity_prelude::Context, status: ServerResponse) {
ctx.set_presence(
Some(ActivityData::custom(match status.online() {
true => {
format!(
"{}/{} players online {}",
status.players().unwrap(),
status.max().unwrap(),
if let Some(version) = status.version() {
format!("v{}", version)
} else {
"".into()
}
)
}
false => "Server offline!".to_string(),
})),
match status.online() {
true => match status.is_full() {
true => OnlineStatus::Idle,
false => OnlineStatus::Online,
},
false => OnlineStatus::DoNotDisturb,
},
);
}

View File

@ -19,6 +19,7 @@ struct ApiResponsePlayers {
}
#[derive(Deserialize, Debug)]
#[allow(dead_code)]
struct Motd {
raw: Vec<String>,
clean: Vec<String>,
@ -26,6 +27,7 @@ struct Motd {
}
#[derive(Debug)]
#[allow(dead_code)]
pub struct OnlineResponse {
searchable_name: String,
reported_name: String,
@ -47,9 +49,18 @@ impl ServerOnlineResponse for OnlineResponse {
fn version(&self) -> &String {
&self.version
}
fn readable_name(&self) -> &String {
&self.clean_name
}
fn searchable_name(&self) -> &String {
&self.searchable_name
}
}
pub struct Server {
#[allow(dead_code)]
token: String,
addr: Url,
}
@ -91,9 +102,9 @@ impl ServerInfo for Server {
true => {
let motd = json.motd.as_ref().unwrap();
self::ServerResponse::Online(OnlineResponse {
searchable_name: motd.clean.get(0).unwrap().into(),
reported_name: motd.clean.get(0).unwrap().into(),
clean_name: motd.clean.get(0).unwrap().into(),
searchable_name: self.addr.host().unwrap().to_string(),
reported_name: motd.clean.first().unwrap().into(),
clean_name: motd.clean.first().unwrap().into(),
players_online: json.players.unwrap().online,
player_limit: json.players.unwrap().max,
version: json.version.unwrap(),
@ -101,7 +112,6 @@ impl ServerInfo for Server {
}
false => ServerResponse::Offline,
}
}
}
}

View File

@ -1,17 +1,30 @@
mod handlers;
mod types;
use crate::{handlers::minecraft, types::ServerInfo};
use tokio;
use crate::{
handlers::minecraft,
types::{ServerInfo, ServerOnlineResponse, ServerResponse},
};
#[tokio::main]
async fn main() {
println!("Hello world!");
let mc = minecraft::Server::new(
"foo".into(),
"http://dawn.shibedrill.site".try_into().unwrap(),
);
let results = mc.poll().await;
println!("{:#?}", results);
match results {
ServerResponse::Error(err) => println!("Error: {}", err),
ServerResponse::Offline => println!("Offline"),
ServerResponse::Online(online_info) => {
println!(
"Name: {}\nAddress: {}\nVersion: {}\nPlayers: {}/{}",
online_info.readable_name(),
online_info.searchable_name(),
online_info.version(),
online_info.players_online(),
online_info.player_limit()
)
}
}
}

View File

@ -1,4 +1,3 @@
use std::net::IpAddr;
use url::Url;
#[derive(Debug)]
@ -12,8 +11,11 @@ pub trait ServerOnlineResponse {
fn players_online(&self) -> u64;
fn player_limit(&self) -> u64;
fn version(&self) -> &String;
fn searchable_name(&self) -> &String;
fn readable_name(&self) -> &String;
}
#[allow(dead_code)]
pub trait ServerInfo {
fn new(token: String, addr: Url) -> Self;