diff options
author | Cara Salter <cara@devcara.com> | 2022-02-14 12:13:46 -0500 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-02-14 12:13:46 -0500 |
commit | 830682ca08060df66c688478a013e43499c24fff (patch) | |
tree | 2f59526d0ced29f6de5f991d356375e7f2d4f71f /src | |
parent | e9543136f018d52b3dc4abb93412d07bfc4dc8c7 (diff) | |
download | glitch-ng-830682ca08060df66c688478a013e43499c24fff.tar.gz glitch-ng-830682ca08060df66c688478a013e43499c24fff.zip |
Fix CI
Diffstat (limited to 'src')
-rw-r--r-- | src/handler.rs | 73 | ||||
-rw-r--r-- | src/main.rs | 3 |
2 files changed, 76 insertions, 0 deletions
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::<u64>()?, + add_reaction.user_id.unwrap().0, + ) + .await?; + let member_roles = member.roles; + let role_id = serenity::RoleId(rrole.role_id.parse::<u64>()?); + 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::<u64>()?, + add_reaction.user_id.unwrap().0, + rrole.role_id.parse::<u64>()?, + 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(()) +} diff --git a/src/main.rs b/src/main.rs index 2968f20..8693381 100644 --- a/src/main.rs +++ b/src/main.rs @@ -123,6 +123,9 @@ async fn main() { ) .await .expect("Couldn't connect to postgresql"); + sqlx::migrate!("./migrations") + .run(&pool) + .await.unwrap(); Ok(Data { pg: Mutex::new(pool), }) |