diff --git a/telebot/__init__.py b/telebot/__init__.py index 504e515..def8983 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -185,6 +185,7 @@ class TeleBot: self.poll_answer_handlers = [] self.my_chat_member_handlers = [] self.chat_member_handlers = [] + self.custom_filters = {} if apihelper.ENABLE_MIDDLEWARE: self.typed_middleware_handlers = { @@ -3037,8 +3038,16 @@ class TeleBot: return True - @staticmethod - def _test_filter(message_filter, filter_value, message): + def create_filter(self, custom_filter): + """ + Create custom filter. + :params: + custom_filter: Class with check(message) method.""" + self.custom_filters[custom_filter.key] = custom_filter + + + + def _test_filter(self, message_filter, filter_value, message): """ Test filters :param message_filter: Filter type passed in handler @@ -3053,6 +3062,7 @@ class TeleBot: # 'func': lambda msg: filter_value(msg) # } # return test_cases.get(message_filter, lambda msg: False)(message) + if message_filter == 'content_types': return message.content_type in filter_value elif message_filter == 'regexp': @@ -3064,7 +3074,15 @@ class TeleBot: elif message_filter == 'func': return filter_value(message) else: - return False + if message_filter in self.custom_filters: + if message_filter in self.custom_filters: + filter_check = self.custom_filters.get(message_filter) + if filter_value == filter_check.check(message): return True + else: return False + else: + return False + + def _notify_command_handlers(self, handlers, new_messages): """ diff --git a/telebot/util.py b/telebot/util.py index f871f09..310f4c5 100644 --- a/telebot/util.py +++ b/telebot/util.py @@ -455,3 +455,4 @@ def webhook_google_functions(bot, request): return 'Bot FAIL', 400 else: return 'Bot ON' +