api: use error_for_status_ref()
This commit is contained in:
parent
3c4cf67bbf
commit
e847ea0ad0
4 changed files with 47 additions and 82 deletions
|
@ -1,24 +1,20 @@
|
||||||
use crate::api::REQWEST_CLIENT;
|
use crate::api::REQWEST_CLIENT;
|
||||||
|
|
||||||
use eyre::{eyre, Result};
|
use eyre::Result;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use reqwest::StatusCode;
|
|
||||||
|
|
||||||
const DADJOKE: &str = "https://icanhazdadjoke.com";
|
const DADJOKE: &str = "https://icanhazdadjoke.com";
|
||||||
|
|
||||||
pub async fn get_joke() -> Result<String> {
|
pub async fn get_joke() -> Result<String> {
|
||||||
let req = REQWEST_CLIENT
|
debug!("Making request to {DADJOKE}");
|
||||||
|
|
||||||
|
let resp = REQWEST_CLIENT
|
||||||
.get(DADJOKE)
|
.get(DADJOKE)
|
||||||
.header("Accept", "text/plain")
|
.header("Accept", "text/plain")
|
||||||
.build()?;
|
.send()
|
||||||
|
.await?;
|
||||||
|
resp.error_for_status_ref()?;
|
||||||
|
|
||||||
debug!("Making request to {}", req.url());
|
let joke = resp.text().await?;
|
||||||
let resp = REQWEST_CLIENT.execute(req).await?;
|
Ok(joke)
|
||||||
let status = resp.status();
|
|
||||||
|
|
||||||
if let StatusCode::OK = status {
|
|
||||||
Ok(resp.text().await?)
|
|
||||||
} else {
|
|
||||||
Err(eyre!("Couldn't get a joke!"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +1,31 @@
|
||||||
use crate::api::REQWEST_CLIENT;
|
use crate::api::REQWEST_CLIENT;
|
||||||
|
|
||||||
use eyre::{eyre, Context, Result};
|
use eyre::{Context, Result};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use poise::serenity_prelude::{MessageId, UserId};
|
use poise::serenity_prelude::{MessageId, UserId};
|
||||||
use reqwest::StatusCode;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
pub struct PluralKitMessage {
|
pub struct Message {
|
||||||
pub sender: String,
|
pub sender: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
const PLURAL_KIT: &str = "https://api.pluralkit.me/v2";
|
const PLURAL_KIT: &str = "https://api.pluralkit.me/v2";
|
||||||
const MESSAGES_ENDPOINT: &str = "/messages";
|
const MESSAGES: &str = "/messages";
|
||||||
|
|
||||||
pub async fn get_sender(message_id: MessageId) -> Result<UserId> {
|
pub async fn get_sender(message_id: MessageId) -> Result<UserId> {
|
||||||
let req = REQWEST_CLIENT
|
let url = format!("{PLURAL_KIT}{MESSAGES}/{message_id}");
|
||||||
.get(format!("{PLURAL_KIT}{MESSAGES_ENDPOINT}/{message_id}"))
|
|
||||||
.build()?;
|
|
||||||
|
|
||||||
debug!("Making request to {}", req.url());
|
debug!("Making request to {url}");
|
||||||
let resp = REQWEST_CLIENT.execute(req).await?;
|
let resp = REQWEST_CLIENT.get(url).send().await?;
|
||||||
let status = resp.status();
|
resp.error_for_status_ref()?;
|
||||||
|
|
||||||
if let StatusCode::OK = status {
|
let data: Message = resp.json().await?;
|
||||||
let data = resp.json::<PluralKitMessage>().await?;
|
let id: u64 =
|
||||||
let id: u64 = data.sender.parse().wrap_err_with(|| {
|
data.sender.parse().wrap_err_with(|| {
|
||||||
format!("Couldn't parse response from PluralKit as a UserId! Here's the response:\n{data:#?}")
|
format!("Couldn't parse response from PluralKit as a UserId! Here's the response:\n{data:#?}")
|
||||||
})?;
|
})?;
|
||||||
let sender = UserId::from(id);
|
let sender = UserId::from(id);
|
||||||
|
|
||||||
Ok(sender)
|
Ok(sender)
|
||||||
} else {
|
|
||||||
Err(eyre!(
|
|
||||||
"Failed to get PluralKit message information from {PLURAL_KIT}{MESSAGES_ENDPOINT}/{message_id} with {status}",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
use crate::api::REQWEST_CLIENT;
|
use crate::api::REQWEST_CLIENT;
|
||||||
|
|
||||||
use eyre::{eyre, Context, OptionExt, Result};
|
use eyre::{OptionExt, Result};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use reqwest::StatusCode;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
|
@ -14,23 +13,17 @@ pub struct MinecraftPackageJson {
|
||||||
pub uid: String,
|
pub uid: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
const PRISM_META: &str = "https://meta.prismlauncher.org/v1";
|
const META: &str = "https://meta.prismlauncher.org/v1";
|
||||||
const MINECRAFT_PACKAGEJSON_ENDPOINT: &str = "/net.minecraft/package.json";
|
const MINECRAFT_PACKAGEJSON: &str = "/net.minecraft/package.json";
|
||||||
|
|
||||||
pub async fn get_latest_minecraft_version() -> Result<String> {
|
pub async fn get_latest_minecraft_version() -> Result<String> {
|
||||||
let req = REQWEST_CLIENT
|
let url = format!("{META}{MINECRAFT_PACKAGEJSON}");
|
||||||
.get(format!("{PRISM_META}{MINECRAFT_PACKAGEJSON_ENDPOINT}"))
|
|
||||||
.build()?;
|
|
||||||
|
|
||||||
debug!("Making request to {}", req.url());
|
debug!("Making request to {url}");
|
||||||
let resp = REQWEST_CLIENT.execute(req).await?;
|
let resp = REQWEST_CLIENT.get(url).send().await?;
|
||||||
let status = resp.status();
|
resp.error_for_status_ref()?;
|
||||||
|
|
||||||
if let StatusCode::OK = status {
|
let data: MinecraftPackageJson = resp.json().await?;
|
||||||
let data = resp
|
|
||||||
.json::<MinecraftPackageJson>()
|
|
||||||
.await
|
|
||||||
.wrap_err("Couldn't parse Minecraft versions!")?;
|
|
||||||
|
|
||||||
let version = data
|
let version = data
|
||||||
.recommended
|
.recommended
|
||||||
|
@ -38,9 +31,4 @@ pub async fn get_latest_minecraft_version() -> Result<String> {
|
||||||
.ok_or_eyre("Couldn't find latest version of Minecraft!")?;
|
.ok_or_eyre("Couldn't find latest version of Minecraft!")?;
|
||||||
|
|
||||||
Ok(version.clone())
|
Ok(version.clone())
|
||||||
} else {
|
|
||||||
Err(eyre!(
|
|
||||||
"Failed to get latest Minecraft version from {PRISM_META}{MINECRAFT_PACKAGEJSON_ENDPOINT} with {status}",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
use crate::api::REQWEST_CLIENT;
|
use crate::api::REQWEST_CLIENT;
|
||||||
|
|
||||||
use eyre::{eyre, Context, Result};
|
use eyre::{Context, Result};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use reqwest::StatusCode;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
|
@ -13,34 +12,24 @@ pub struct Response {
|
||||||
}
|
}
|
||||||
|
|
||||||
const RORY: &str = "https://rory.cat";
|
const RORY: &str = "https://rory.cat";
|
||||||
const ENDPOINT: &str = "/purr";
|
const PURR: &str = "/purr";
|
||||||
|
|
||||||
pub async fn get(id: Option<u64>) -> Result<Response> {
|
pub async fn get(id: Option<u64>) -> Result<Response> {
|
||||||
let target = id.map(|id| id.to_string()).unwrap_or_default();
|
let target = id.map(|id| id.to_string()).unwrap_or_default();
|
||||||
|
let url = format!("{RORY}{PURR}/{target}");
|
||||||
|
|
||||||
let req = REQWEST_CLIENT
|
debug!("Making request to {url}");
|
||||||
.get(format!("{RORY}{ENDPOINT}/{target}"))
|
|
||||||
.build()
|
|
||||||
.wrap_err("Couldn't build reqwest client!")?;
|
|
||||||
|
|
||||||
debug!("Making request to {}", req.url());
|
|
||||||
let resp = REQWEST_CLIENT
|
let resp = REQWEST_CLIENT
|
||||||
.execute(req)
|
.get(format!("{RORY}{PURR}/{target}"))
|
||||||
.await
|
.send()
|
||||||
.wrap_err("Couldn't make request for rory!")?;
|
.await?;
|
||||||
|
resp.error_for_status_ref()?;
|
||||||
|
|
||||||
let status = resp.status();
|
let data: Response = resp
|
||||||
|
.json()
|
||||||
if let StatusCode::OK = status {
|
|
||||||
let data = resp
|
|
||||||
.json::<Response>()
|
|
||||||
.await
|
.await
|
||||||
.wrap_err("Couldn't parse the rory response!")?;
|
.wrap_err("Couldn't parse the rory response!")?;
|
||||||
|
|
||||||
Ok(data)
|
Ok(data)
|
||||||
} else {
|
|
||||||
Err(eyre!(
|
|
||||||
"Failed to get rory from {RORY}{ENDPOINT}/{target} with {status}",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue