Fixed word boundary matching and made wildcards possible.
This commit is contained in:
@@ -5,7 +5,8 @@
|
|||||||
|
|
||||||
# Category: coffee
|
# Category: coffee
|
||||||
# Words that trigger tracking for coffee category
|
# Words that trigger tracking for coffee category
|
||||||
coffeeWords=("coffee" "espresso" "latte" "mocha" "cappuccino" "americano" "frappuccino" "macchiato" "cortado" "affogato")
|
# Note: coffee* allows matching at start of words (coffeehouse, coffeepot, etc.)
|
||||||
|
coffeeWords=("coffee*" "espresso" "latte" "mocha" "cappuccino" "americano" "frappuccino" "macchiato" "cortado" "affogato")
|
||||||
|
|
||||||
# Level thresholds and reward names for coffee category
|
# Level thresholds and reward names for coffee category
|
||||||
# Array key is the threshold (word count needed), value is the level name
|
# Array key is the threshold (word count needed), value is the level name
|
||||||
@@ -30,7 +31,9 @@ declare -A teaLevels=(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Category: gaming
|
# Category: gaming
|
||||||
gamingWords=("game" "gaming" "play" "played" "console" "steam" "xbox" "playstation" "nintendo" "pc gaming")
|
# Note: *game* matches game, gaming, endgame, videogame, etc.
|
||||||
|
# Note: *play* matches play, played, playing, replay, gameplay, etc.
|
||||||
|
gamingWords=("*game*" "*play*" "console" "steam" "xbox" "playstation" "nintendo" "pc gaming")
|
||||||
|
|
||||||
declare -A gamingLevels=(
|
declare -A gamingLevels=(
|
||||||
[10]="Casual Gamer"
|
[10]="Casual Gamer"
|
||||||
@@ -42,7 +45,7 @@ declare -A gamingLevels=(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Words that trigger tracking for drugs category
|
# Words that trigger tracking for drugs category
|
||||||
drugsWords=("kratom" "gummy" "hemp" "nicotine")
|
drugsWords=("kratom" "gummy" "hemp" "nicotine" "vape")
|
||||||
|
|
||||||
# Level thresholds and reward names for drugs category
|
# Level thresholds and reward names for drugs category
|
||||||
# Array key is the threshold (word count needed), value is the level name
|
# Array key is the threshold (word count needed), value is the level name
|
||||||
|
|||||||
@@ -69,10 +69,48 @@ for category in "${categories[@]}"; do
|
|||||||
# Count all occurrences of this word in the message
|
# Count all occurrences of this word in the message
|
||||||
wordLower="${word,,}"
|
wordLower="${word,,}"
|
||||||
tempMessage="$messageLower"
|
tempMessage="$messageLower"
|
||||||
while [[ "$tempMessage" =~ $wordLower ]]; do
|
|
||||||
|
# Parse wildcard markers to determine match type
|
||||||
|
# * prefix = allow match at end of larger word (e.g., *game matches endgame)
|
||||||
|
# * suffix = allow match at start of larger word (e.g., coffee* matches coffeehouse)
|
||||||
|
# both = allow match anywhere (e.g., *play* matches gameplay)
|
||||||
|
# none = exact word match only (e.g., tea only matches tea)
|
||||||
|
|
||||||
|
prefixWild=false
|
||||||
|
suffixWild=false
|
||||||
|
|
||||||
|
if [[ "$wordLower" == \** ]]; then
|
||||||
|
prefixWild=true
|
||||||
|
wordLower="${wordLower#\*}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$wordLower" == *\* ]]; then
|
||||||
|
suffixWild=true
|
||||||
|
wordLower="${wordLower%\*}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build regex pattern based on wildcard markers
|
||||||
|
if $prefixWild && $suffixWild; then
|
||||||
|
# Match anywhere in text
|
||||||
|
pattern="$wordLower"
|
||||||
|
elif $prefixWild; then
|
||||||
|
# Match at end of word or standalone
|
||||||
|
pattern="$wordLower([[:space:][:punct:]]|$)"
|
||||||
|
elif $suffixWild; then
|
||||||
|
# Match at start of word or standalone
|
||||||
|
pattern="(^|[[:space:][:punct:]])$wordLower"
|
||||||
|
else
|
||||||
|
# Exact word match only
|
||||||
|
pattern="(^|[[:space:][:punct:]])$wordLower([[:space:][:punct:]]|$)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use word boundary matching based on pattern
|
||||||
|
while [[ "$tempMessage" =~ $pattern ]]; do
|
||||||
((wordCount++))
|
((wordCount++))
|
||||||
# Remove the matched word to find more occurrences
|
# Remove the matched word to find more occurrences
|
||||||
tempMessage="${tempMessage/$wordLower/}"
|
# Use the actual matched portion to avoid removing partial matches
|
||||||
|
matchedWord="${BASH_REMATCH[0]}"
|
||||||
|
tempMessage="${tempMessage/"$matchedWord"/ }"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user