summaryrefslogtreecommitdiffstats
path: root/bridge/slack
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-10-27 01:10:59 +0200
committerGitHub <noreply@github.com>2019-10-27 01:10:59 +0200
commit45bf1fd63a62b46fc80fe5143e667f6779705a0d (patch)
treea01115b94ba619c8c8b19758386b05e4ef2683de /bridge/slack
parentff0de85817429eaa6ac8cbb80dd19d936331b12d (diff)
downloadmatterbridge-msglm-45bf1fd63a62b46fc80fe5143e667f6779705a0d.tar.gz
matterbridge-msglm-45bf1fd63a62b46fc80fe5143e667f6779705a0d.tar.bz2
matterbridge-msglm-45bf1fd63a62b46fc80fe5143e667f6779705a0d.zip
Convert slack bold/strike to correct markdown (slack). Fixes #918 (#930)
Diffstat (limited to 'bridge/slack')
-rw-r--r--bridge/slack/handlers.go1
-rw-r--r--bridge/slack/helpers.go30
2 files changed, 31 insertions, 0 deletions
diff --git a/bridge/slack/handlers.go b/bridge/slack/handlers.go
index 44a57db0..829cfb6a 100644
--- a/bridge/slack/handlers.go
+++ b/bridge/slack/handlers.go
@@ -30,6 +30,7 @@ func (b *Bslack) handleSlack() {
message.Text = b.replaceVariable(message.Text)
message.Text = b.replaceChannel(message.Text)
message.Text = b.replaceURL(message.Text)
+ message.Text = b.replaceb0rkedMarkDown(message.Text)
message.Text = html.UnescapeString(message.Text)
// Add the avatar
diff --git a/bridge/slack/helpers.go b/bridge/slack/helpers.go
index 7c012a4b..b95ae878 100644
--- a/bridge/slack/helpers.go
+++ b/bridge/slack/helpers.go
@@ -188,6 +188,36 @@ func (b *Bslack) replaceURL(text string) string {
return text
}
+func (b *Bslack) replaceb0rkedMarkDown(text string) string {
+ // taken from https://github.com/mattermost/mattermost-server/blob/master/app/slackimport.go
+ //
+ regexReplaceAllString := []struct {
+ regex *regexp.Regexp
+ rpl string
+ }{
+ // bold
+ {
+ regexp.MustCompile(`(^|[\s.;,])\*(\S[^*\n]+)\*`),
+ "$1**$2**",
+ },
+ // strikethrough
+ {
+ regexp.MustCompile(`(^|[\s.;,])\~(\S[^~\n]+)\~`),
+ "$1~~$2~~",
+ },
+ // single paragraph blockquote
+ // Slack converts > character to &gt;
+ {
+ regexp.MustCompile(`(?sm)^&gt;`),
+ ">",
+ },
+ }
+ for _, rule := range regexReplaceAllString {
+ text = rule.regex.ReplaceAllString(text, rule.rpl)
+ }
+ return text
+}
+
func (b *Bslack) replaceCodeFence(text string) string {
return codeFenceRE.ReplaceAllString(text, "```")
}