From b6f28b2ec6b9e9be76b23e57686a9539e9ff7c03 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 9 Apr 2018 23:30:50 +0200 Subject: [PATCH] Add base Filter class --- pyrogram/client/filters/filter.py | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 pyrogram/client/filters/filter.py diff --git a/pyrogram/client/filters/filter.py b/pyrogram/client/filters/filter.py new file mode 100644 index 00000000..feec51df --- /dev/null +++ b/pyrogram/client/filters/filter.py @@ -0,0 +1,57 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + + +class Filter: + def __call__(self, message): + raise NotImplementedError + + def __invert__(self): + return InvertFilter(self) + + def __and__(self, other): + return AndFilter(self, other) + + def __or__(self, other): + return OrFilter(self, other) + + +class InvertFilter(Filter): + def __init__(self, base): + self.base = base + + def __call__(self, message): + return not self.base(message) + + +class AndFilter(Filter): + def __init__(self, base, other): + self.base = base + self.other = other + + def __call__(self, message): + return self.base(message) and self.other(message) + + +class OrFilter(Filter): + def __init__(self, base, other): + self.base = base + self.other = other + + def __call__(self, message): + return self.base(message) or self.other(message)