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:
parent
7bbadecb12
commit
3892070c5b
4 changed files with 44 additions and 2 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1352,7 +1352,7 @@ dependencies = [
|
|||
"pretty_env_logger",
|
||||
"rand",
|
||||
"regex",
|
||||
"reqwest 0.12.5",
|
||||
"reqwest",
|
||||
"serde",
|
||||
"teloxide",
|
||||
"tokio",
|
||||
|
|
|
@ -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"
|
||||
|
|
38
src/services/telegram/commands/dog.rs
Normal file
38
src/services/telegram/commands/dog.rs
Normal 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(())
|
||||
}
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue