34
src/bot/handlers/fun/chooser.rs
Normal file
34
src/bot/handlers/fun/chooser.rs
Normal file
@ -0,0 +1,34 @@
|
||||
use grammers_client::{Client, Update};
|
||||
use rand::seq::SliceRandom;
|
||||
|
||||
use crate::{bot::handlers::Handler, utils::messages::get_message};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Chooser;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl Handler for Chooser {
|
||||
async fn react(&self, _: &Client, update: &Update) -> anyhow::Result<()> {
|
||||
let Some(input_message) = get_message(update) else {
|
||||
return Ok(());
|
||||
};
|
||||
let response = input_message
|
||||
.text()
|
||||
.strip_prefix(".c")
|
||||
// Check if string is not empty.
|
||||
.filter(|a| !a.is_empty())
|
||||
// Split by commas.
|
||||
.map(|text| text.trim().split(',').collect::<Vec<_>>())
|
||||
// Choose random variant.
|
||||
.and_then(|collected| collected.choose(&mut rand::rngs::OsRng).copied());
|
||||
// It the string is chosen, reply to message with it.
|
||||
if let Some(answer) = response {
|
||||
input_message.reply(answer).await?;
|
||||
} else {
|
||||
input_message
|
||||
.reply("Я не смог понять из чего мне выбирать. Попробуй ещё раз.")
|
||||
.await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
pub mod blyaficator;
|
||||
pub mod chooser;
|
||||
pub mod greeter;
|
||||
pub mod magic_ball;
|
||||
pub mod repeator;
|
||||
|
@ -23,8 +23,8 @@ use super::{
|
||||
weather_forecaster::WeatherForecaster,
|
||||
},
|
||||
fun::{
|
||||
blyaficator::Blyaficator, greeter::Greeter, magic_ball::MagicBall, repeator::Repeator,
|
||||
rotator::Rotator,
|
||||
blyaficator::Blyaficator, chooser::Chooser, greeter::Greeter, magic_ball::MagicBall,
|
||||
repeator::Repeator, rotator::Rotator,
|
||||
},
|
||||
Handler,
|
||||
},
|
||||
@ -147,6 +147,11 @@ async fn run(args: BotConfig, client: Client) -> anyhow::Result<()> {
|
||||
.add_filter(UpdateTypeFilter(&[UpdateType::New]))
|
||||
.add_filter(SilentFilter)
|
||||
.add_filter(TextFilter(&[".mb"], TextMatchMethod::IStartsWith)),
|
||||
// Random chooser.
|
||||
FilteredHandler::new(Chooser)
|
||||
.add_filter(UpdateTypeFilter(&[UpdateType::New]))
|
||||
.add_filter(SilentFilter)
|
||||
.add_filter(TextFilter(&[".c"], TextMatchMethod::IStartsWith)),
|
||||
];
|
||||
|
||||
let mut errors_count = 0;
|
||||
|
Reference in New Issue
Block a user