From 5b16c14b4534cd47a853a56e8e9b85853956dc81 Mon Sep 17 00:00:00 2001 From: seth Date: Mon, 4 Dec 2023 09:09:49 -0500 Subject: [PATCH] feat: set presence info on ready again Signed-off-by: seth --- src/api/dadjoke.rs | 2 +- src/api/mod.rs | 1 + src/api/prism_meta.rs | 41 +++++++++++++++++++++++++++++++++++++++ src/api/rory.rs | 2 +- src/handlers/event/mod.rs | 14 ++++++++++--- 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/api/prism_meta.rs diff --git a/src/api/dadjoke.rs b/src/api/dadjoke.rs index 8a9f641..d3ac9c6 100644 --- a/src/api/dadjoke.rs +++ b/src/api/dadjoke.rs @@ -9,7 +9,7 @@ const DADJOKE: &str = "https://icanhazdadjoke.com"; pub async fn get_joke() -> Result { let req = REQWEST_CLIENT.get(DADJOKE).build()?; - info!("making request to {}", req.url()); + info!("Making request to {}", req.url()); let resp = REQWEST_CLIENT.execute(req).await?; let status = resp.status(); diff --git a/src/api/mod.rs b/src/api/mod.rs index 44df020..149b974 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,6 +1,7 @@ use once_cell::sync::Lazy; pub mod dadjoke; +pub mod prism_meta; pub mod rory; pub static USER_AGENT: Lazy = Lazy::new(|| { diff --git a/src/api/prism_meta.rs b/src/api/prism_meta.rs new file mode 100644 index 0000000..95dacaa --- /dev/null +++ b/src/api/prism_meta.rs @@ -0,0 +1,41 @@ +use crate::api::REQWEST_CLIENT; + +use color_eyre::eyre::{eyre, Result}; +use log::*; +use reqwest::StatusCode; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct MinecraftPackageJson { + pub format_version: u8, + pub name: String, + pub recommended: Vec, + pub uid: String, +} + +const PRISM_META: &str = "https://meta.prismlauncher.org/v1"; +const MINECRAFT_PACKAGEJSON_ENDPOINT: &str = "/net.minecraft/package.json"; + +pub async fn get_latest_minecraft_version() -> Result { + let req = REQWEST_CLIENT + .get(format!("{PRISM_META}{MINECRAFT_PACKAGEJSON_ENDPOINT}")) + .build()?; + + info!("Making request to {}", req.url()); + let resp = REQWEST_CLIENT.execute(req).await?; + let status = resp.status(); + + if let StatusCode::OK = status { + let data = resp.json::().await?; + let version = data + .recommended + .first() + .ok_or_else(|| eyre!("Couldn't find first recommended version!"))?; + + Ok(version.clone()) + } else { + Err(eyre!( + "Failed to get latest Minecraft version from {PRISM_META}{MINECRAFT_PACKAGEJSON_ENDPOINT} with {status}", + )) + } +} diff --git a/src/api/rory.rs b/src/api/rory.rs index 6fd4bf9..9e56e8d 100644 --- a/src/api/rory.rs +++ b/src/api/rory.rs @@ -27,7 +27,7 @@ pub async fn get_rory(id: Option) -> Result { .get(format!("{RORY}{ENDPOINT}/{target}")) .build()?; - info!("making request to {}", req.url()); + info!("Making request to {}", req.url()); let resp = REQWEST_CLIENT.execute(req).await?; let status = resp.status(); diff --git a/src/handlers/event/mod.rs b/src/handlers/event/mod.rs index b953eae..8db6df5 100644 --- a/src/handlers/event/mod.rs +++ b/src/handlers/event/mod.rs @@ -1,7 +1,8 @@ -use crate::Data; +use crate::{api, Data}; use color_eyre::eyre::{Report, Result}; -use poise::serenity_prelude::Context; +use log::*; +use poise::serenity_prelude::{Activity, Context, OnlineStatus}; use poise::{Event, FrameworkContext}; mod delete; @@ -17,13 +18,20 @@ pub async fn handle( ) -> Result<()> { match event { Event::Ready { data_about_bot } => { - log::info!("Logged in as {}!", data_about_bot.user.name) + info!("Logged in as {}!", data_about_bot.user.name); + + let latest_minecraft_version = api::prism_meta::get_latest_minecraft_version().await?; + let activity = Activity::playing(format!("Minecraft {}", latest_minecraft_version)); + + info!("Setting presence to activity {activity:#?}"); + ctx.set_presence(Some(activity), OnlineStatus::Online).await; } Event::Message { new_message } => { // ignore new messages from bots // NOTE: the webhook_id check allows us to still respond to PK users if new_message.author.bot && new_message.webhook_id.is_none() { + debug!("Ignoring message {} from bot", new_message.id); return Ok(()); }