aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCara Salter <cara@devcara.com>2022-02-14 12:13:46 -0500
committerCara Salter <cara@devcara.com>2022-02-14 12:13:46 -0500
commit830682ca08060df66c688478a013e43499c24fff (patch)
tree2f59526d0ced29f6de5f991d356375e7f2d4f71f /src
parente9543136f018d52b3dc4abb93412d07bfc4dc8c7 (diff)
downloadglitch-ng-830682ca08060df66c688478a013e43499c24fff.tar.gz
glitch-ng-830682ca08060df66c688478a013e43499c24fff.zip
Fix CI
Diffstat (limited to 'src')
-rw-r--r--src/handler.rs73
-rw-r--r--src/main.rs3
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),
})