From 38bfcf62a932ddbbdcd7e58d44108c04492d4d67 Mon Sep 17 00:00:00 2001 From: toast Date: Sat, 16 Mar 2024 09:41:33 +1100 Subject: [PATCH] Create internals dir and optimize usage of Reqwest --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/commands/gameserver.rs | 2 +- src/commands/status.rs | 23 +++++++---------------- src/commands/uptime.rs | 4 ++-- src/internals/http.rs | 30 ++++++++++++++++++++++++++++++ src/internals/mod.rs | 2 ++ src/{ => internals}/utils.rs | 0 src/main.rs | 4 ++-- 9 files changed, 46 insertions(+), 23 deletions(-) create mode 100644 src/internals/http.rs create mode 100644 src/internals/mod.rs rename src/{ => internals}/utils.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 9a32b1f..275f0fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -837,7 +837,7 @@ dependencies = [ [[package]] name = "kon" -version = "0.1.20" +version = "0.2.0" dependencies = [ "cargo_toml", "gamedig", diff --git a/Cargo.toml b/Cargo.toml index 481368f..c2ca98b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kon" -version = "0.1.20" +version = "0.2.0" rust-version = "1.75" edition = "2021" diff --git a/src/commands/gameserver.rs b/src/commands/gameserver.rs index fac8928..c78d188 100644 --- a/src/commands/gameserver.rs +++ b/src/commands/gameserver.rs @@ -1,6 +1,6 @@ use crate::{ Error, - utils::EMBED_COLOR, + internals::utils::EMBED_COLOR, models::gameservers::Gameservers }; diff --git a/src/commands/status.rs b/src/commands/status.rs index b6c3bad..d3d794b 100644 --- a/src/commands/status.rs +++ b/src/commands/status.rs @@ -2,18 +2,14 @@ use crate::{ Error, models::gameservers::Gameservers, commands::gameserver::ac_server_name, - utils::BOT_VERSION, - utils::EMBED_COLOR + internals::utils::EMBED_COLOR, + internals::http::HttpClient }; use std::{ collections::HashMap, env::var }; -use reqwest::{ - Client, - header::USER_AGENT -}; use tokio::join; use poise::CreateReply; use serenity::builder::CreateEmbed; @@ -45,11 +41,9 @@ struct MinecraftPlayers { } async fn pms_serverstatus(url: &str) -> Result, Error> { - let client = Client::new(); - let req = client.get(url) - .header(USER_AGENT, format!("Kon/{}/Rust", &**BOT_VERSION)) - .send() - .await?; + let client = HttpClient::new(); + let req = client.get(url).await?; + let response = req.json::>().await?; let servers = response["data"].as_array().unwrap()[0]["servers_statuses"]["data"].as_array().unwrap().clone(); @@ -57,11 +51,8 @@ async fn pms_serverstatus(url: &str) -> Result, Error> { } async fn gs_query_minecraft(server_ip: &str) -> Result { - let client = Client::new(); - let req = client.get(format!("https://api.mcsrvstat.us/2/{}", server_ip)) - .header(USER_AGENT, format!("Kon/{}/Rust", &**BOT_VERSION)) - .send() - .await?; + let client = HttpClient::new(); + let req = client.get(&format!("https://api.mcsrvstat.us/2/{}", server_ip)).await?; if req.status().is_success() { let data: MinecraftQueryData = req.json().await?; diff --git a/src/commands/uptime.rs b/src/commands/uptime.rs index 3eeb0f4..c7928eb 100644 --- a/src/commands/uptime.rs +++ b/src/commands/uptime.rs @@ -1,6 +1,6 @@ use crate::{ Error, - utils::{ + internals::utils::{ format_duration, concat_message, BOT_VERSION @@ -35,7 +35,7 @@ pub async fn uptime(ctx: poise::Context<'_, (), Error>) -> Result<(), Error> { } let stat_msg = vec![ - format!("**{} {}**", _bot.name, &**BOT_VERSION), + format!("**{} {}**", _bot.name, BOT_VERSION.as_str()), format!(">>> System: `{}`", format_duration(sys_uptime)), format!("Process: `{}`", format_duration(proc_uptime)) ]; diff --git a/src/internals/http.rs b/src/internals/http.rs new file mode 100644 index 0000000..8ac5156 --- /dev/null +++ b/src/internals/http.rs @@ -0,0 +1,30 @@ +use std::sync::Arc; +use once_cell::sync::Lazy; +use reqwest::{ + Client, + header::USER_AGENT +}; + +static CUSTOM_USER_AGENT: Lazy = Lazy::new(|| + format!("Kon/{}/Rust", super::utils::BOT_VERSION.as_str()) +); + +pub struct HttpClient { + client: Arc +} + +impl HttpClient { + pub fn new() -> Self { + Self { + client: Arc::new(Client::new()) + } + } + + pub async fn get(&self, url: &str) -> Result { + let req = self.client.get(url) + .header(USER_AGENT, CUSTOM_USER_AGENT.as_str()) + .send() + .await?; + Ok(req) + } +} diff --git a/src/internals/mod.rs b/src/internals/mod.rs new file mode 100644 index 0000000..20bf31e --- /dev/null +++ b/src/internals/mod.rs @@ -0,0 +1,2 @@ +pub mod utils; +pub mod http; diff --git a/src/utils.rs b/src/internals/utils.rs similarity index 100% rename from src/utils.rs rename to src/internals/utils.rs diff --git a/src/main.rs b/src/main.rs index 9defd44..a48c09a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ mod commands; mod controllers; mod models; -mod utils; +mod internals; use poise::serenity_prelude::{self as serenity}; use std::{ @@ -33,7 +33,7 @@ async fn on_ready( let message = CreateMessage::new(); let ready_embed = CreateEmbed::new() - .color(utils::EMBED_COLOR) + .color(internals::utils::EMBED_COLOR) .thumbnail(ready.user.avatar_url().unwrap_or_default()) .author(CreateEmbedAuthor::new(format!("{} is ready!", ready.user.name)).clone());