From ba0371f89e2d6fb758cdb11e404cbf435ac3ced3 Mon Sep 17 00:00:00 2001 From: apepenkov <39992738+apepenkov@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:28:18 +0300 Subject: [PATCH] Add events.filters.Data (#4248) --- .../_impl/client/events/filters/__init__.py | 2 ++ .../_impl/client/events/filters/callback.py | 23 +++++++++++++++++++ client/src/telethon/events/filters.py | 2 ++ 3 files changed, 27 insertions(+) create mode 100644 client/src/telethon/_impl/client/events/filters/callback.py diff --git a/client/src/telethon/_impl/client/events/filters/__init__.py b/client/src/telethon/_impl/client/events/filters/__init__.py index 740f1754..85b46d6c 100644 --- a/client/src/telethon/_impl/client/events/filters/__init__.py +++ b/client/src/telethon/_impl/client/events/filters/__init__.py @@ -1,6 +1,7 @@ from .combinators import All, Any, Filter, Not from .common import Chats, ChatType, Senders from .messages import Command, Forward, Incoming, Media, Outgoing, Reply, Text +from .callback import Data __all__ = [ "All", @@ -17,4 +18,5 @@ __all__ = [ "Outgoing", "Reply", "Text", + "Data", ] diff --git a/client/src/telethon/_impl/client/events/filters/callback.py b/client/src/telethon/_impl/client/events/filters/callback.py new file mode 100644 index 00000000..af50d832 --- /dev/null +++ b/client/src/telethon/_impl/client/events/filters/callback.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from .combinators import Combinable +from ..event import Event + + +class Data(Combinable): + """ + Filter by ``event.data`` using a full bytes match, used for events such as :class:`telethon.events.ButtonCallback`. + + It checks if ``event.data`` is equal to the data passed to the filter. + + :param data: Bytes to match data with. + """ + + __slots__ = ("_data",) + + def __init__(self, data: bytes) -> None: + self._data = data + + def __call__(self, event: Event) -> bool: + data = getattr(event, "data", None) + return self._data == data if data is not None else False diff --git a/client/src/telethon/events/filters.py b/client/src/telethon/events/filters.py index 93944358..c4b0f1e5 100644 --- a/client/src/telethon/events/filters.py +++ b/client/src/telethon/events/filters.py @@ -22,6 +22,7 @@ from .._impl.client.events.filters import ( Reply, Senders, Text, + Data, ) __all__ = [ @@ -39,4 +40,5 @@ __all__ = [ "Reply", "Senders", "Text", + "Data" ]