From 830682ca08060df66c688478a013e43499c24fff Mon Sep 17 00:00:00 2001 From: Cara Salter Date: Mon, 14 Feb 2022 12:13:46 -0500 Subject: Fix CI --- src/handler.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/handler.rs (limited to 'src/handler.rs') diff --git a/src/handler.rs b/src/handler.rs new file mode 100644 index 0000000..ef8fc00 --- /dev/null +++ b/src/handler.rs @@ -0,0 +1,73 @@ +use poise::serenity_prelude as serenity; + +use crate::models::ReactionRole; +use crate::{Data, Error}; + +pub async fn event_handler( + ctx: &serenity::Context, + event: &poise::Event<'_>, + data: &Data, +) -> Result<(), Error> { + { + let pool = data.pg.lock().unwrap().clone(); + match event { + poise::Event::ReactionAdd { add_reaction } => { + let current_user = ctx.http.get_current_user().await?; + if add_reaction.user_id.unwrap() == current_user.id { + return Ok(()); + } + let rrole = sqlx::query_as!( + ReactionRole, + "SELECT * FROM reaction_roles WHERE message_id=$1 AND reaction=$2", + add_reaction.message_id.0.to_string(), + add_reaction.emoji.to_string() + ) + .fetch_one(&pool) + .await?; + let member = ctx + .http + .get_member( + rrole.guild_id.parse::()?, + add_reaction.user_id.unwrap().0, + ) + .await?; + let member_roles = member.roles; + let role_id = serenity::RoleId(rrole.role_id.parse::()?); + if member_roles.contains(&role_id) { + ctx.http + .remove_member_role( + member.guild_id.0, + member.user.id.0, + role_id.0, + Some("Reaction Role Menu"), + ) + .await?; + } else { + ctx.http + .add_member_role( + rrole.guild_id.parse::()?, + add_reaction.user_id.unwrap().0, + rrole.role_id.parse::()?, + Some("Reaction Role"), + ) + .await?; + } + + if let Ok(dm_chan) = add_reaction + .user_id + .unwrap() + .create_dm_channel(&ctx.http) + .await { + dm_chan.say(ctx, format!("Toggled the role!")).await?; + } else { + println!("Could not DM user, but we did the role anyways"); + } + + add_reaction.delete(&ctx.http).await?; + } + _ => (), + } + } + + Ok(()) +} -- cgit v1.2.3