diff options
Diffstat (limited to 'src/commands')
| -rw-r--r-- | src/commands/mod.rs | 1 | ||||
| -rw-r--r-- | src/commands/random_shiggy.rs | 40 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/commands/mod.rs b/src/commands/mod.rs index fb7ee4b..1640707 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -3,4 +3,5 @@ pub mod bottom; pub mod convert; pub mod copypasta; pub mod random_lore; +pub mod random_shiggy; pub mod random_teawie; diff --git a/src/commands/random_shiggy.rs b/src/commands/random_shiggy.rs new file mode 100644 index 0000000..b1f1511 --- /dev/null +++ b/src/commands/random_shiggy.rs @@ -0,0 +1,40 @@ +use crate::api::guzzle::REQWEST_CLIENT; +use reqwest::StatusCode; +use serde::Deserialize; +use serenity::builder::CreateApplicationCommand; +use serenity::model::prelude::application_command::CommandDataOption; + +const URL: &str = "https://safebooru.donmai.us/posts/random.json?tags=kemomimi-chan_(naga_u)+naga_u&only=file_url"; +const ERROR_MSG: &str = "couldn't get a shiggy"; + +#[derive(Deserialize)] +struct SafebooruResponse { + file_url: String, +} + +pub async fn run(_: &[CommandDataOption]) -> String { + let resp = match REQWEST_CLIENT + .execute(REQWEST_CLIENT.get(URL).build().unwrap()) + .await + { + Ok(r) => r, + Err(e) => return format!("{} ({:?})", ERROR_MSG, e), + }; + + match resp.status() { + StatusCode::OK => match resp.json::<SafebooruResponse>().await { + Ok(sr) => sr.file_url, + Err(e) => format!("{} ({:?})", ERROR_MSG, e), + }, + other => { + println!("{}", resp.text().await.unwrap()); + format!("{} ({:?})", ERROR_MSG, other) + } + } +} + +pub fn register(command: &mut CreateApplicationCommand) -> &mut CreateApplicationCommand { + command + .name("random_shiggy") + .description("get a random shiggy!") +} |
