diff --git a/Cargo.lock b/Cargo.lock index ad41dd1005078d12266268bd5aba249b90aabc52..b6c74ab8e840796d1137e2748c88707c5093efc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,6 +121,7 @@ dependencies = [ "dotenv", "phf", "png", + "rand 0.8.3", "reqwest", "rusttype", "serde", diff --git a/Cargo.toml b/Cargo.toml index 3d6dc6b496ae8a92c13f76e32e573fa260bfd94a..4d34e16cc1ed7b66beac39f1750cf9e7a27736ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,3 +20,4 @@ bigdecimal = "0.1.2" reqwest = { version = "0.10", features = ["json"] } serde_json = "1.0" rusttype = "0.4.3" +rand = "0.8" diff --git a/src/handlers/horse.rs b/src/handlers/horse.rs new file mode 100644 index 0000000000000000000000000000000000000000..32a4a97973e99efead80acd3ce2d88eda7f87ef8 --- /dev/null +++ b/src/handlers/horse.rs @@ -0,0 +1,22 @@ +use crate::handlers::LineHandler; +use serenity::async_trait; +use serenity::model::channel::{Message, ReactionType}; +use serenity::prelude::*; +use std::str::FromStr; + +#[derive(Default)] +pub struct HorseHandler; + +#[async_trait] +impl LineHandler for HorseHandler { + async fn message(&self, ctx: &Context, msg: &Message) { + let reaction = match ReactionType::from_str("ðŸŽ") { + Ok(x) => x, + Err(_) => return, + }; + + if rand::random::<f64>() <= 0.001 { + let _ = msg.react(&ctx, reaction).await; + } + } +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index f02fdb00fa8c4adc783f09bed92131a3e6631b27..419c0b738446b267fa8f3639117f7a98496cb4a8 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,8 +1,10 @@ +mod horse; mod joke; mod react; mod sus; mod xbasic; +use crate::handlers::horse::HorseHandler; use crate::handlers::joke::*; use crate::handlers::react::*; use crate::handlers::sus::*; @@ -49,6 +51,7 @@ impl Default for Dispatcher { Box::new(JokeHandler::default()), Box::new(ReactHandler::default()), Box::new(SusHandler::default()), + Box::new(HorseHandler::default()), ], } } diff --git a/src/handlers/react.rs b/src/handlers/react.rs index b40159761f0ac24423ddcd7b7fe27f99a48abd14..f65d38fd7e82787eeb1d9880470c0c3a23ddcf75 100644 --- a/src/handlers/react.rs +++ b/src/handlers/react.rs @@ -13,7 +13,8 @@ static EMOJI_MAP: phf::Map<&'static str, &'static str> = phf_map! { "bot" => "🤖", "mango" => "ðŸ¥", "banana" => "ðŸŒ", - "bee" => "ðŸ" + "bee" => "ðŸ", + "hose" => "ðŸŽ", }; pub struct ReactHandler; diff --git a/src/handlers/xbasic.rs b/src/handlers/xbasic.rs index 90474747d159de2fa3a1e0c8f3400c570369e58e..6961004d0b11196e3cfd6d4996a35d0886a06758 100644 --- a/src/handlers/xbasic.rs +++ b/src/handlers/xbasic.rs @@ -141,16 +141,16 @@ impl XbasicHandler { Some(x) => { if x.is_empty() { let _ = - get_user_programs!(&self, &msg.author.id).code.remove(&num); + get_user_programs!(self, &msg.author.id).code.remove(&num); return; } - get_user_programs!(&self, &msg.author.id) + get_user_programs!(self, &msg.author.id) .code .insert(num, x.to_owned()); } None => { - let _ = get_user_programs!(&self, &msg.author.id).code.remove(&num); + let _ = get_user_programs!(self, &msg.author.id).code.remove(&num); } } } @@ -245,7 +245,7 @@ impl XbasicHandler { } async fn load_published_program(&self, msg: &Message, ctx: &Context, id: i32) -> Option<()> { - let name = get_user_programs!(&self, &msg.author.id) + let name = get_user_programs!(self, &msg.author.id) .load_published_program(self.conn.lock().ok()?.borrow(), id)?; msg.channel_id @@ -270,7 +270,7 @@ impl XbasicHandler { } async fn interpreter_load(&self, name: &str, msg: &Message, ctx: &Context) { - let result = get_user_programs!(&self, &msg.author.id).load_program( + let result = get_user_programs!(self, &msg.author.id).load_program( &self.conn.lock().unwrap(), msg.author.id, name, @@ -292,7 +292,7 @@ impl XbasicHandler { } async fn interpreter_save(&self, name: &str, msg: &Message, ctx: &Context) { - let result = get_user_programs!(&self, &msg.author.id).save_program( + let result = get_user_programs!(self, &msg.author.id).save_program( &self.conn.lock().unwrap(), msg.author.id, name,