From feb1142d6e54d57543cb1e0755e1398e9fb9225c Mon Sep 17 00:00:00 2001 From: ElnuDev Date: Wed, 26 Mar 2025 21:26:20 -0700 Subject: [PATCH] =?UTF-8?q?React=20=E2=9D=8C=20to=20delete=20message;=20ca?= =?UTF-8?q?rgo=20clippy=20--fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 28 ++++++++++++++++++++++++--- src/utils.rs | 54 ++++++++++++++++++++++++++-------------------------- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/main.rs b/src/main.rs index 30ee1c3..4ee3c90 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ type Context<'a> = poise::Context<'a, Data, Error>; pub struct Data {} use commands::{challenge::*, kanji::*, meta::*, owner::*}; -use poise::serenity_prelude as serenity; +use poise::{serenity_prelude as serenity, Event}; use poise::serenity_prelude::model::gateway::GatewayIntents; use clap::Parser; @@ -45,9 +45,9 @@ impl Arguments { domain: env::var("DOMAIN")?, discord_token: env::var("DISCORD_TOKEN")?, prefix: env::var("PREFIX")?, - hugo: env::var("HUGO")?.into(), + hugo: env::var("HUGO")?, build: env::var("BUILD")?, - guild_data: env::var("GUILD_DATA")?.into(), + guild_data: env::var("GUILD_DATA")?, }) } } @@ -67,6 +67,24 @@ lazy_static! { }; } +async fn event_handler( + ctx: &serenity::Context, + event: &Event<'_>, + framework: poise::FrameworkContext<'_, Data, Error>, + _data: &Data, +) -> Result<(), Error> { + if let Event::ReactionAdd { add_reaction, .. } = event { + if !add_reaction.emoji.unicode_eq("❌") { + return Ok(()); + } + let message = add_reaction.message(&ctx.http).await?; + if message.author.id == framework.bot_id && add_reaction.user_id.map(|id| *id.as_u64() == 441283734214279178).unwrap_or(false) { + message.delete(&ctx.http).await?; + } + } + Ok(()) +} + #[tokio::main] async fn main() { // Initialize the logger to use environment variables. @@ -102,6 +120,9 @@ async fn main() { hyogai(), so(), ], + event_handler: |ctx, event, framework, data| { + Box::pin(event_handler(ctx, event, framework, data)) + }, prefix_options: poise::PrefixFrameworkOptions { prefix: Some(ARGS.prefix.clone()), ..Default::default() @@ -113,6 +134,7 @@ async fn main() { GatewayIntents::GUILD_MESSAGES | GatewayIntents::DIRECT_MESSAGES | GatewayIntents::MESSAGE_CONTENT + | GatewayIntents::GUILD_MESSAGE_REACTIONS | GatewayIntents::GUILDS, ) .setup(move |_ctx, _ready, _framework| Box::pin(async move { Ok(Data {}) })); diff --git a/src/utils.rs b/src/utils.rs index c590ca9..1d16d8b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -26,31 +26,6 @@ impl User for serenity::User { } } -#[cfg(test)] -mod tests { - use crate::serenity::User; - use crate::utils::User as UserTrait; - - fn test_user(name: &str, discriminator: u16) -> User { - let mut user = User::default(); - user.name = name.to_owned(); - user.discriminator = discriminator; - user - } - - #[test] - fn test_legacy_username() { - let user = test_user("test", 123); - assert_eq!(user.username(), "test#0123"); - } - - #[test] - fn test_new_username() { - let user = test_user("test", 0); - assert_eq!(user.username(), "test"); - } -} - pub fn get_challenge_number() -> i32 { let challenge_dir = format!("{}/content/challenges", ARGS.hugo); let paths = fs::read_dir(challenge_dir).unwrap(); @@ -152,14 +127,14 @@ pub fn rebuild_site() { pub fn get_guild_data() -> Map { let guild_data_path = &ARGS.guild_data; - let guild_data_json = match File::open(&guild_data_path) { + let guild_data_json = match File::open(guild_data_path) { Ok(mut file) => { let mut json = String::new(); file.read_to_string(&mut json).unwrap(); json } Err(ref e) if e.kind() == std::io::ErrorKind::NotFound => { - let mut file = File::create(&guild_data_path).unwrap(); + let mut file = File::create(guild_data_path).unwrap(); file.write_all(b"{}").unwrap(); file.flush().unwrap(); String::from("{}") @@ -435,3 +410,28 @@ pub async fn leaderboard(ctx: &Context<'_>) -> Result<(), Error> { file.flush()?; Ok(()) } + +#[cfg(test)] +mod tests { + use crate::serenity::User; + use crate::utils::User as UserTrait; + + fn test_user(name: &str, discriminator: u16) -> User { + let mut user = User::default(); + user.name = name.to_owned(); + user.discriminator = discriminator; + user + } + + #[test] + fn test_legacy_username() { + let user = test_user("test", 123); + assert_eq!(user.username(), "test#0123"); + } + + #[test] + fn test_new_username() { + let user = test_user("test", 0); + assert_eq!(user.username(), "test"); + } +}