From 09810680e89dd5f870f98e60199389fb676d5f93 Mon Sep 17 00:00:00 2001 From: Cathy Hu Date: Tue, 8 Sep 2020 13:02:07 +0200 Subject: [PATCH] [core] Add default trigger value --- .../hoodsettings/hoodsettings.component.html | 45 ++++++++++++++++++ .../hoodsettings/hoodsettings.component.scss | 13 +++++ kibicara-frontend/src/assets/badwords.png | Bin 0 -> 24451 bytes kibicara/platformapi.py | 6 +-- kibicara/webapi/hoods/__init__.py | 4 ++ tests/test_api_email_happy_path.py | 5 +- 6 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 kibicara-frontend/src/assets/badwords.png diff --git a/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.html b/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.html index 2e05e90..45d4a8d 100644 --- a/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.html +++ b/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.html @@ -20,6 +20,51 @@ if the remaining message is legitimate. For example insults or spam words like "blockchain".

+

+ Example: + For example say you want all messages to be distributed except + messages with insult/spam words "fuck", "asshat", "blockchain" then + you can add these words to the Badwords like so: + image + Note the dot in the Triggers section. It means that every message is + being relayed except those in badwords. If you would remove it, no + message would be relayed at all, so only change the Trigger section if + you are sure what you do. +

+

+ Now if a user sends a message including "asshat" the message will + not be distributed. For example: +

+
+ + xyz is an asshat! + This message will + not be distributed. + + + xyz is an verybigAsshat! + This message will + not be distributed. + + + xyz is nice! + This message will be distributed. + +
+

+ For experts only: We use python re module with + re.search(pattern, string, flags=re.IGNORECASE) for + both Triggers and Badwords. View + Documentation. +

diff --git a/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.scss b/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.scss index 50e0136..abc1b05 100644 --- a/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.scss +++ b/kibicara-frontend/src/app/dashboard/board/hoodsettings/hoodsettings.component.scss @@ -22,3 +22,16 @@ margin-top: 2px; margin-left: 10px; } + +.image { + width: 80%; + margin-left: 10%; + margin-right: 10%; +} + +.example-container { + margin: 5%; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 10px; +} diff --git a/kibicara-frontend/src/assets/badwords.png b/kibicara-frontend/src/assets/badwords.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdb2ee6c1d4803f556dae2e6ec7aa77fdb0bb46 GIT binary patch literal 24451 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