matterbridge/vendor/github.com/mattermost/mattermost-server/model/slack_attachment.go

85 lines
2.6 KiB
Go
Raw Normal View History

2017-08-16 21:37:37 +00:00
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
2017-03-25 20:04:10 +00:00
// See License.txt for license information.
package model
2017-08-16 21:37:37 +00:00
import (
"fmt"
"regexp"
2017-08-16 21:37:37 +00:00
)
var linkWithTextRegex = regexp.MustCompile(`<([^<\|]+)\|([^>]+)>`)
2017-03-25 20:04:10 +00:00
type SlackAttachment struct {
Id int64 `json:"id"`
Fallback string `json:"fallback"`
Color string `json:"color"`
Pretext string `json:"pretext"`
AuthorName string `json:"author_name"`
AuthorLink string `json:"author_link"`
AuthorIcon string `json:"author_icon"`
Title string `json:"title"`
TitleLink string `json:"title_link"`
Text string `json:"text"`
Fields []*SlackAttachmentField `json:"fields"`
ImageURL string `json:"image_url"`
ThumbURL string `json:"thumb_url"`
Footer string `json:"footer"`
FooterIcon string `json:"footer_icon"`
Timestamp interface{} `json:"ts"` // This is either a string or an int64
2018-02-08 23:11:04 +00:00
Actions []*PostAction `json:"actions,omitempty"`
2017-03-25 20:04:10 +00:00
}
type SlackAttachmentField struct {
Title string `json:"title"`
Value interface{} `json:"value"`
Short bool `json:"short"`
}
2017-08-16 21:37:37 +00:00
2018-02-08 23:11:04 +00:00
func StringifySlackFieldValue(a []*SlackAttachment) []*SlackAttachment {
2017-08-16 21:37:37 +00:00
var nonNilAttachments []*SlackAttachment
for _, attachment := range a {
if attachment == nil {
continue
}
nonNilAttachments = append(nonNilAttachments, attachment)
var nonNilFields []*SlackAttachmentField
for _, field := range attachment.Fields {
if field == nil {
continue
}
nonNilFields = append(nonNilFields, field)
if field.Value != nil {
// Ensure the value is set to a string if it is set
2018-02-08 23:11:04 +00:00
field.Value = fmt.Sprintf("%v", field.Value)
2017-08-16 21:37:37 +00:00
}
}
attachment.Fields = nonNilFields
}
return nonNilAttachments
}
// This method only parses and processes the attachments,
// all else should be set in the post which is passed
func ParseSlackAttachment(post *Post, attachments []*SlackAttachment) {
post.Type = POST_SLACK_ATTACHMENT
for _, attachment := range attachments {
attachment.Text = ParseSlackLinksToMarkdown(attachment.Text)
attachment.Pretext = ParseSlackLinksToMarkdown(attachment.Pretext)
for _, field := range attachment.Fields {
if value, ok := field.Value.(string); ok {
field.Value = ParseSlackLinksToMarkdown(value)
}
}
}
post.AddProp("attachments", attachments)
}
func ParseSlackLinksToMarkdown(text string) string {
return linkWithTextRegex.ReplaceAllString(text, "[${2}](${1})")
}