1
0
mirror of https://github.com/eternnoir/pyTelegramBotAPI.git synced 2023-08-10 21:12:57 +03:00

Custom filters

Added new feature - from now you can create your own custom filters
This commit is contained in:
coder2020official 2021-09-11 21:47:59 +05:00
parent 78fb69ded1
commit ec8975c9e3
2 changed files with 22 additions and 3 deletions

View File

@ -185,6 +185,7 @@ class TeleBot:
self.poll_answer_handlers = [] self.poll_answer_handlers = []
self.my_chat_member_handlers = [] self.my_chat_member_handlers = []
self.chat_member_handlers = [] self.chat_member_handlers = []
self.custom_filters = {}
if apihelper.ENABLE_MIDDLEWARE: if apihelper.ENABLE_MIDDLEWARE:
self.typed_middleware_handlers = { self.typed_middleware_handlers = {
@ -3037,8 +3038,16 @@ class TeleBot:
return True return True
@staticmethod def create_filter(self, custom_filter):
def _test_filter(message_filter, filter_value, message): """
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 Test filters
:param message_filter: Filter type passed in handler :param message_filter: Filter type passed in handler
@ -3053,6 +3062,7 @@ class TeleBot:
# 'func': lambda msg: filter_value(msg) # 'func': lambda msg: filter_value(msg)
# } # }
# return test_cases.get(message_filter, lambda msg: False)(message) # return test_cases.get(message_filter, lambda msg: False)(message)
if message_filter == 'content_types': if message_filter == 'content_types':
return message.content_type in filter_value return message.content_type in filter_value
elif message_filter == 'regexp': elif message_filter == 'regexp':
@ -3064,7 +3074,15 @@ class TeleBot:
elif message_filter == 'func': elif message_filter == 'func':
return filter_value(message) return filter_value(message)
else: 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): def _notify_command_handlers(self, handlers, new_messages):
""" """

View File

@ -455,3 +455,4 @@ def webhook_google_functions(bot, request):
return 'Bot FAIL', 400 return 'Bot FAIL', 400
else: else:
return 'Bot ON' return 'Bot ON'