2626from __future__ import annotations
2727
2828import asyncio
29- from collections .abc import Callable , Coroutine
30- from functools import partial
3129import io
3230import os
3331import struct
3432import sys
3533import threading
3634import time
35+ from collections .abc import Callable , Coroutine
36+ from functools import partial
3737from typing import TYPE_CHECKING , Any , TypeVar , overload
3838
3939from discord .utils import MISSING
4646
4747 from discord import abc
4848 from discord .types import snowflake
49+
4950 from ..voice .client import VoiceClient
5051
51- R = TypeVar ('R' )
52- P = ParamSpec ('P' )
52+ R = TypeVar ("R" )
53+ P = ParamSpec ("P" )
5354
5455__all__ = (
5556 "Filters" ,
@@ -81,12 +82,18 @@ class Filter:
8182 """
8283
8384 @overload
84- async def filter (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> bool : ...
85+ async def filter (
86+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
87+ ) -> bool : ...
8588
8689 @overload
87- def filter (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> bool : ...
90+ def filter (
91+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
92+ ) -> bool : ...
8893
89- def filter (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> bool | Coroutine [Any , Any , bool ]:
94+ def filter (
95+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
96+ ) -> bool | Coroutine [Any , Any , bool ]:
9097 """|maybecoro|
9198
9299 Represents the filter callback.
@@ -110,11 +117,10 @@ def filter(self, sink: Sink, user: abc.Snowflake, ssrc: int, packet: RawData) ->
110117 :class:`bool`
111118 Whether the filter was successful.
112119 """
113- raise NotImplementedError (' subclasses must implement this' )
120+ raise NotImplementedError (" subclasses must implement this" )
114121
115122 def cleanup (self ) -> None :
116123 """A function called when the filter is ready for cleanup."""
117- pass
118124
119125
120126class Handler :
@@ -126,12 +132,18 @@ class Handler:
126132 """
127133
128134 @overload
129- async def handle (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> Any : ...
135+ async def handle (
136+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
137+ ) -> Any : ...
130138
131139 @overload
132- def handle (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> Any : ...
140+ def handle (
141+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
142+ ) -> Any : ...
133143
134- def handle (self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData ) -> Any | Coroutine [Any , Any , Any ]:
144+ def handle (
145+ self , sink : Sink , user : abc .Snowflake , ssrc : int , packet : RawData
146+ ) -> Any | Coroutine [Any , Any , Any ]:
135147 """|maybecoro|
136148
137149 Represents the handler callback.
@@ -149,11 +161,10 @@ def handle(self, sink: Sink, user: abc.Snowflake, ssrc: int, packet: RawData) ->
149161 packet: :class:`~.RawData`
150162 The raw data packet.
151163 """
152- raise NotImplementedError (' subclasses must implement this' )
164+ raise NotImplementedError (" subclasses must implement this" )
153165
154166 def cleanup (self ) -> None :
155167 """A function called when the handler is ready for cleanup."""
156- pass
157168
158169
159170class Filters :
@@ -383,10 +394,12 @@ def __init_subclass__(cls) -> None:
383394 elif isinstance (value , classmethod ):
384395 value = partial (value .__func__ , cls )
385396
386- if not hasattr (value , ' __listener__' ):
397+ if not hasattr (value , " __listener__" ):
387398 continue
388399
389- event_name = getattr (value , '__listener_name__' , elem ).removeprefix ('on_' )
400+ event_name = getattr (value , "__listener_name__" , elem ).removeprefix (
401+ "on_"
402+ )
390403
391404 try :
392405 listeners [event_name ].append (value )
@@ -408,14 +421,14 @@ def __init__(
408421 self .__dispatch_set : set [asyncio .Task [Any ]] = set ()
409422
410423 def dispatch (self , event : str , * args : Any , ** kwargs : Any ) -> Any :
411- event = event .removeprefix (' on_' )
424+ event = event .removeprefix (" on_" )
412425
413426 listeners = self .__listeners__ .get (event , [])
414427
415428 for listener in listeners :
416429 task = asyncio .create_task (
417430 listener (* args , ** kwargs ),
418- name = f' dispatch-{ event } :{ id (listener ):#x} ' ,
431+ name = f" dispatch-{ event } :{ id (listener ):#x} " ,
419432 )
420433 self .__dispatch_set .add (task )
421434 task .add_done_callback (self .__dispatch_set .remove )
@@ -455,7 +468,9 @@ def add_filter(self, filter: Filter, /) -> None:
455468 """
456469
457470 if not isinstance (filter , Filter ):
458- raise TypeError (f'expected a Filter object, not { filter .__class__ .__name__ } ' )
471+ raise TypeError (
472+ f"expected a Filter object, not { filter .__class__ .__name__ } "
473+ )
459474 self ._filters .append (filter )
460475
461476 def remove_filter (self , filter : Filter , / ) -> None :
@@ -487,7 +502,9 @@ def add_handler(self, handler: Handler, /) -> None:
487502 """
488503
489504 if not isinstance (handler , Handler ):
490- raise TypeError (f'expected a Handler object, not { handler .__class__ .__name__ } ' )
505+ raise TypeError (
506+ f"expected a Handler object, not { handler .__class__ .__name__ } "
507+ )
491508 self ._handlers .append (handler )
492509
493510 def remove_handler (self , handler : Handler , / ) -> None :
@@ -505,22 +522,16 @@ def remove_handler(self, handler: Handler, /) -> None:
505522 pass
506523
507524 @staticmethod
508- def listener (event : str = MISSING ) -> Callable [[Callable [P , Coroutine [Any , Any , R ]]], Callable [P , Coroutine [Any , Any , R ]]]:
525+ def listener (
526+ event : str = MISSING ,
527+ ) -> Callable [
528+ [Callable [P , Coroutine [Any , Any , R ]]], Callable [P , Coroutine [Any , Any , R ]]
529+ ]:
509530 """Registers a function to be an event listener for this sink.
510531
511532 The events must be a :ref:`coroutine <coroutine>`, if not, :exc:`TypeError` is raised; and
512533 also must be inside a sink class.
513534
514- Example
515- -------
516-
517- .. code-block:: python3
518-
519- class MySink(Sink):
520- @Sink.listener()
521- async def on_member_speaking_state_update(member, ssrc, state):
522- pass
523-
524535 Parameters
525536 ----------
526537 event: :class:`str`
@@ -530,22 +541,37 @@ async def on_member_speaking_state_update(member, ssrc, state):
530541 ------
531542 TypeError
532543 The coroutine passed is not actually a coroutine, or the listener is not in a sink class.
544+
545+ Example
546+ -------
547+
548+ .. code-block:: python3
549+
550+ class MySink(Sink):
551+ @Sink.listener()
552+ async def on_member_speaking_state_update(member, ssrc, state):
553+ pass
533554 """
534555
535- def decorator (func : Callable [P , Coroutine [Any , Any , R ]]) -> Callable [P , Coroutine [Any , Any , R ]]:
536- parts = func .__qualname__ .split ('.' )
556+ def decorator (
557+ func : Callable [P , Coroutine [Any , Any , R ]],
558+ ) -> Callable [P , Coroutine [Any , Any , R ]]:
559+ parts = func .__qualname__ .split ("." )
537560
538561 if not parts or not len (parts ) > 1 :
539- raise TypeError (' event listeners must be declared in a Sink class' )
562+ raise TypeError (" event listeners must be declared in a Sink class" )
540563
541564 if parts [- 1 ] != func .__name__ :
542- raise NameError ('qualified name and function name mismatch, this should not happen' )
565+ raise NameError (
566+ "qualified name and function name mismatch, this should not happen"
567+ )
543568
544569 if not asyncio .iscoroutinefunction (func ):
545- raise TypeError (' event listeners must be coroutine functions' )
570+ raise TypeError (" event listeners must be coroutine functions" )
546571
547572 func .__listener__ = True
548573 if event is not MISSING :
549574 func .__listener_name__ = event
550575 return func
576+
551577 return decorator
0 commit comments