1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-22 11:04:21 +00:00

Add /dog command (#5)

This commit is contained in:
Steffo 2024-07-14 09:45:48 +02:00 committed by GitHub
parent 7bbadecb12
commit 3892070c5b
Signed by: github
GPG key ID: B5690EEEBB952194
4 changed files with 44 additions and 2 deletions

2
Cargo.lock generated
View file

@ -1352,7 +1352,7 @@ dependencies = [
"pretty_env_logger", "pretty_env_logger",
"rand", "rand",
"regex", "regex",
"reqwest 0.12.5", "reqwest",
"serde", "serde",
"teloxide", "teloxide",
"tokio", "tokio",

View file

@ -40,7 +40,7 @@ parse_datetime = "0.6.0"
regex = "1.10.5" regex = "1.10.5"
once_cell = "1.19.0" once_cell = "1.19.0"
reqwest = { version = "0.12.5", features = ["json"] } reqwest = { version = "0.12.5", features = ["json"] }
serde = { version = "1.0.204", features = ["serde_derive"] } serde = { version = "1.0.204", features = ["derive"] }
[[bin]] [[bin]]
name = "royalnet" name = "royalnet"

View file

@ -0,0 +1,38 @@
use anyhow::Context;
use reqwest::Url;
use teloxide::Bot;
use teloxide::payloads::SendPhotoSetters;
use teloxide::requests::Requester;
use teloxide::types::{InputFile, Message};
use serde::Deserialize;
use super::{CommandResult};
const DOG_API_URL: &str = "https://dog.ceo/api/breeds/image/random";
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
struct DogQueryResponse {
// status: String,
pub message: String,
}
pub async fn handler(bot: &Bot, message: &Message) -> CommandResult {
let response = reqwest::get(DOG_API_URL).await
.context("Non è stato possibile richiedere un cane all'API.")?
.json::<DogQueryResponse>().await
.context("Il cane ricevuto in risposta dall'API è indecifrabile, quindi non è stato possibile riceverlo.")?;
let url: Url = response.message.parse()
.context("L'URL del cane ricevuto in risposta dall'API è malformato, quindi non è stato possibile riceverlo.")?;
let input = InputFile::url(url);
let _reply = bot
.send_photo(message.chat.id, input)
.reply_to_message_id(message.id)
.await
.context("Non è stato possibile inviare un cane in risposta a questo messaggio.")?;
Ok(())
}

View file

@ -15,6 +15,7 @@ mod help;
mod whoami; mod whoami;
mod answer; mod answer;
mod reminder; mod reminder;
mod dog;
mod cat; mod cat;
#[derive(Debug, Clone, PartialEq, Eq, BotCommands)] #[derive(Debug, Clone, PartialEq, Eq, BotCommands)]
@ -34,6 +35,8 @@ pub enum Command {
Answer(String), Answer(String),
#[command(description = "Ricorda la chat di qualcosa che avverrà in futuro. Non persiste ai riavvii del bot.")] #[command(description = "Ricorda la chat di qualcosa che avverrà in futuro. Non persiste ai riavvii del bot.")]
Reminder(reminder::ReminderArgs), Reminder(reminder::ReminderArgs),
#[command(description = "Invia un cane casuale in chat.")]
Dog,
#[command(description = "Invia un gatto casuale in chat.")] #[command(description = "Invia un gatto casuale in chat.")]
Cat, Cat,
} }
@ -66,6 +69,7 @@ impl Command {
Command::WhoAmI => whoami::handler(&bot, &message).await, Command::WhoAmI => whoami::handler(&bot, &message).await,
Command::Answer(_) => answer::handler(&bot, &message).await, Command::Answer(_) => answer::handler(&bot, &message).await,
Command::Reminder(args) => reminder::handler(&bot, &message, args).await, Command::Reminder(args) => reminder::handler(&bot, &message, args).await,
Command::Dog => dog::handler(&bot, &message).await,
Command::Cat => cat::handler(&bot, &message).await, Command::Cat => cat::handler(&bot, &message).await,
}; };