From 0e586abefe9c5306eafa5624b468944d7e2f1f2f Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Thu, 14 Sep 2023 21:32:21 +0200 Subject: [PATCH] Add ChatType filter --- .../_impl/client/events/filters/common.py | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/client/src/telethon/_impl/client/events/filters/common.py b/client/src/telethon/_impl/client/events/filters/common.py index 8376511b..e2b9c499 100644 --- a/client/src/telethon/_impl/client/events/filters/common.py +++ b/client/src/telethon/_impl/client/events/filters/common.py @@ -1,5 +1,6 @@ -from typing import Callable, Sequence, Tuple, Union +from typing import Callable, Literal, Sequence, Tuple, Union +from ...types import Channel, Group, User from ..event import Event Filter = Callable[[Event], bool] @@ -51,3 +52,40 @@ class Senders: sender = getattr(event, "sender", None) id = getattr(sender, "id", None) return id in self._senders + + +class ChatType: + """ + Filter by chat type, either ``'user'``, ``'group'`` or ``'broadcast'``. + """ + + __slots__ = ("_type",) + + def __init__( + self, + type: Union[Literal["user"], Literal["group"], Literal["broadcast"]], + ) -> None: + if type == "user": + self._type: Union[User, Group, Channel] = User + elif type == "group": + self._type = Group + elif type == "broadcast": + self._type = Channel + else: + raise TypeError(f"unrecognised chat type: {type}") + + @property + def type(self) -> Union[Literal["user"], Literal["group"], Literal["broadcast"]]: + """ + The chat type this filter is filtering on. + """ + if self._type == User: + return "user" + elif self._type == Group: + return "group" + elif self._type == Channel: + return "broadcast" + + def __call__(self, event: Event) -> bool: + sender = getattr(event, "chat", None) + return isinstance(sender, self._type)