This commit is contained in:
Jahongir Qurbonov 2024-08-20 00:30:46 +05:00
parent b2c49912fa
commit 3b5b6a1da7
6 changed files with 33 additions and 28 deletions

View File

@ -23,7 +23,7 @@ from ...session import (
) )
from ...tl import Request, abcs from ...tl import Request, abcs
from ..events import Event from ..events import Event
from ..events.filters import Filter from ..events.filters import FilterType
from ..types import ( from ..types import (
AdminRight, AdminRight,
AlbumBuilder, AlbumBuilder,
@ -258,7 +258,7 @@ class Client:
self._dispatcher: Optional[asyncio.Task[None]] = None self._dispatcher: Optional[asyncio.Task[None]] = None
self._handlers: dict[ self._handlers: dict[
Type[Event], Type[Event],
list[tuple[Callable[[Any], Awaitable[Any]], Optional[Filter]]], list[tuple[Callable[[Any], Awaitable[Any]], Optional[FilterType]]],
] = {} ] = {}
self._check_all_handlers = check_all_handlers self._check_all_handlers = check_all_handlers
@ -272,7 +272,7 @@ class Client:
handler: Callable[[AnyEvent], Awaitable[Any]], handler: Callable[[AnyEvent], Awaitable[Any]],
/, /,
event_cls: Type[AnyEvent], event_cls: Type[AnyEvent],
filter: Optional[Filter] = None, filter: Optional[FilterType] = None,
) -> None: ) -> None:
""" """
Register a callable to be invoked when the provided event type occurs. Register a callable to be invoked when the provided event type occurs.
@ -761,7 +761,7 @@ class Client:
def get_handler_filter( def get_handler_filter(
self, handler: Callable[[AnyEvent], Awaitable[Any]], / self, handler: Callable[[AnyEvent], Awaitable[Any]], /
) -> Optional[Filter]: ) -> Optional[FilterType]:
""" """
Get the filter associated to the given event handler. Get the filter associated to the given event handler.
@ -1036,7 +1036,7 @@ class Client:
return await is_authorized(self) return await is_authorized(self)
def on( def on(
self, event_cls: Type[AnyEvent], /, filter: Optional[Filter] = None self, event_cls: Type[AnyEvent], /, filter: Optional[FilterType] = None
) -> Callable[ ) -> Callable[
[Callable[[AnyEvent], Awaitable[Any]]], Callable[[AnyEvent], Awaitable[Any]] [Callable[[AnyEvent], Awaitable[Any]]], Callable[[AnyEvent], Awaitable[Any]]
]: ]:
@ -1853,7 +1853,7 @@ class Client:
self, self,
handler: Callable[[AnyEvent], Awaitable[Any]], handler: Callable[[AnyEvent], Awaitable[Any]],
/, /,
filter: Optional[Filter] = None, filter: Optional[FilterType] = None,
) -> None: ) -> None:
""" """
Set the filter to use for the given event handler. Set the filter to use for the given event handler.

View File

@ -9,7 +9,7 @@ from ...session import Gap
from ...tl import abcs from ...tl import abcs
from ..events import Continue from ..events import Continue
from ..events import Event as EventBase from ..events import Event as EventBase
from ..events.filters import Filter from ..events.filters import FilterType
from ..types import build_chat_map from ..types import build_chat_map
if TYPE_CHECKING: if TYPE_CHECKING:
@ -21,7 +21,7 @@ UPDATE_LIMIT_EXCEEDED_LOG_COOLDOWN = 300
def on( def on(
self: Client, event_cls: Type[Event], /, filter: Optional[Filter] = None self: Client, event_cls: Type[Event], /, filter: Optional[FilterType] = None
) -> Callable[[Callable[[Event], Awaitable[Any]]], Callable[[Event], Awaitable[Any]]]: ) -> Callable[[Callable[[Event], Awaitable[Any]]], Callable[[Event], Awaitable[Any]]]:
def wrapper( def wrapper(
handler: Callable[[Event], Awaitable[Any]], handler: Callable[[Event], Awaitable[Any]],
@ -37,7 +37,7 @@ def add_event_handler(
handler: Callable[[Event], Awaitable[Any]], handler: Callable[[Event], Awaitable[Any]],
/, /,
event_cls: Type[Event], event_cls: Type[Event],
filter: Optional[Filter] = None, filter: Optional[FilterType] = None,
) -> None: ) -> None:
self._handlers.setdefault(event_cls, []).append((handler, filter)) self._handlers.setdefault(event_cls, []).append((handler, filter))
@ -55,7 +55,7 @@ def remove_event_handler(
def get_handler_filter( def get_handler_filter(
self: Client, handler: Callable[[Event], Awaitable[Any]], / self: Client, handler: Callable[[Event], Awaitable[Any]], /
) -> Optional[Filter]: ) -> Optional[FilterType]:
for handlers in self._handlers.values(): for handlers in self._handlers.values():
for h, f in handlers: for h, f in handlers:
if h == handler: if h == handler:
@ -67,7 +67,7 @@ def set_handler_filter(
self: Client, self: Client,
handler: Callable[[Event], Awaitable[Any]], handler: Callable[[Event], Awaitable[Any]],
/, /,
filter: Optional[Filter] = None, filter: Optional[FilterType] = None,
) -> None: ) -> None:
for handlers in self._handlers.values(): for handlers in self._handlers.values():
for i, (h, _) in enumerate(handlers): for i, (h, _) in enumerate(handlers):

View File

@ -1,12 +1,12 @@
from .callback import Data from .callback import Data
from .combinators import All, Any, Filter, Not from .combinators import All, Any, FilterType, Not
from .common import Chats, ChatType, Senders from .common import Chats, ChatType, Senders
from .messages import Command, Forward, Incoming, Media, Outgoing, Reply, Text from .messages import Command, Forward, Incoming, Media, Outgoing, Reply, Text
__all__ = [ __all__ = [
"All", "All",
"Any", "Any",
"Filter", "FilterType",
"Not", "Not",
"Chats", "Chats",
"ChatType", "ChatType",

View File

@ -6,7 +6,7 @@ from typing import Awaitable, TypeAlias
from ..event import Event from ..event import Event
Filter: TypeAlias = Callable[[Event], bool | Awaitable[bool]] FilterType: TypeAlias = Callable[[Event], bool | Awaitable[bool]]
class Combinable(abc.ABC): class Combinable(abc.ABC):
@ -22,7 +22,7 @@ class Combinable(abc.ABC):
Multiple ``~`` will toggle between using :class:`Not` and not using it. Multiple ``~`` will toggle between using :class:`Not` and not using it.
""" """
def __or__(self, other: typing.Any) -> Filter: def __or__(self, other: typing.Any) -> FilterType:
if not callable(other): if not callable(other):
return NotImplemented return NotImplemented
@ -30,7 +30,7 @@ class Combinable(abc.ABC):
rhs = other.filters if isinstance(other, Any) else (other,) rhs = other.filters if isinstance(other, Any) else (other,)
return Any(*lhs, *rhs) # type: ignore [arg-type] return Any(*lhs, *rhs) # type: ignore [arg-type]
def __and__(self, other: typing.Any) -> Filter: def __and__(self, other: typing.Any) -> FilterType:
if not callable(other): if not callable(other):
return NotImplemented return NotImplemented
@ -38,7 +38,7 @@ class Combinable(abc.ABC):
rhs = other.filters if isinstance(other, All) else (other,) rhs = other.filters if isinstance(other, All) else (other,)
return All(*lhs, *rhs) # type: ignore [arg-type] return All(*lhs, *rhs) # type: ignore [arg-type]
def __invert__(self) -> Filter: def __invert__(self) -> FilterType:
return self.filter if isinstance(self, Not) else Not(self) # type: ignore [return-value] return self.filter if isinstance(self, Not) else Not(self) # type: ignore [return-value]
@abc.abstractmethod @abc.abstractmethod
@ -72,11 +72,13 @@ class Any(Combinable):
__slots__ = ("_filters",) __slots__ = ("_filters",)
def __init__(self, filter1: Filter, filter2: Filter, *filters: Filter) -> None: def __init__(
self, filter1: FilterType, filter2: FilterType, *filters: FilterType
) -> None:
self._filters = (filter1, filter2, *filters) self._filters = (filter1, filter2, *filters)
@property @property
def filters(self) -> tuple[Filter, ...]: def filters(self) -> tuple[FilterType, ...]:
""" """
The filters being checked, in order. The filters being checked, in order.
""" """
@ -116,11 +118,13 @@ class All(Combinable):
__slots__ = ("_filters",) __slots__ = ("_filters",)
def __init__(self, filter1: Filter, filter2: Filter, *filters: Filter) -> None: def __init__(
self, filter1: FilterType, filter2: FilterType, *filters: FilterType
) -> None:
self._filters = (filter1, filter2, *filters) self._filters = (filter1, filter2, *filters)
@property @property
def filters(self) -> tuple[Filter, ...]: def filters(self) -> tuple[FilterType, ...]:
""" """
The filters being checked, in order. The filters being checked, in order.
""" """
@ -158,11 +162,11 @@ class Not(Combinable):
__slots__ = ("_filter",) __slots__ = ("_filter",)
def __init__(self, filter: Filter) -> None: def __init__(self, filter: FilterType) -> None:
self._filter = filter self._filter = filter
@property @property
def filter(self) -> Filter: def filter(self) -> FilterType:
""" """
The filter being negated. The filter being negated.
""" """

View File

@ -1,7 +1,7 @@
from __future__ import annotations from __future__ import annotations
import weakref import weakref
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional, TypeAlias
from ....tl import types from ....tl import types
@ -9,7 +9,7 @@ if TYPE_CHECKING:
from ..message import Message from ..message import Message
ButtonTypes = ( ButtonType: TypeAlias = (
types.KeyboardButton types.KeyboardButton
| types.KeyboardButtonUrl | types.KeyboardButtonUrl
| types.KeyboardButtonCallback | types.KeyboardButtonCallback
@ -53,7 +53,7 @@ class Button:
f"Can't instantiate abstract class {self.__class__.__name__}" f"Can't instantiate abstract class {self.__class__.__name__}"
) )
self._raw: ButtonTypes = types.KeyboardButton(text=text) self._raw: ButtonType = types.KeyboardButton(text=text)
self._msg: Optional[weakref.ReferenceType[Message]] = None self._msg: Optional[weakref.ReferenceType[Message]] = None
@property @property

View File

@ -7,6 +7,7 @@ When the return value is :data:`True`, the associated :mod:`~telethon.events` ha
The :doc:`/concepts/updates` concept to learn to combine filters or define your own. The :doc:`/concepts/updates` concept to learn to combine filters or define your own.
""" """
from .._impl.client.events.filters import ( from .._impl.client.events.filters import (
All, All,
Any, Any,
@ -14,7 +15,7 @@ from .._impl.client.events.filters import (
ChatType, ChatType,
Command, Command,
Data, Data,
Filter, FilterType,
Forward, Forward,
Incoming, Incoming,
Media, Media,
@ -31,7 +32,7 @@ __all__ = [
"Chats", "Chats",
"ChatType", "ChatType",
"Command", "Command",
"Filter", "FilterType",
"Forward", "Forward",
"Incoming", "Incoming",
"Media", "Media",