From 368b5e0cb02fed1a34ddf1af6736abe8245c74df Mon Sep 17 00:00:00 2001 From: seth Date: Mon, 4 Dec 2023 05:40:51 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20delete=20messages=20on=20=E2=9D=8C=20ag?= =?UTF-8?q?ain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: seth --- src/handlers/event/delete.rs | 25 +++++++++++++++++++++++++ src/handlers/event/eta.rs | 2 +- src/handlers/event/mod.rs | 13 ++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/handlers/event/delete.rs diff --git a/src/handlers/event/delete.rs b/src/handlers/event/delete.rs new file mode 100644 index 0000000..dddcc9a --- /dev/null +++ b/src/handlers/event/delete.rs @@ -0,0 +1,25 @@ +use color_eyre::eyre::{Context as _, Result}; +use poise::serenity_prelude::{Context, InteractionType, Reaction}; + +pub async fn handle(ctx: &Context, reaction: &Reaction) -> Result<()> { + let user = reaction + .user(ctx) + .await + .wrap_err_with(|| "Couldn't fetch user from reaction!")?; + + let message = reaction + .message(ctx) + .await + .wrap_err_with(|| "Couldn't fetch message from reaction!")?; + + if let Some(interaction) = &message.interaction { + if interaction.kind == InteractionType::ApplicationCommand + && interaction.user == user + && reaction.emoji.unicode_eq("❌") + { + message.delete(ctx).await?; + } + } + + Ok(()) +} diff --git a/src/handlers/event/eta.rs b/src/handlers/event/eta.rs index 3e44674..a5ba3b4 100644 --- a/src/handlers/event/eta.rs +++ b/src/handlers/event/eta.rs @@ -3,7 +3,7 @@ use crate::{consts, utils}; use color_eyre::eyre::Result; use poise::serenity_prelude::{Context, Message}; -pub async fn handle_eta(ctx: &Context, message: &Message) -> Result<()> { +pub async fn handle(ctx: &Context, message: &Message) -> Result<()> { if !message.content.contains(" eta ") { return Ok(()); } diff --git a/src/handlers/event/mod.rs b/src/handlers/event/mod.rs index 7d80556..e5379ae 100644 --- a/src/handlers/event/mod.rs +++ b/src/handlers/event/mod.rs @@ -4,6 +4,7 @@ use color_eyre::eyre::{Report, Result}; use poise::serenity_prelude::Context; use poise::{Event, FrameworkContext}; +mod delete; mod eta; pub async fn handle( @@ -17,7 +18,17 @@ pub async fn handle( log::info!("Logged in as {}!", data_about_bot.user.name) } - Event::Message { new_message } => eta::handle_eta(ctx, new_message).await?, + Event::Message { new_message } => { + // ignore new messages from bots + // NOTE: the webhook_id check allows us to still respond to PK users + if new_message.author.bot && new_message.webhook_id.is_none() { + return Ok(()); + } + + eta::handle(ctx, new_message).await? + } + + Event::ReactionAdd { add_reaction } => delete::handle(ctx, add_reaction).await?, _ => {} }