diff --git a/src/bot/handlers/fun/magic_ball.rs b/src/bot/handlers/fun/magic_ball.rs new file mode 100644 index 0000000000000000000000000000000000000000..c696d41c422ff0bd41badebd11979263d85b7e9e --- /dev/null +++ b/src/bot/handlers/fun/magic_ball.rs @@ -0,0 +1,55 @@ +use grammers_client::{Client, InputMessage, Update}; +use rand::seq::SliceRandom; + +use crate::{bot::handlers::Handler, utils::messages::get_message}; + +lazy_static::lazy_static! { + static ref ANSWERS: &'static [&'static str] = &[ + // Negatives + "Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ñвно не твой день, хуилка.", + "Попробуй позднее, дÑдь. Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ñвно не Ñтоит.", + "Ðет, точно нет.", + "Как бы подумали твои родители об Ñтом?", + "Рлучше идей не было?", + "И как тебе поÑле таких вопроÑов? Конечно такое не ÑбудетÑÑ.", + // Positives + "Да, Ñто проц.", + "Говно вопроÑ. Ð’ÑÑ‘ по кайфу будет, ежжи.", + "Киркоров как-то говорил: \"ЕÑли хочешь идти - иди\"", + "ÐÑтрологи обÑвили неделю, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ð»Ð°Ð³Ð¾Ð²Ð¾Ð»Ð¸Ñ‚ тебе. Ð’ÑÑ‘ будет как ты хочешь.", + "ТатарÑÐºÐ°Ñ Ð½Ð°Ñ€Ð¾Ð´Ð½Ð°Ñ Ð¼ÑƒÐ´Ñ€Ð¾Ñть глаÑит: ЕÑть душа — еÑть и надежда.", + "Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ñ‚Ñ‹ Ñвно в ударе. Однозначно повезёт.", + "МагиÑтр йода Ñчитает что тебе повезёт.", + // Questionalbles + "ÐаÑтолько мутный движ, что Ñ Ð´Ð°Ð¶Ðµ не знаю повезёт ли.", + "Такие вещи ты должен решать Ñам, дÑдь. Или попробуй ещё раз.", + ]; +} + +#[derive(Clone)] +pub struct MagicBall; + +#[async_trait::async_trait] +impl Handler for MagicBall { + async fn react(&self, _: &Client, update: &Update) -> anyhow::Result<()> { + let Some(message) = get_message(update) else { + return Ok(()); + }; + // If empty message passed. + if message.text().strip_prefix(".mb").map_or("", str::trim) == "" { + message + .reply(InputMessage::text( + "Ðужно ÑпроÑить вопроÑ. ПуÑтые Ñтроки не канают.", + )) + .await?; + return Ok(()); + } + message + .reply( + InputMessage::text(ANSWERS.choose(&mut rand::rngs::OsRng).copied().unwrap()) + .silent(true), + ) + .await?; + Ok(()) + } +} diff --git a/src/bot/handlers/fun/mod.rs b/src/bot/handlers/fun/mod.rs index 46355f68b71815a1ff211e692068119d1a7840a0..c25fcd8a66d56df91b31c24c16c89b2bb6422ef6 100644 --- a/src/bot/handlers/fun/mod.rs +++ b/src/bot/handlers/fun/mod.rs @@ -1,4 +1,5 @@ pub mod blyaficator; pub mod greeter; +pub mod magic_ball; pub mod repeator; pub mod rotator; diff --git a/src/bot/main.rs b/src/bot/main.rs index 1ea86239aa35e8ed016a6744d2c2ab22b58c8ef1..e989f12c86302c33bcf3bd4081844d7717575021 100644 --- a/src/bot/main.rs +++ b/src/bot/main.rs @@ -22,7 +22,10 @@ use super::{ help::Help, weather_forecaster::WeatherForecaster, }, - fun::{blyaficator::Blyaficator, greeter::Greeter, repeator::Repeator, rotator::Rotator}, + fun::{ + blyaficator::Blyaficator, greeter::Greeter, magic_ball::MagicBall, repeator::Repeator, + rotator::Rotator, + }, Handler, }, middlewares::members_count::MembersCount, @@ -139,6 +142,11 @@ async fn run(args: BotConfig, client: Client) -> anyhow::Result<()> { .add_filter(ExcludedChatsFilter(vec![me.id()])) .add_filter(RegexFilter(Regex::new("^[)0]+$")?)) .add_middleware::<MembersCount<100>>(), + // The magic balls. + FilteredHandler::new(MagicBall) + .add_filter(UpdateTypeFilter(&[UpdateType::New])) + .add_filter(SilentFilter) + .add_filter(TextFilter(&[".mb"], TextMatchMethod::IStartsWith)), ]; let mut errors_count = 0;