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

TextFilter class supports case insensitiveness with lazy translations

This commit is contained in:
abdullaev388 2022-04-23 11:53:55 +05:00
parent ab64e17464
commit b25d2846e9
2 changed files with 9 additions and 15 deletions

View File

@ -39,7 +39,7 @@ class TextFilter:
""" """
Advanced text filter to check (types.Message, types.CallbackQuery, types.InlineQuery, types.Poll) Advanced text filter to check (types.Message, types.CallbackQuery, types.InlineQuery, types.Poll)
example of usage is in examples/custom_filters/advanced_text_filter.py example of usage is in examples/asynchronous_telebot/custom_filters/advanced_text_filter.py
""" """
def __init__(self, def __init__(self,

View File

@ -69,7 +69,7 @@ class TextFilter:
self.ends_with = self._check_iterable(ends_with, filter_name='ends_with') self.ends_with = self._check_iterable(ends_with, filter_name='ends_with')
self.ignore_case = ignore_case self.ignore_case = ignore_case
def _check_iterable(self, iterable, filter_name: str): def _check_iterable(self, iterable, filter_name):
if not iterable: if not iterable:
pass pass
elif not isinstance(iterable, str) and not isinstance(iterable, list) and not isinstance(iterable, tuple): elif not isinstance(iterable, str) and not isinstance(iterable, list) and not isinstance(iterable, tuple):
@ -95,39 +95,33 @@ class TextFilter:
if self.ignore_case: if self.ignore_case:
text = text.lower() text = text.lower()
prepare_func = lambda string: str(string).lower()
else:
prepare_func = str
if self.equals: if self.equals:
self.equals = self.equals.lower() result = prepare_func(self.equals) == text
elif self.contains:
self.contains = tuple(map(str.lower, self.contains))
elif self.starts_with:
self.starts_with = tuple(map(str.lower, self.starts_with))
elif self.ends_with:
self.ends_with = tuple(map(str.lower, self.ends_with))
if self.equals:
result = self.equals == text
if result: if result:
return True return True
elif not result and not any((self.contains, self.starts_with, self.ends_with)): elif not result and not any((self.contains, self.starts_with, self.ends_with)):
return False return False
if self.contains: if self.contains:
result = any([i in text for i in self.contains]) result = any([prepare_func(i) in text for i in self.contains])
if result: if result:
return True return True
elif not result and not any((self.starts_with, self.ends_with)): elif not result and not any((self.starts_with, self.ends_with)):
return False return False
if self.starts_with: if self.starts_with:
result = any([text.startswith(i) for i in self.starts_with]) result = any([text.startswith(prepare_func(i)) for i in self.starts_with])
if result: if result:
return True return True
elif not result and not self.ends_with: elif not result and not self.ends_with:
return False return False
if self.ends_with: if self.ends_with:
return any([text.endswith(i) for i in self.ends_with]) return any([text.endswith(prepare_func(i)) for i in self.ends_with])
return False return False