From f224ccfbdfe5a63315dffe6c4a9f02f349f4af06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Czy=C5=BC?= Date: Sun, 4 Aug 2024 21:26:45 +0200 Subject: [PATCH] reduced ai timeout, impl uptime --- Cargo.lock | 1 + Cargo.toml | 1 + src/commands/tools.rs | 4 +-- src/commands/tools/ai.rs | 2 +- src/commands/tools/uptime.rs | 59 ++++++++++++++++++++++-------------- src/main.rs | 13 ++++++-- 6 files changed, 52 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9e56dad..505d58a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1355,6 +1355,7 @@ dependencies = [ "fancy-regex", "json", "lib-spotify-parser", + "once_cell", "openssl", "owoify", "poise", diff --git a/Cargo.toml b/Cargo.toml index b0212c1..e32a750 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,3 +44,4 @@ tracing = "0.1.40" tracing-futures = "0.2.5" tracing-subscriber = "0.3.18" url = "2.5.2" +once_cell = "1.19.0" diff --git a/src/commands/tools.rs b/src/commands/tools.rs index 495cdaa..40721f2 100644 --- a/src/commands/tools.rs +++ b/src/commands/tools.rs @@ -10,7 +10,7 @@ pub mod posix; pub mod qr; pub mod register; pub mod taf; -// pub mod uptime; +pub mod uptime; pub mod verse; pub mod weather; @@ -26,6 +26,6 @@ pub use posix::posix; pub use qr::qr; pub use register::register; pub use taf::taf; -// pub use uptime::uptime; +pub use uptime::uptime; pub use verse::verse; pub use weather::weather; diff --git a/src/commands/tools/ai.rs b/src/commands/tools/ai.rs index 22e32c2..bae52a6 100644 --- a/src/commands/tools/ai.rs +++ b/src/commands/tools/ai.rs @@ -35,7 +35,7 @@ pub async fn ai( response = rng.gen_range(0..iamsorry.len()); }; - sleep(Duration::from_secs(3)); + sleep(Duration::from_secs(1)); ctx.send( CreateReply::default().embed( diff --git a/src/commands/tools/uptime.rs b/src/commands/tools/uptime.rs index 0cef651..6118182 100644 --- a/src/commands/tools/uptime.rs +++ b/src/commands/tools/uptime.rs @@ -1,35 +1,48 @@ +use once_cell::sync::Lazy; use poise::CreateReply; +use std::sync::Mutex; use crate::{commands::embeds::embed, Context, Error}; -// Currently unable to get information on how long the thread was running. -const PROCESS_UPTIME: i64 = 1000; +pub static PROCESS_UPTIME: Lazy> = + Lazy::new(|| Mutex::new(std::time::SystemTime::now())); /// Checks how long the bot has been running #[poise::command(prefix_command, slash_command, category = "Tools")] pub async fn uptime(ctx: Context<'_>) -> Result<(), Error> { - let uptime = PROCESS_UPTIME; - let days = uptime / (24 * 60 * 60); - let hours = (uptime % (24 * 60 * 60)) / 3600; - let minutes = (uptime % 60 * 60) / 60; - let seconds = uptime % 60; + let start = PROCESS_UPTIME.lock().unwrap().clone(); + let uptime = std::time::SystemTime::now().duration_since(start).unwrap(); - ctx.send( - CreateReply::default().embed( - embed( - ctx, - "I have been up and awake for", - &format!("{} seconds", uptime), - &format!( - "{} days, {} hours, {} minutes and {} seconds", - days, hours, minutes, seconds - ), - ) - .await - .unwrap(), - ), - ) - .await?; + let (days, hours, minutes, seconds) = ( + uptime.as_secs() / 86400, + (uptime.as_secs() / 3600) % 24, + (uptime.as_secs() / 60) % 60, + uptime.as_secs() % 60, + ); + + let mut message = format!( + "I have been awake for {} days, {} hours, {} minutes and {} seconds!", + days, hours, minutes, seconds + ); + + if days != 0 { + message = format!("I have been awake for {} days!", days); + } + + if days == 0 && hours != 0 { + message = format!("I have been awake for {} hours!", hours); + } + + if days == 0 && hours == 0 && minutes != 0 { + message = format!("I have been awake for {} minutes!", minutes); + } + + if days == 0 && hours == 0 && minutes == 0 && seconds != 0 { + message = format!("I have been awake for {} seconds!", seconds); + } + + ctx.send(CreateReply::default().embed(embed(ctx, "Uptime", "", &message).await.unwrap())) + .await?; Ok(()) } diff --git a/src/main.rs b/src/main.rs index 35c2cf0..f7f47bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use commands::tools::uptime::PROCESS_UPTIME; use poise::serenity_prelude::{self as serenity, ActivityData}; use reqwest::Client as HttpClient; use songbird::SerenityInit; @@ -37,6 +38,8 @@ async fn main() { tracing_subscriber::fmt::init(); dotenv::dotenv().expect("Failed to load .env file."); + let _ = PROCESS_UPTIME.lock().unwrap().clone(); + let token = std::env::var("DISCORD_TOKEN").expect("Environment variable `DISCORD_TOKEN` not found!"); let prefix = std::env::var("PREFIX").expect("Environment variable `PREFIX` not found!"); @@ -70,7 +73,7 @@ async fn main() { tools::qr(), tools::register(), tools::taf(), - // tools::uptime(), + tools::uptime(), tools::verse(), tools::weather(), ]; @@ -123,7 +126,7 @@ async fn main() { }; let framework = poise::Framework::builder() - .setup(move |ctx, ready, _framework| { + .setup(move |ctx, ready, framework| { Box::pin(async move { info!( "{} [{}] connected successfully!", @@ -131,6 +134,12 @@ async fn main() { ); ctx.set_activity(Some(ActivityData::listening(prefix + "help"))); // poise::builtins::register_globally(ctx, &framework.options().commands).await?; + poise::builtins::register_in_guild( + ctx, + &framework.options().commands, + 512680330495524873.into(), + ) + .await?; Ok(Data {}) })