From 2ff4ae2dadf9034891dcb47890eec02ae98ffe40 Mon Sep 17 00:00:00 2001 From: Twentysix Date: Sat, 26 Feb 2022 15:02:09 +0100 Subject: [PATCH] [Defender] WD: Pattern match for message-contains-word --- defender/core/warden/rule.py | 6 +++--- defender/tests/test_warden.py | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/defender/core/warden/rule.py b/defender/core/warden/rule.py index 5d15dda..e2e7cf4 100644 --- a/defender/core/warden/rule.py +++ b/defender/core/warden/rule.py @@ -462,11 +462,11 @@ async def message_matches_regex(params: models.IsStr): @checker(Condition.MessageContainsWord) async def message_contains_word(params: models.NonEmptyListStr): - to_check = [w.lower() for w in params.value] message_words = message.content.lower().split() for word in message_words: - if word in to_check: - return True + for pattern in params.value: + if fnmatch.fnmatch(word, pattern.lower()): + return True return False @checker(Condition.UserActivityMatchesAny) diff --git a/defender/tests/test_warden.py b/defender/tests/test_warden.py index 1686c6f..c4b6f9d 100644 --- a/defender/tests/test_warden.py +++ b/defender/tests/test_warden.py @@ -394,11 +394,14 @@ async def eval_cond(condition: Condition, params, expected_result: bool): guild=FAKE_GUILD, message=FAKE_MESSAGE)) is expected_result - FAKE_MESSAGE.content = "aaa 2626 aaa" + FAKE_MESSAGE.content = "aaa 2626 aaa I like cats" await eval_cond(Condition.MessageMatchesAny, ["abcd", "*hello*"], False) await eval_cond(Condition.MessageMatchesAny, ["*2626*", "hi", 12345], True) + await eval_cond(Condition.MessageContainsWord, [6, "aa", "2"], False) await eval_cond(Condition.MessageContainsWord, [111, "111", "AAA"], True) + await eval_cond(Condition.MessageContainsWord, ["c?ts"], True) + await eval_cond(Condition.MessageContainsWord, ["c?t"], False) FAKE_MESSAGE.attachments = [] await eval_cond(Condition.MessageHasAttachment, "true", False)