feat: call event listeners in tasks

This commit is contained in:
Ryan 2025-03-06 17:59:42 -05:00
parent 9ce4a7aa1f
commit 9001cd9701
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3

View File

@ -176,12 +176,19 @@ pub async fn handle_event(client: Client, event: Event, state: State) -> anyhow:
Ok(()) Ok(())
} }
async fn call_listeners<T: Clone + IntoLuaMulti>(state: &State, event_type: &str, data: T) { async fn call_listeners<T: Clone + IntoLuaMulti + Send + 'static>(
if let Some(listeners) = state.event_listeners.read().await.get(event_type) { 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 { for (id, callback) in listeners {
if let Err(error) = callback.call_async::<()>(data.clone()).await { 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:?}"); error!("failed to call lua event listener {id} for {event_type}: {error:?}");
} }
});
} }
} }
} }