|
|
|
|
@@ -14,9 +14,14 @@ class TextFilter(BaseEventFilter):
|
|
|
|
|
|
|
|
|
|
If this filter matches, you can access `event.body` and it stores
|
|
|
|
|
unformatted text of the message.
|
|
|
|
|
|
|
|
|
|
If `event.body` value equals to `event.source["content"]["filename"]` (if it
|
|
|
|
|
is present, of course) then this filter will not match it by default. You
|
|
|
|
|
may disable `ignore_filename_in_body` to disable this feature.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, *, ignore_filename_in_body: bool = True, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
self._ignore_filename_in_body = ignore_filename_in_body
|
|
|
|
|
|
|
|
|
|
def __repr__(self) -> str:
|
|
|
|
|
return "TextFilter()"
|
|
|
|
|
@@ -28,6 +33,10 @@ class TextFilter(BaseEventFilter):
|
|
|
|
|
return False
|
|
|
|
|
if not event.body.strip(): # type: ignore
|
|
|
|
|
return False
|
|
|
|
|
if self._ignore_filename_in_body:
|
|
|
|
|
content = event.source["content"]
|
|
|
|
|
if "filename" in content and content["filename"] == event.body: # type: ignore
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
class FormattedTextFilter(BaseEventFilter):
|
|
|
|
|
@@ -40,8 +49,8 @@ class FormattedTextFilter(BaseEventFilter):
|
|
|
|
|
If this filter matches, you can access `event.formatted_body` and it stores
|
|
|
|
|
formatted text of the message.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return "FormattedTextFilter()"
|
|
|
|
|
@@ -68,8 +77,8 @@ class TextContainsFilter(TextFilter):
|
|
|
|
|
is True. That means you must ensure that `needle` is lower case. The filter
|
|
|
|
|
will never match otherwise.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, needle: str | list[str], *, any_case: bool = True):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, needle: str | list[str], *, any_case: bool = True, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
if type(needle) is str:
|
|
|
|
|
needle = [needle]
|
|
|
|
|
self._any_case = any_case
|
|
|
|
|
@@ -100,8 +109,8 @@ class TextStartsWithFilter(TextFilter):
|
|
|
|
|
is True. That means you must ensure that `needle` is lower case. The filter
|
|
|
|
|
will never match otherwise.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, substring: str | list[str], *, any_case: bool = True):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, substring: str | list[str], *, any_case: bool = True, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
if type(substring) is str:
|
|
|
|
|
substring = [substring]
|
|
|
|
|
self._any_case = any_case
|
|
|
|
|
@@ -132,8 +141,8 @@ class TextEndsWithFilter(TextFilter):
|
|
|
|
|
is True. That means you must ensure that `needle` is lower case. The filter
|
|
|
|
|
will never match otherwise.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, substring: str | list[str], *, any_case: bool = True):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, substring: str | list[str], *, any_case: bool = True, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
if type(substring) is str:
|
|
|
|
|
substring = [substring]
|
|
|
|
|
self._any_case = any_case
|
|
|
|
|
@@ -172,8 +181,8 @@ class TextCommandFilter(TextFilter):
|
|
|
|
|
`event.command_args: list[str]`. You may use this attribute in your callback
|
|
|
|
|
for this event.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, verbs: str | list[str], min_args: int = 0, max_args: int | None = None, prefix: str = "!"):
|
|
|
|
|
super().__init__()
|
|
|
|
|
def __init__(self, verbs: str | list[str], min_args: int = 0, max_args: int | None = None, prefix: str = "!", **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
if type(verbs) is str:
|
|
|
|
|
verbs = [verbs]
|
|
|
|
|
self._verbs = verbs
|
|
|
|
|
@@ -206,7 +215,8 @@ class TextRegexFilter(TextFilter):
|
|
|
|
|
"""
|
|
|
|
|
This filter returns True if the `event.body` passes the regex.
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, regex: re.Pattern | str):
|
|
|
|
|
def __init__(self, regex: re.Pattern | str, **kwargs):
|
|
|
|
|
super().__init__(**kwargs)
|
|
|
|
|
if isinstance(regex, str):
|
|
|
|
|
regex = re.compile(regex)
|
|
|
|
|
self._regex = regex
|
|
|
|
|
|