diff options
| author | uku <[email protected]> | 2023-10-13 11:11:03 +0200 |
|---|---|---|
| committer | seth <[email protected]> | 2023-10-13 13:05:37 -0400 |
| commit | 05e0831f7926dd4afda8e72c6ea5aa7a466b6bea (patch) | |
| tree | a6e3a4b8c8c636e9d60b9c1b980e909d9b306d9d /src/commands/random_shiggy.rs | |
| parent | d8d0c15a1a6f3abd9915eb2ac6807d72aa4f3171 (diff) | |
add random_shiggy command
Diffstat (limited to 'src/commands/random_shiggy.rs')
| -rw-r--r-- | src/commands/random_shiggy.rs | 40 |
1 files changed, 40 insertions, 0 deletions
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!") +} |
