2828import logging
2929import traceback
3030import sys
31- from typing import Union , Callable , List , Optional , Tuple , Any , Coroutine
31+ from typing import Union , Callable , List , Optional , Tuple , Any , Coroutine , Dict
3232
3333from twitchio .errors import HTTPException
3434from . import models
@@ -98,6 +98,7 @@ def __init__(
9898
9999 self ._events = {}
100100 self ._waiting : List [Tuple [str , Callable [[...], bool ], asyncio .Future ]] = []
101+ self .registered_callbacks : Dict [Callable , str ] = {}
101102
102103 @classmethod
103104 def from_client_credentials (
@@ -234,7 +235,7 @@ def add_event(self, callback: Callable, name: str = None) -> None:
234235 raise ValueError ("Event callback must be a coroutine" )
235236
236237 event_name = name or callback .__name__
237- callback . _event = event_name # used to remove the event
238+ self . registered_callbacks [ callback ] = event_name
238239
239240 if event_name in self ._events :
240241 self ._events [event_name ].append (callback )
@@ -243,11 +244,13 @@ def add_event(self, callback: Callable, name: str = None) -> None:
243244 self ._events [event_name ] = [callback ]
244245
245246 def remove_event (self , callback : Callable ) -> bool :
246- if not hasattr (callback , "_event" ):
247+ event_name = self .registered_callbacks .get (callback )
248+
249+ if event_name is None :
247250 raise ValueError ("Event callback is not a registered event" )
248251
249- if callback in self ._events [callback . _event ]:
250- self ._events [callback . _event ].remove (callback )
252+ if callback in self ._events [event_name ]:
253+ self ._events [event_name ].remove (callback )
251254 return True
252255
253256 return False
0 commit comments