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,