|
|
@ -0,0 +1,63 @@ |
|
|
|
mod config;
|
|
|
|
|
|
|
|
use phf::phf_map;
|
|
|
|
use serenity::async_trait;
|
|
|
|
use serenity::model::channel::{Message, ReactionType};
|
|
|
|
use serenity::model::prelude::Ready;
|
|
|
|
use serenity::prelude::*;
|
|
|
|
use serenity::Client;
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
|
|
|
struct Handler;
|
|
|
|
|
|
|
|
static EMOJI_MAP: phf::Map<&'static str, &'static str> = phf_map! {
|
|
|
|
"cat" => "🐈",
|
|
|
|
"chicken" => "🐔",
|
|
|
|
"spaghetti" => "🍝",
|
|
|
|
"dog" => "🐕",
|
|
|
|
"bot" => "🤖",
|
|
|
|
"mango" => "🥭",
|
|
|
|
"banana" => "🍌",
|
|
|
|
"bee" => "🐝"
|
|
|
|
};
|
|
|
|
|
|
|
|
#[async_trait]
|
|
|
|
impl EventHandler for Handler {
|
|
|
|
async fn message(&self, ctx: Context, msg: Message) {
|
|
|
|
for (key, value) in EMOJI_MAP.entries() {
|
|
|
|
let msg_lower = format!(" {} ", msg.content.to_lowercase());
|
|
|
|
if msg_lower.contains(&format!(" {} ", key))
|
|
|
|
|| msg_lower.contains(&format!(" {}s ", key))
|
|
|
|
{
|
|
|
|
let reaction_type = match ReactionType::from_str(value) {
|
|
|
|
Ok(x) => x,
|
|
|
|
Err(x) => {
|
|
|
|
println!("Could not react: {}", x);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
if let Err(e) = msg.react(&ctx, reaction_type).await {
|
|
|
|
println!("Error reacting: {}", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn ready(&self, _: Context, ready: Ready) {
|
|
|
|
println!("{} is connected", ready.user.name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
|
|
|
let config = config::get_conf();
|
|
|
|
let token = config.token;
|
|
|
|
|
|
|
|
let mut client = Client::builder(&token)
|
|
|
|
.event_handler(Handler)
|
|
|
|
.await
|
|
|
|
.expect("Error creating client");
|
|
|
|
if let Err(e) = client.start().await {
|
|
|
|
println!("Client error: {}", e);
|
|
|
|
}
|
|
|
|
}
|