55
									
								
								src/bot/handlers/fun/magic_ball.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/bot/handlers/fun/magic_ball.rs
									
									
									
									
									
										Normal file
									
								
							@ -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(())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
pub mod blyaficator;
 | 
			
		||||
pub mod greeter;
 | 
			
		||||
pub mod magic_ball;
 | 
			
		||||
pub mod repeator;
 | 
			
		||||
pub mod rotator;
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user