tam chat
This commit is contained in:
@@ -182,19 +182,63 @@ func EnumerateGUIWindows() ([]WindowInfo, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func parseKeywordList(keywords string) []string {
|
||||
keywords = strings.ReplaceAll(keywords, "\r\n", "\n")
|
||||
parts := strings.FieldsFunc(keywords, func(r rune) bool {
|
||||
return r == ',' || r == '\n' || r == ';' || r == '|'
|
||||
})
|
||||
seen := map[string]bool{}
|
||||
var list []string
|
||||
for _, p := range parts {
|
||||
trimmed := strings.TrimSpace(strings.ToLower(p))
|
||||
trimmed = strings.TrimSuffix(trimmed, ".exe")
|
||||
if trimmed == "" || seen[trimmed] {
|
||||
continue
|
||||
}
|
||||
seen[trimmed] = true
|
||||
list = append(list, trimmed)
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
var keywordAliases = map[string][]string{
|
||||
"lark": {"lark", "feishu", "larkshell", "larkhelper"},
|
||||
"feishu": {"lark", "feishu", "larkshell", "larkhelper"},
|
||||
"teams": {"teams", "ms-teams", "msteams"},
|
||||
"zalo": {"zalo", "zalopcb"},
|
||||
}
|
||||
|
||||
func expandKeyword(kw string) []string {
|
||||
base := []string{kw}
|
||||
if aliases, ok := keywordAliases[kw]; ok {
|
||||
base = append(base, aliases...)
|
||||
}
|
||||
seen := map[string]bool{}
|
||||
var out []string
|
||||
for _, a := range base {
|
||||
a = strings.TrimSpace(strings.ToLower(a))
|
||||
if a != "" && !seen[a] {
|
||||
seen[a] = true
|
||||
out = append(out, a)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func matchesAllowedKeyword(kw, pNameLower, wTitleLower string) bool {
|
||||
for _, variant := range expandKeyword(kw) {
|
||||
if strings.Contains(pNameLower, variant) || strings.Contains(wTitleLower, variant) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (b *Blocker) SetKeywords(keywords string) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
parts := strings.Split(keywords, ",")
|
||||
var list []string
|
||||
for _, p := range parts {
|
||||
trimmed := strings.TrimSpace(strings.ToLower(p))
|
||||
if trimmed != "" {
|
||||
list = append(list, trimmed)
|
||||
}
|
||||
}
|
||||
b.allowedKeywords = list
|
||||
b.allowedKeywords = parseKeywordList(keywords)
|
||||
log.Printf("[BLOCKER] Keywords updated: %v", b.allowedKeywords)
|
||||
}
|
||||
|
||||
@@ -254,7 +298,7 @@ func (b *Blocker) checkAndKill() {
|
||||
// 2. Kiểm tra xem có chứa bất kỳ từ khóa nào được cho phép không
|
||||
allowed := false
|
||||
for _, kw := range keywords {
|
||||
if strings.Contains(pNameLower, kw) || strings.Contains(wTitleLower, kw) {
|
||||
if matchesAllowedKeyword(kw, pNameLower, wTitleLower) {
|
||||
allowed = true
|
||||
break
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user