From 940f7a18ef5733e2b90ad9279b9317da4697d292 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin Date: Sat, 25 Feb 2023 03:39:25 +0400 Subject: [PATCH] Magic ball added. Signed-off-by: Pavel Kirilin --- src/bot/handlers/fun/magic_ball.rs | 55 ++++++++++++++++++++++++++++++ src/bot/handlers/fun/mod.rs | 1 + src/bot/main.rs | 10 +++++- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/bot/handlers/fun/magic_ball.rs diff --git a/src/bot/handlers/fun/magic_ball.rs b/src/bot/handlers/fun/magic_ball.rs new file mode 100644 index 0000000..c696d41 --- /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 46355f6..c25fcd8 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 1ea8623..e989f12 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::>(), + // 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;