From 9001cd970166e06adcbadc85436d3581d0f5a534 Mon Sep 17 00:00:00 2001 From: ErrorNoInternet <errornointernet@envs.net> Date: Thu, 6 Mar 2025 17:59:42 -0500 Subject: [PATCH] feat: call event listeners in tasks --- src/events.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/events.rs b/src/events.rs index cca235c..fdbc3f5 100644 --- a/src/events.rs +++ b/src/events.rs @@ -176,12 +176,19 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow: Ok(()) } -async fn call_listeners<T: Clone + IntoLuaMulti>(state: &State, event_type: &str, data: T) { - if let Some(listeners) = state.event_listeners.read().await.get(event_type) { +async fn call_listeners<T: Clone + IntoLuaMulti + Send + 'static>( + state: &State, + event_type: &'static str, + data: T, +) { + if let Some(listeners) = state.event_listeners.read().await.get(event_type).cloned() { for (id, callback) in listeners { - if let Err(error) = callback.call_async::<()>(data.clone()).await { - error!("failed to call lua event listener {id} for {event_type}: {error:?}"); - } + let data = data.clone(); + tokio::spawn(async move { + if let Err(error) = callback.call_async::<()>(data).await { + error!("failed to call lua event listener {id} for {event_type}: {error:?}"); + } + }); } } }