feat: call event listeners in tasks
This commit is contained in:
		| @@ -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(); | ||||||
|                 error!("failed to call lua event listener {id} for {event_type}: {error:?}"); |             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:?}"); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user