PLT-6271 Changed word splitting to initially split on any non-name character (#6261)
* PLT-6271 Changed word splitting to initially split on any non-name character * Fixed detection of out of channel mentions
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
83bfd95f65
Коммит
c3e17da8c8
@@ -665,8 +665,8 @@ func GetExplicitMentions(message string, keywords map[string][]string) (map[stri
|
||||
message = removeCodeFromMessage(message)
|
||||
|
||||
for _, word := range strings.FieldsFunc(message, func(c rune) bool {
|
||||
// Split on whitespace (as strings.Fields normally does) or on Markdown characters
|
||||
return unicode.IsSpace(c) || c == '*' || c == '~'
|
||||
// Split on any whitespace or punctuation that can't be part of an at mention
|
||||
return !(c == '.' || c == '-' || c == '_' || c == '@' || unicode.IsLetter(c) || unicode.IsNumber(c))
|
||||
}) {
|
||||
isMention := false
|
||||
|
||||
@@ -694,11 +694,14 @@ func GetExplicitMentions(message string, keywords map[string][]string) (map[stri
|
||||
isMention = true
|
||||
}
|
||||
|
||||
if !isMention {
|
||||
// No matches were found with the string split just on whitespace so try further splitting
|
||||
// the message on punctuation
|
||||
if isMention {
|
||||
continue
|
||||
}
|
||||
|
||||
if strings.ContainsAny(word, ".-") {
|
||||
// This word contains a character that may be the end of a sentence, so split further
|
||||
splitWords := strings.FieldsFunc(word, func(c rune) bool {
|
||||
return model.SplitRunes[c]
|
||||
return c == '.' || c == '-'
|
||||
})
|
||||
|
||||
for _, splitWord := range splitWords {
|
||||
@@ -727,6 +730,9 @@ func GetExplicitMentions(message string, keywords map[string][]string) (map[stri
|
||||
potentialOthersMentioned = append(potentialOthersMentioned, username)
|
||||
}
|
||||
}
|
||||
} else if _, ok := systemMentions[word]; !ok && strings.HasPrefix(word, "@") {
|
||||
username := word[1:]
|
||||
potentialOthersMentioned = append(potentialOthersMentioned, username)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user