From 4a832f75be970d84c57aa388e66d6b670f9b4646 Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 12 Feb 2026 20:10:29 +0100 Subject: [PATCH] feat(events/interaction_create): adding the Interaction handle autodetect --- src/events/bot/interaction_create.rs | 32 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/events/bot/interaction_create.rs b/src/events/bot/interaction_create.rs index ff8a12d..05900ea 100644 --- a/src/events/bot/interaction_create.rs +++ b/src/events/bot/interaction_create.rs @@ -1,24 +1,28 @@ use serenity::all::*; use crate::commands::SlashCommand; +use crate::events::{BotEvent, EventEntry}; -pub async fn handle( - ctx: &Context, - interaction: &Interaction, - commands: &[Box], -) { - let Interaction::Command(command) = interaction else { - return; - }; +pub struct InteractionHandler; - let name: &str = command.data.name.as_str(); +#[serenity::async_trait] +impl BotEvent for InteractionHandler { + fn event_type(&self) -> &'static str { "interaction_create" } - match commands.iter().find(|cmd| cmd.name() == name) { - Some(cmd) => { - if let Err(why) = cmd.run(ctx, command).await { - eprintln!("❌ | Error on {name}: {why:?}"); + async fn on_interaction_create(&self, ctx: &Context, interaction: &Interaction, commands: &[Box]) { + let Interaction::Command(command) = interaction else { return }; + + let name = command.data.name.as_str(); + match commands.iter().find(|cmd| cmd.name() == name) { + Some(cmd) => { + if let Err(why) = cmd.run(ctx, command).await { + eprintln!("❌ | Error on {name}: {why:?}"); + } } + None => eprintln!("⚠️ | Unable to fetch: /{name}"), } - None => eprintln!("⚠️ | Unable to fetch: /{name}"), } } +inventory::submit! { + EventEntry { create: || Box::new(InteractionHandler) } +}