22
22
Sequence ,
23
23
Type ,
24
24
Union ,
25
+ Awaitable ,
25
26
)
26
27
27
28
import interactions .api .events as events
@@ -935,6 +936,17 @@ async def stop(self) -> None:
935
936
await self .http .close ()
936
937
await self ._connection_state .stop ()
937
938
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
+
938
950
def dispatch (self , event : events .BaseEvent , * args , ** kwargs ) -> None :
939
951
"""
940
952
Dispatch an event.
@@ -954,15 +966,7 @@ def dispatch(self, event: events.BaseEvent, *args, **kwargs) -> None:
954
966
f"An error occurred attempting during { event .resolved_name } event processing"
955
967
) from e
956
968
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 ))
966
970
967
971
if "event" in self .listeners :
968
972
# special meta event listener
@@ -976,7 +980,7 @@ async def wait_until_ready(self) -> None:
976
980
def wait_for (
977
981
self ,
978
982
event : Union [str , "BaseEvent" ],
979
- checks : Absent [Optional [Callable [..., bool ]]] = MISSING ,
983
+ checks : Absent [Optional [Union [ Callable [..., bool ], Callable [..., Awaitable [ bool ]] ]]] = MISSING ,
980
984
timeout : Optional [float ] = None ,
981
985
) -> Any :
982
986
"""
@@ -989,7 +993,6 @@ def wait_for(
989
993
990
994
Returns:
991
995
The event object.
992
-
993
996
"""
994
997
event = get_event_name (event )
995
998
0 commit comments