mirror of
https://github.com/eRgo35/lyra.git
synced 2026-02-04 12:26:10 +01:00
79 lines
2.3 KiB
Rust
79 lines
2.3 KiB
Rust
use crate::{
|
|
commands::embeds::{embed, error_embed},
|
|
Context, Error,
|
|
};
|
|
use poise::CreateReply;
|
|
use serde::{Deserialize, Serialize};
|
|
use url::form_urlencoded;
|
|
|
|
/// Reference Bible by verse
|
|
#[poise::command(prefix_command, slash_command, category = "Tools")]
|
|
pub async fn verse(
|
|
ctx: Context<'_>,
|
|
#[description = "Latin?"]
|
|
#[flag]
|
|
latin: bool,
|
|
#[description = "BOOK+CHAPTER:VERSE"]
|
|
#[rest]
|
|
verse: String,
|
|
) -> Result<(), Error> {
|
|
let data: String = form_urlencoded::byte_serialize(verse.as_bytes()).collect();
|
|
let translation = if latin { "clementine" } else { "web" };
|
|
let client = reqwest::Client::new();
|
|
let response = client
|
|
.get(format!(
|
|
"https://bible-api.com/{}?translation={}",
|
|
data, translation
|
|
))
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
match response.status() {
|
|
reqwest::StatusCode::OK => {
|
|
match response.json::<APIResponse>().await {
|
|
Ok(parsed) => {
|
|
if parsed.text.len() > 4000 {
|
|
ctx.send(
|
|
CreateReply::default()
|
|
.embed(error_embed(ctx, "Quoted text is too long!").await.unwrap()),
|
|
)
|
|
.await?;
|
|
return Ok(());
|
|
}
|
|
ctx.send(
|
|
CreateReply::default().embed(
|
|
embed(
|
|
ctx,
|
|
&parsed.translation_name,
|
|
&parsed.text,
|
|
&parsed.reference,
|
|
)
|
|
.await
|
|
.unwrap(),
|
|
),
|
|
)
|
|
.await?;
|
|
}
|
|
Err(err) => println!("Something is messed up! {:?}", err),
|
|
};
|
|
}
|
|
reqwest::StatusCode::UNAUTHORIZED => {
|
|
println!("Unauthorized.. Uoops!!");
|
|
}
|
|
error => {
|
|
println!("Something went wrong: {:?}", error);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
struct APIResponse {
|
|
reference: String,
|
|
text: String,
|
|
translation_name: String,
|
|
translation_note: String,
|
|
}
|