mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-08-04 04:00:18 +03:00
Add pattern to CallbackQuery event.
This commit is contained in:
parent
b6fe38f2ae
commit
86e1a98d87
|
@ -26,9 +26,13 @@ class CallbackQuery(EventBuilder):
|
||||||
can use ``re.compile(b'data_')``.
|
can use ``re.compile(b'data_')``.
|
||||||
"""
|
"""
|
||||||
def __init__(
|
def __init__(
|
||||||
self, chats=None, *, blacklist_chats=False, func=None, data=None):
|
self, chats=None, *, blacklist_chats=False, func=None, data=None, pattern=None):
|
||||||
super().__init__(chats, blacklist_chats=blacklist_chats, func=func)
|
super().__init__(chats, blacklist_chats=blacklist_chats, func=func)
|
||||||
|
|
||||||
|
if data is None and pattern is None:
|
||||||
|
self._log.warn("Please don't use both data and pattern.data will be ignored if you do so")
|
||||||
|
data = None
|
||||||
|
|
||||||
if isinstance(data, bytes):
|
if isinstance(data, bytes):
|
||||||
self.data = data
|
self.data = data
|
||||||
elif isinstance(data, str):
|
elif isinstance(data, str):
|
||||||
|
@ -44,6 +48,19 @@ class CallbackQuery(EventBuilder):
|
||||||
else:
|
else:
|
||||||
raise TypeError('Invalid data type given')
|
raise TypeError('Invalid data type given')
|
||||||
|
|
||||||
|
if isinstance(pattern, str):
|
||||||
|
self.pattern = re.compile(pattern).match
|
||||||
|
elif not pattern or callable(pattern):
|
||||||
|
self.pattern = pattern
|
||||||
|
elif hasattr(pattern, 'match') and callable(pattern.match):
|
||||||
|
self.pattern = pattern.match
|
||||||
|
else:
|
||||||
|
raise TypeError('Invalid pattern type given')
|
||||||
|
|
||||||
|
self._no_check = all(x is None for x in (
|
||||||
|
self.chats, self.func, self.data, self.pattern,
|
||||||
|
))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build(cls, update):
|
def build(cls, update):
|
||||||
if isinstance(update, types.UpdateBotCallbackQuery):
|
if isinstance(update, types.UpdateBotCallbackQuery):
|
||||||
|
@ -62,6 +79,9 @@ class CallbackQuery(EventBuilder):
|
||||||
|
|
||||||
def filter(self, event):
|
def filter(self, event):
|
||||||
# We can't call super().filter(...) because it ignores chat_instance
|
# We can't call super().filter(...) because it ignores chat_instance
|
||||||
|
if self._no_check:
|
||||||
|
return event
|
||||||
|
|
||||||
if self.chats is not None:
|
if self.chats is not None:
|
||||||
inside = event.query.chat_instance in self.chats
|
inside = event.query.chat_instance in self.chats
|
||||||
if event.chat_id:
|
if event.chat_id:
|
||||||
|
@ -78,6 +98,12 @@ class CallbackQuery(EventBuilder):
|
||||||
elif event.query.data != self.data:
|
elif event.query.data != self.data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if self.pattern:
|
||||||
|
match = self.pattern(event.message.message or '')
|
||||||
|
if not match:
|
||||||
|
return
|
||||||
|
event.pattern_match = match
|
||||||
|
|
||||||
if not self.func or self.func(event):
|
if not self.func or self.func(event):
|
||||||
return event
|
return event
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user