2222 Sequence ,
2323 Type ,
2424 Union ,
25+ Awaitable ,
2526)
2627
2728import interactions .api .events as events
@@ -935,6 +936,17 @@ async def stop(self) -> None:
935936 await self .http .close ()
936937 await self ._connection_state .stop ()
937938
939+ async def _process_waits (self , event : events .BaseEvent ) -> None :
940+ if _waits := self .waits .get (event .resolved_name , []):
941+ index_to_remove = []
942+ for i , _wait in enumerate (_waits ):
943+ result = await _wait (event )
944+ if result :
945+ index_to_remove .append (i )
946+
947+ for idx in sorted (index_to_remove , reverse = True ):
948+ _waits .pop (idx )
949+
938950 def dispatch (self , event : events .BaseEvent , * args , ** kwargs ) -> None :
939951 """
940952 Dispatch an event.
@@ -954,15 +966,7 @@ def dispatch(self, event: events.BaseEvent, *args, **kwargs) -> None:
954966 f"An error occurred attempting during { event .resolved_name } event processing"
955967 ) from e
956968
957- if _waits := self .waits .get (event .resolved_name , []):
958- index_to_remove = []
959- for i , _wait in enumerate (_waits ):
960- result = _wait (event )
961- if result :
962- index_to_remove .append (i )
963-
964- for idx in sorted (index_to_remove , reverse = True ):
965- _waits .pop (idx )
969+ asyncio .create_task (self ._process_waits (event ))
966970
967971 if "event" in self .listeners :
968972 # special meta event listener
@@ -976,7 +980,7 @@ async def wait_until_ready(self) -> None:
976980 def wait_for (
977981 self ,
978982 event : Union [str , "BaseEvent" ],
979- checks : Absent [Optional [Callable [..., bool ]]] = MISSING ,
983+ checks : Absent [Optional [Union [ Callable [..., bool ], Callable [..., Awaitable [ bool ]] ]]] = MISSING ,
980984 timeout : Optional [float ] = None ,
981985 ) -> Any :
982986 """
@@ -989,7 +993,6 @@ def wait_for(
989993
990994 Returns:
991995 The event object.
992-
993996 """
994997 event = get_event_name (event )
995998
0 commit comments