feat: set presence info on ready again

Signed-off-by: seth <getchoo@tuta.io>
This commit is contained in:
seth 2023-12-04 09:09:49 -05:00
parent 1c168bd8ba
commit 5b16c14b45
No known key found for this signature in database
GPG key ID: D31BD0D494BBEE86
5 changed files with 55 additions and 5 deletions

View file

@ -9,7 +9,7 @@ const DADJOKE: &str = "https://icanhazdadjoke.com";
pub async fn get_joke() -> Result<String> { pub async fn get_joke() -> Result<String> {
let req = REQWEST_CLIENT.get(DADJOKE).build()?; 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 resp = REQWEST_CLIENT.execute(req).await?;
let status = resp.status(); let status = resp.status();

View file

@ -1,6 +1,7 @@
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
pub mod dadjoke; pub mod dadjoke;
pub mod prism_meta;
pub mod rory; pub mod rory;
pub static USER_AGENT: Lazy<String> = Lazy::new(|| { pub static USER_AGENT: Lazy<String> = Lazy::new(|| {

41
src/api/prism_meta.rs Normal file
View file

@ -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<String>,
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<String> {
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::<MinecraftPackageJson>().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}",
))
}
}

View file

@ -27,7 +27,7 @@ pub async fn get_rory(id: Option<u64>) -> Result<RoryResponse> {
.get(format!("{RORY}{ENDPOINT}/{target}")) .get(format!("{RORY}{ENDPOINT}/{target}"))
.build()?; .build()?;
info!("making request to {}", req.url()); info!("Making request to {}", req.url());
let resp = REQWEST_CLIENT.execute(req).await?; let resp = REQWEST_CLIENT.execute(req).await?;
let status = resp.status(); let status = resp.status();

View file

@ -1,7 +1,8 @@
use crate::Data; use crate::{api, Data};
use color_eyre::eyre::{Report, Result}; use color_eyre::eyre::{Report, Result};
use poise::serenity_prelude::Context; use log::*;
use poise::serenity_prelude::{Activity, Context, OnlineStatus};
use poise::{Event, FrameworkContext}; use poise::{Event, FrameworkContext};
mod delete; mod delete;
@ -17,13 +18,20 @@ pub async fn handle(
) -> Result<()> { ) -> Result<()> {
match event { match event {
Event::Ready { data_about_bot } => { 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 } => { Event::Message { new_message } => {
// ignore new messages from bots // ignore new messages from bots
// NOTE: the webhook_id check allows us to still respond to PK users // NOTE: the webhook_id check allows us to still respond to PK users
if new_message.author.bot && new_message.webhook_id.is_none() { if new_message.author.bot && new_message.webhook_id.is_none() {
debug!("Ignoring message {} from bot", new_message.id);
return Ok(()); return Ok(());
} }