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:
parent
ab64e17464
commit
b25d2846e9
@ -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,
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user