mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-21 18:44:19 +00:00
⚙️ Prima versione comando Answer
This commit is contained in:
parent
ade4973fc4
commit
2db26854c9
2 changed files with 128 additions and 0 deletions
124
src/telegram/commands/answer.rs
Normal file
124
src/telegram/commands/answer.rs
Normal file
|
@ -0,0 +1,124 @@
|
|||
use std::hash::{Hash, Hasher};
|
||||
use anyhow::{Context};
|
||||
use chrono::Datelike;
|
||||
use rand::SeedableRng;
|
||||
use rand::seq::SliceRandom;
|
||||
use teloxide::Bot;
|
||||
use teloxide::payloads::SendMessageSetters;
|
||||
use teloxide::prelude::{Message, Requester};
|
||||
use crate::telegram::commands::{CommandResult};
|
||||
|
||||
// Cerchiamo di tenere bilanciate le tre colonne, o almeno le prime due.
|
||||
// Se avete un'idea ma metterebbe troppe opzioni in un'unica categoria, mettetela sotto commento.
|
||||
const ANSWERS: [&str; 60] = [
|
||||
// risposte "sì": 20
|
||||
"🔵 Sì.",
|
||||
"🔵 Decisamente sì!",
|
||||
"🔵 Uhm, secondo me sì.",
|
||||
"🔵 Sì! Sì! SÌ!",
|
||||
"🔵 Yup.",
|
||||
"🔵 Direi proprio di sì.",
|
||||
"🔵 Assolutamente sì.",
|
||||
"🔵 Ma certo!",
|
||||
"🔵 Esatto!",
|
||||
"🔵 Senz'altro!",
|
||||
"🔵 Ovviamente.",
|
||||
"🔵 Questa domanda ha risposta affermativa.",
|
||||
"🔵 Hell yeah.",
|
||||
"🔵 YES! YES! YES!",
|
||||
"🔵 yusssssss",
|
||||
"🔵 Non vedo perchè no",
|
||||
"🔵 Ha senso, ha perfettamente senso, nulla da obiettare, ha senso.",
|
||||
"🔵 Yos!",
|
||||
"🔵 Sì, ma tienilo segreto...",
|
||||
"🔵 [RADIO] Affermativo.",
|
||||
|
||||
// risposte "no": 20
|
||||
"❌ No.",
|
||||
"❌ Decisamente no!",
|
||||
"❌ Uhm, secondo me sì. No, aspetta, ci ho ripensato. È un no.",
|
||||
"❌ No, no, e ancora NO!",
|
||||
"❌ Nope.",
|
||||
"❌ Direi proprio di no.",
|
||||
"❌ Assolutamente no.",
|
||||
"❌ Certo che no!",
|
||||
"❌ Neanche per idea!",
|
||||
"❌ Neanche per sogno!",
|
||||
"❌ Niente affatto!",
|
||||
"❌ Questa domanda ha risposta negativa.",
|
||||
"❌ Hell no.",
|
||||
"❌ NO! NO! NO!",
|
||||
"❌ lolno",
|
||||
"❌ NEIN NEIN NEIN NEIN",
|
||||
"❌ Delet dis",
|
||||
"❌ Nopety nope!",
|
||||
"❌ No, ma tienilo segreto.",
|
||||
"❌ [RADIO] Negativo.",
|
||||
|
||||
// risposte "boh": 20
|
||||
"❔ Boh.",
|
||||
"❔ E io che ne so?!",
|
||||
"❔ Non so proprio rispondere.",
|
||||
"❔ Non lo so...",
|
||||
"❔ Mi avvalgo della facoltà di non rispondere.",
|
||||
"❔ Non parlerò senza il mio avvocato!",
|
||||
"❔ Dunno.",
|
||||
"❔ Perché lo chiedi a me?",
|
||||
"❔ Ah, non lo so io!",
|
||||
r"❔ ¯\_(ツ)_/¯",
|
||||
"❔ No idea.",
|
||||
"❔ Dunno.",
|
||||
"❔ Boooooh!",
|
||||
"❔ Non ne ho la più pallida idea.",
|
||||
"❔ No comment.",
|
||||
"❔ maibi",
|
||||
"❔ maibi not",
|
||||
"❔ idk dude",
|
||||
"❔ Non mi è permesso condividere questa informazione.",
|
||||
"❔ [RADIO] Mantengo la posizione.",
|
||||
];
|
||||
|
||||
struct FortuneKey {
|
||||
now: chrono::NaiveDate,
|
||||
}
|
||||
|
||||
impl Hash for FortuneKey {
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
let now: i32 = self.today.num_days_from_ce();
|
||||
|
||||
state.write_i32(now);
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn handler(bot: &Bot, message: &Message) -> CommandResult {
|
||||
let now = chrono::Local::now().date_naive();
|
||||
|
||||
let key = FortuneKey {now};
|
||||
|
||||
let mut hasher = std::hash::DefaultHasher::new();
|
||||
key.hash(&mut hasher);
|
||||
let hash = hasher.finish()
|
||||
.to_le_bytes()
|
||||
.into_iter()
|
||||
.cycle()
|
||||
.take(32)
|
||||
.collect::<Vec<u8>>()
|
||||
.try_into();
|
||||
if hash.is_err() {
|
||||
anyhow::bail!("Non è stato possibile determinare una risposta.");
|
||||
}
|
||||
let hash = hash.unwrap();
|
||||
|
||||
let mut rng = rand::rngs::SmallRng::from_seed(hash);
|
||||
|
||||
let answer = ANSWERS.choose(&mut rng)
|
||||
.context("Non è stato possibile selezionare una risposta.")?;
|
||||
|
||||
let _reply = bot
|
||||
.send_message(message.chat.id, answer.to_string())
|
||||
.reply_to_message_id(message.id)
|
||||
.await
|
||||
.context("Non è stato possibile inviare la risposta.")?;
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -15,6 +15,7 @@ mod fortune;
|
|||
mod echo;
|
||||
mod help;
|
||||
mod whoami;
|
||||
mod answer;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, BotCommands)]
|
||||
#[command(rename_rule = "lowercase")]
|
||||
|
@ -29,6 +30,8 @@ pub(self) enum Command {
|
|||
Echo(String),
|
||||
#[command(description = "Controlla a che account RYG è associato il tuo account Telegram.")]
|
||||
WhoAmI,
|
||||
#[command(description = "Rispondi ad una domanda.")]
|
||||
Answer(String),
|
||||
}
|
||||
|
||||
async fn handle_command(bot: Bot, command: Command, message: Message) -> CommandResult {
|
||||
|
@ -43,6 +46,7 @@ async fn handle_command(bot: Bot, command: Command, message: Message) -> Command
|
|||
Command::Fortune => fortune::handler(&bot, &message).await,
|
||||
Command::Echo(text) => echo::handler(&bot, &message, &text).await,
|
||||
Command::WhoAmI => whoami::handler(&bot, &message).await,
|
||||
Command::Answer(question) => answer::handler(&bot, &message).await,
|
||||
};
|
||||
|
||||
if result.is_ok() {
|
||||
|
|
Loading…
Reference in a new issue