mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-08-06 13:10:22 +03:00
Allow custom args, kwargs for event handlers
This commit is contained in:
parent
bd1b0ecdb4
commit
50716f5ced
|
@ -2200,17 +2200,16 @@ class TelegramClient(TelegramBareClient):
|
||||||
|
|
||||||
# region Event handling
|
# region Event handling
|
||||||
|
|
||||||
def on(self, event):
|
def on(self, event, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Decorator helper method around add_event_handler().
|
Decorator helper method around add_event_handler().
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
event (`_EventBuilder` | `type`):
|
event (`_EventBuilder` | `type`):
|
||||||
The event builder class or instance to be used,
|
The event builder class or instance to be used,
|
||||||
for instance ``events.NewMessage``.
|
for instance ``events.NewMessage``.
|
||||||
"""
|
"""
|
||||||
def decorator(f):
|
def decorator(f):
|
||||||
self.add_event_handler(f, event)
|
self.add_event_handler(f, *args, event=event, **kwargs)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
return decorator
|
return decorator
|
||||||
|
@ -2222,12 +2221,12 @@ class TelegramClient(TelegramBareClient):
|
||||||
self._events_pending_resolve.clear()
|
self._events_pending_resolve.clear()
|
||||||
|
|
||||||
def _on_handler(self, update):
|
def _on_handler(self, update):
|
||||||
for builder, callback in self._event_builders:
|
for builder, callback, args, kwargs in self._event_builders:
|
||||||
event = builder.build(update)
|
event = builder.build(update)
|
||||||
if event:
|
if event:
|
||||||
event._client = self
|
event._client = self
|
||||||
try:
|
try:
|
||||||
callback(event)
|
callback(event, *args, **kwargs)
|
||||||
except events.StopPropagation:
|
except events.StopPropagation:
|
||||||
__log__.debug(
|
__log__.debug(
|
||||||
"Event handler '{}' stopped chain of "
|
"Event handler '{}' stopped chain of "
|
||||||
|
@ -2236,18 +2235,15 @@ class TelegramClient(TelegramBareClient):
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
|
|
||||||
def add_event_handler(self, callback, event=None):
|
def add_event_handler(self, callback, *args, event=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
Registers the given callback to be called on the specified event.
|
Registers the given callback to be called on the specified event.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
callback (`callable`):
|
callback (`callable`):
|
||||||
The callable function accepting one parameter to be used.
|
The callable function accepting one parameter to be used.
|
||||||
|
|
||||||
event (`_EventBuilder` | `type`, optional):
|
event (`_EventBuilder` | `type`, optional):
|
||||||
The event builder class or instance to be used,
|
The event builder class or instance to be used,
|
||||||
for instance ``events.NewMessage``.
|
for instance ``events.NewMessage``.
|
||||||
|
|
||||||
If left unspecified, ``events.Raw`` (the ``Update`` objects
|
If left unspecified, ``events.Raw`` (the ``Update`` objects
|
||||||
with no further processing) will be passed instead.
|
with no further processing) will be passed instead.
|
||||||
"""
|
"""
|
||||||
|
@ -2270,12 +2266,11 @@ class TelegramClient(TelegramBareClient):
|
||||||
else:
|
else:
|
||||||
self._events_pending_resolve.append(event)
|
self._events_pending_resolve.append(event)
|
||||||
|
|
||||||
self._event_builders.append((event, callback))
|
self._event_builders.append((event, callback, args, kwargs))
|
||||||
|
|
||||||
def remove_event_handler(self, callback, event=None):
|
def remove_event_handler(self, callback, event=None):
|
||||||
"""
|
"""
|
||||||
Inverse operation of :meth:`add_event_handler`.
|
Inverse operation of :meth:`add_event_handler`.
|
||||||
|
|
||||||
If no event is given, all events for this callback are removed.
|
If no event is given, all events for this callback are removed.
|
||||||
Returns how many callbacks were removed.
|
Returns how many callbacks were removed.
|
||||||
"""
|
"""
|
||||||
|
@ -2286,7 +2281,7 @@ class TelegramClient(TelegramBareClient):
|
||||||
i = len(self._event_builders)
|
i = len(self._event_builders)
|
||||||
while i:
|
while i:
|
||||||
i -= 1
|
i -= 1
|
||||||
ev, cb = self._event_builders[i]
|
ev, cb, args, kwargs = self._event_builders[i]
|
||||||
if cb == callback and (not event or isinstance(ev, event)):
|
if cb == callback and (not event or isinstance(ev, event)):
|
||||||
del self._event_builders[i]
|
del self._event_builders[i]
|
||||||
found += 1
|
found += 1
|
||||||
|
@ -2298,7 +2293,7 @@ class TelegramClient(TelegramBareClient):
|
||||||
Lists all added event handlers, returning a list of pairs
|
Lists all added event handlers, returning a list of pairs
|
||||||
consisting of (callback, event).
|
consisting of (callback, event).
|
||||||
"""
|
"""
|
||||||
return [(callback, event) for event, callback in self._event_builders]
|
return [(callback, event) for event, callback, args, kwargs in self._event_builders]
|
||||||
|
|
||||||
def add_update_handler(self, handler):
|
def add_update_handler(self, handler):
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user