From ba0bfe70a8f07164e1341f4b094841acdad5c3a2 Mon Sep 17 00:00:00 2001 From: Wim Date: Sat, 23 May 2020 21:46:15 +0200 Subject: [PATCH] Add StripMarkdown option (irc). (#1145) Enable `StripMarkdown` to strip markdown for irc. --- bridge/config/config.go | 1 + bridge/irc/irc.go | 5 ++ go.mod | 2 + go.sum | 2 + matterbridge.toml.sample | 4 ++ .../writeas/go-strip-markdown/.gitignore | 3 + .../writeas/go-strip-markdown/LICENSE | 21 ++++++ .../writeas/go-strip-markdown/README.md | 51 ++++++++++++++ .../writeas/go-strip-markdown/strip.go | 66 +++++++++++++++++++ vendor/modules.txt | 2 + 10 files changed, 157 insertions(+) create mode 100644 vendor/github.com/writeas/go-strip-markdown/.gitignore create mode 100644 vendor/github.com/writeas/go-strip-markdown/LICENSE create mode 100644 vendor/github.com/writeas/go-strip-markdown/README.md create mode 100644 vendor/github.com/writeas/go-strip-markdown/strip.go diff --git a/bridge/config/config.go b/bridge/config/config.go index 031f5a81..59d7d4be 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -136,6 +136,7 @@ type Protocol struct { SkipTLSVerify bool // IRC, mattermost SkipVersionCheck bool // mattermost StripNick bool // all protocols + StripMarkdown bool // irc SyncTopic bool // slack TengoModifyMessage string // general Team string // mattermost, keybase diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index bae9aef0..5fc315a7 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -14,6 +14,7 @@ import ( "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/helper" "github.com/lrstanley/girc" + stripmd "github.com/writeas/go-strip-markdown" // We need to import the 'data' package as an implicit dependency. // See: https://godoc.org/github.com/paulrosania/go-charset/charset @@ -156,6 +157,10 @@ func (b *Birc) Send(msg config.Message) (string, error) { } var msgLines []string + if b.GetBool("StripMarkdown") { + msg.Text = stripmd.Strip(msg.Text) + } + if b.GetBool("MessageSplit") { msgLines = helper.GetSubLines(msg.Text, b.MessageLength) } else { diff --git a/go.mod b/go.mod index c2433d09..e7378bce 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/spf13/viper v1.6.1 github.com/stretchr/testify v1.4.0 github.com/technoweenie/multipartstreamer v1.0.1 // indirect + github.com/writeas/go-strip-markdown v2.0.1+incompatible github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect github.com/yaegashi/msgraph.go v0.1.2 github.com/zfjagann/golang-ring v0.0.0-20190106091943-a88bb6aef447 @@ -56,6 +57,7 @@ require ( golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d gopkg.in/fsnotify.v1 v1.4.7 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + github.com/writeas/go-strip-markdown v2.0.1+incompatible gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect ) diff --git a/go.sum b/go.sum index b983d8c1..52b7c7fd 100644 --- a/go.sum +++ b/go.sum @@ -250,6 +250,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0 h1:RZqt0yGBsps8NGvLSGW804QQqCUYYLsaOjTVHy1Ocw4= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/writeas/go-strip-markdown v2.0.1+incompatible h1:IIqxTM5Jr7RzhigcL6FkrCNfXkvbR+Nbu1ls48pXYcw= +github.com/writeas/go-strip-markdown v2.0.1+incompatible/go.mod h1:Rsyu10ZhbEK9pXdk8V6MVnZmTzRG0alMNLMwa0J01fE= github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index e0942c65..975078c7 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -103,6 +103,10 @@ ColorNicks=false #OPTIONAL (default empty) RunCommands=["PRIVMSG user hello","PRIVMSG chanserv something"] +#StripMarkdown strips markdown from messages +#OPTIONAL (default false) +StripMarkdown=false + #Nicks you want to ignore. #Regular expressions supported #Messages from those users will not be sent to other bridges. diff --git a/vendor/github.com/writeas/go-strip-markdown/.gitignore b/vendor/github.com/writeas/go-strip-markdown/.gitignore new file mode 100644 index 00000000..270dc7ce --- /dev/null +++ b/vendor/github.com/writeas/go-strip-markdown/.gitignore @@ -0,0 +1,3 @@ +*~ +*.swp +cmd/strip/strip diff --git a/vendor/github.com/writeas/go-strip-markdown/LICENSE b/vendor/github.com/writeas/go-strip-markdown/LICENSE new file mode 100644 index 00000000..134a5b8e --- /dev/null +++ b/vendor/github.com/writeas/go-strip-markdown/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Write.as + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/writeas/go-strip-markdown/README.md b/vendor/github.com/writeas/go-strip-markdown/README.md new file mode 100644 index 00000000..41664c52 --- /dev/null +++ b/vendor/github.com/writeas/go-strip-markdown/README.md @@ -0,0 +1,51 @@ +# go-strip-markdown + +[![GoDoc](https://godoc.org/github.com/writeas/go-strip-markdown?status.svg)](https://godoc.org/github.com/writeas/go-strip-markdown) + +A Markdown stripper written in Go (golang). + +## Usage +You could create a simple command-line utility: + +```go +package main + +import ( + "fmt" + "github.com/writeas/go-strip-markdown" + "os" +) + +func main() { + if len(os.Args) < 2 { + os.Exit(1) + } + fmt.Println(stripmd.Strip(os.Args[1])) +} +``` + +You could pass it Markdown and get pure, beauteous text in return: + +```bash +./strip "# A Tale of Text Formatting + +_One fateful day_ a developer was presented with [Markdown](https://daringfireball.net/projects/markdown/). +And they wanted **none of it**." + +# A Tale of Text Formatting +# +# One fateful day a developer was presented with Markdown. +# And they wanted none of it. +``` + +## Inspiration +This was largely based off of [remove-markdown](https://github.com/stiang/remove-markdown), a Markdown stripper written in Javascript. + +## Used by + +This library is used in these projects: + +* [WriteFreely](https://github.com/writeas/writefreely) + +## License +MIT. diff --git a/vendor/github.com/writeas/go-strip-markdown/strip.go b/vendor/github.com/writeas/go-strip-markdown/strip.go new file mode 100644 index 00000000..c20812f6 --- /dev/null +++ b/vendor/github.com/writeas/go-strip-markdown/strip.go @@ -0,0 +1,66 @@ +// Package stripmd strips Markdown from text +package stripmd + +import ( + "regexp" +) + +var ( + listLeadersReg = regexp.MustCompile(`(?m)^([\s\t]*)([\*\-\+]|\d\.)\s+`) + + headerReg = regexp.MustCompile(`\n={2,}`) + strikeReg = regexp.MustCompile(`~~`) + codeReg = regexp.MustCompile("`{3}" + `.*\n`) + + htmlReg = regexp.MustCompile("<(.*?)>") + emphReg = regexp.MustCompile(`\*\*([^*]+)\*\*`) + emphReg2 = regexp.MustCompile(`\*([^*]+)\*`) + emphReg3 = regexp.MustCompile(`__([^_]+)__`) + emphReg4 = regexp.MustCompile(`_([^_]+)_`) + setextHeaderReg = regexp.MustCompile(`^[=\-]{2,}\s*$`) + footnotesReg = regexp.MustCompile(`\[\^.+?\](\: .*?$)?`) + footnotes2Reg = regexp.MustCompile(`\s{0,2}\[.*?\]: .*?$`) + imagesReg = regexp.MustCompile(`\!\[(.*?)\]\s?[\[\(].*?[\]\)]`) + linksReg = regexp.MustCompile(`\[(.*?)\][\[\(].*?[\]\)]`) + blockquoteReg = regexp.MustCompile(`>\s*`) + refLinkReg = regexp.MustCompile(`^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$`) + atxHeaderReg = regexp.MustCompile(`(?m)^\#{1,6}\s*([^#]+)\s*(\#{1,6})?$`) + atxHeaderReg2 = regexp.MustCompile(`([\*_]{1,3})(\S.*?\S)?P1`) + atxHeaderReg3 = regexp.MustCompile("(?m)(`{3,})" + `(.*?)?P1`) + atxHeaderReg4 = regexp.MustCompile(`^-{3,}\s*$`) + atxHeaderReg5 = regexp.MustCompile("`(.+?)`") + atxHeaderReg6 = regexp.MustCompile(`\n{2,}`) +) + +// Strip returns the given string sans any Markdown. +// Where necessary, elements are replaced with their best textual forms, so +// for example, hyperlinks are stripped of their URL and become only the link +// text, and images lose their URL and become only the alt text. +func Strip(s string) string { + res := s + res = listLeadersReg.ReplaceAllString(res, "$1") + + res = headerReg.ReplaceAllString(res, "\n") + res = strikeReg.ReplaceAllString(res, "") + res = codeReg.ReplaceAllString(res, "") + + res = emphReg.ReplaceAllString(res, "$1") + res = emphReg2.ReplaceAllString(res, "$1") + res = emphReg3.ReplaceAllString(res, "$1") + res = emphReg4.ReplaceAllString(res, "$1") + res = htmlReg.ReplaceAllString(res, "$1") + res = setextHeaderReg.ReplaceAllString(res, "") + res = footnotesReg.ReplaceAllString(res, "") + res = footnotes2Reg.ReplaceAllString(res, "") + res = imagesReg.ReplaceAllString(res, "$1") + res = linksReg.ReplaceAllString(res, "$1") + res = blockquoteReg.ReplaceAllString(res, " ") + res = refLinkReg.ReplaceAllString(res, "") + res = atxHeaderReg.ReplaceAllString(res, "$1") + res = atxHeaderReg2.ReplaceAllString(res, "$2") + res = atxHeaderReg3.ReplaceAllString(res, "$2") + res = atxHeaderReg4.ReplaceAllString(res, "") + res = atxHeaderReg5.ReplaceAllString(res, "$1") + res = atxHeaderReg6.ReplaceAllString(res, "\n\n") + return res +} diff --git a/vendor/modules.txt b/vendor/modules.txt index e8d5ffab..fe595159 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -200,6 +200,8 @@ github.com/technoweenie/multipartstreamer github.com/valyala/bytebufferpool # github.com/valyala/fasttemplate v1.1.0 github.com/valyala/fasttemplate +# github.com/writeas/go-strip-markdown v2.0.1+incompatible +github.com/writeas/go-strip-markdown # github.com/yaegashi/msgraph.go v0.1.2 github.com/yaegashi/msgraph.go/beta github.com/yaegashi/msgraph.go/jsonx