Initial import with modified Dockerfile for env-based config generation
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// mentionRegex matches @username patterns
|
||||
// Supports alphanumeric characters, underscores, and hyphens
|
||||
var mentionRegex = regexp.MustCompile(`@([a-zA-Z0-9_-]+)`)
|
||||
|
||||
// ExtractMentions extracts all @mentioned usernames from text
|
||||
func ExtractMentions(text string) []string {
|
||||
if text == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
matches := mentionRegex.FindAllStringSubmatch(text, -1)
|
||||
if len(matches) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Deduplicate mentions
|
||||
seen := make(map[string]bool)
|
||||
var usernames []string
|
||||
|
||||
for _, match := range matches {
|
||||
if len(match) < 2 {
|
||||
continue
|
||||
}
|
||||
username := strings.ToLower(match[1])
|
||||
|
||||
// Skip common false positives
|
||||
if isCommonFalsePositive(username) {
|
||||
continue
|
||||
}
|
||||
|
||||
if !seen[username] {
|
||||
seen[username] = true
|
||||
usernames = append(usernames, username)
|
||||
}
|
||||
}
|
||||
|
||||
return usernames
|
||||
}
|
||||
|
||||
// ReplaceMentionsWithSlackIDs replaces @username with <@SLACK_ID> format
|
||||
func ReplaceMentionsWithSlackIDs(text string, usernameToSlackID map[string]string) string {
|
||||
if text == "" || len(usernameToSlackID) == 0 {
|
||||
return text
|
||||
}
|
||||
|
||||
result := mentionRegex.ReplaceAllStringFunc(text, func(match string) string {
|
||||
username := strings.ToLower(strings.TrimPrefix(match, "@"))
|
||||
if slackID, ok := usernameToSlackID[username]; ok {
|
||||
return "<@" + slackID + ">"
|
||||
}
|
||||
return match // Keep original if no mapping found
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// isCommonFalsePositive checks if a mention is likely not a real username
|
||||
func isCommonFalsePositive(username string) bool {
|
||||
// Common patterns that look like mentions but aren't
|
||||
falsePositives := map[string]bool{
|
||||
"param": true,
|
||||
"returns": true,
|
||||
"throws": true,
|
||||
"deprecated": true,
|
||||
"see": true,
|
||||
"link": true,
|
||||
"code": true,
|
||||
"example": true,
|
||||
"todo": true,
|
||||
"fixme": true,
|
||||
"note": true,
|
||||
"warning": true,
|
||||
"author": true,
|
||||
"version": true,
|
||||
"since": true,
|
||||
}
|
||||
|
||||
return falsePositives[username]
|
||||
}
|
||||
Reference in New Issue
Block a user