summaryrefslogtreecommitdiffstats
path: root/model
diff options
context:
space:
mode:
Diffstat (limited to 'model')
-rw-r--r--model/post.go17
-rw-r--r--model/post_test.go7
2 files changed, 24 insertions, 0 deletions
diff --git a/model/post.go b/model/post.go
index 8e4689eb7..b7b38e7ad 100644
--- a/model/post.go
+++ b/model/post.go
@@ -7,6 +7,7 @@ import (
"encoding/json"
"io"
"net/http"
+ "regexp"
"strings"
"unicode/utf8"
)
@@ -294,6 +295,22 @@ func PostPatchFromJson(data io.Reader) *PostPatch {
return &post
}
+var channelMentionRegexp = regexp.MustCompile(`\B~[a-zA-Z0-9\-_]+`)
+
+func (o *Post) ChannelMentions() (names []string) {
+ if strings.Contains(o.Message, "~") {
+ alreadyMentioned := make(map[string]bool)
+ for _, match := range channelMentionRegexp.FindAllString(o.Message, -1) {
+ name := match[1:]
+ if !alreadyMentioned[name] {
+ names = append(names, name)
+ alreadyMentioned[name] = true
+ }
+ }
+ }
+ return
+}
+
func (r *PostActionIntegrationRequest) ToJson() string {
b, err := json.Marshal(r)
if err != nil {
diff --git a/model/post_test.go b/model/post_test.go
index 846c8c775..6a908887d 100644
--- a/model/post_test.go
+++ b/model/post_test.go
@@ -6,6 +6,8 @@ package model
import (
"strings"
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestPostJson(t *testing.T) {
@@ -124,6 +126,11 @@ func TestPostIsSystemMessage(t *testing.T) {
}
}
+func TestPostChannelMentions(t *testing.T) {
+ post := Post{Message: "~a ~b ~b ~c/~d."}
+ assert.Equal(t, []string{"a", "b", "c", "d"}, post.ChannelMentions())
+}
+
func TestPostSanitizeProps(t *testing.T) {
post1 := &Post{
Message: "test",