summaryrefslogtreecommitdiff
path: root/src/commands/random_shiggy.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/random_shiggy.rs')
-rw-r--r--src/commands/random_shiggy.rs40
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!")
+}