diff --git a/src/autorole.rs b/src/autorole.rs index 6532370..cd2f6f3 100644 --- a/src/autorole.rs +++ b/src/autorole.rs @@ -1,8 +1,10 @@ +use crate::Handler; use serde::{Deserialize, Serialize}; use serenity::framework::standard::{ macros::{command, group}, Args, CommandResult, }; +use serenity::model::channel::ReactionType::Custom; use serenity::model::prelude::*; use serenity::prelude::*; use std::collections::HashMap; @@ -124,6 +126,26 @@ async fn autorole(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult Ok(()) } +// listener + +pub async fn handle_reaction(ctx: &Context, reaction: &Reaction) { + let data = ctx.data.read().await; + let mut auto_roles = data.get::().unwrap(); + if let Custom { animated, id, name } = &reaction.emoji { + if let Some(role) = auto_roles.messages.get(&(*id, reaction.message_id)) { + match &reaction.member { + None => { + println!("Missing member on reaction"); + // remove reaction + } + Some(member) => { + // add role + } + } + } + } +} + #[derive(Serialize, Deserialize)] pub struct AutoRoleData { messages: HashMap<(EmojiId, MessageId), RoleId>, diff --git a/src/main.rs b/src/main.rs index 53533fe..d41dae8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,28 @@ -mod autorole; -mod commands; -mod general; - use std::collections::HashSet; use std::fs; -use crate::autorole::{AutoRoleData, AutoRoleDataKey, AUTOROLE_GROUP}; -use crate::commands::MY_HELP; use serenity::client::Context; use serenity::framework::StandardFramework; use serenity::http::Http; use serenity::model::id::UserId; +use serenity::model::prelude::*; use serenity::{async_trait, model::gateway::Ready, prelude::*}; +use crate::autorole::{AutoRoleData, AutoRoleDataKey, AUTOROLE_GROUP}; +use crate::commands::MY_HELP; + +mod autorole; +mod commands; +mod general; + struct Handler; #[async_trait] impl EventHandler for Handler { + async fn reaction_add(&self, ctx: Context, add_reaction: Reaction) { + autorole::handle_reaction(&ctx, &add_reaction) + } + async fn ready(&self, _: Context, ready: Ready) { println!("{} is connected!", ready.user.name); }