1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-21 18:44:19 +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",
"rand",
"regex",
"reqwest 0.12.5",
"reqwest",
"serde",
"teloxide",
"tokio",

View file

@ -40,7 +40,7 @@ parse_datetime = "0.6.0"
regex = "1.10.5"
once_cell = "1.19.0"
reqwest = { version = "0.12.5", features = ["json"] }
serde = { version = "1.0.204", features = ["serde_derive"] }
serde = { version = "1.0.204", features = ["derive"] }
[[bin]]
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 answer;
mod reminder;
mod dog;
mod cat;
#[derive(Debug, Clone, PartialEq, Eq, BotCommands)]
@ -34,6 +35,8 @@ pub enum Command {
Answer(String),
#[command(description = "Ricorda la chat di qualcosa che avverrà in futuro. Non persiste ai riavvii del bot.")]
Reminder(reminder::ReminderArgs),
#[command(description = "Invia un cane casuale in chat.")]
Dog,
#[command(description = "Invia un gatto casuale in chat.")]
Cat,
}
@ -66,6 +69,7 @@ impl Command {
Command::WhoAmI => whoami::handler(&bot, &message).await,
Command::Answer(_) => answer::handler(&bot, &message).await,
Command::Reminder(args) => reminder::handler(&bot, &message, args).await,
Command::Dog => dog::handler(&bot, &message).await,
Command::Cat => cat::handler(&bot, &message).await,
};