From 32bbab8518a03ad04953986f21eeb4832e7331e5 Mon Sep 17 00:00:00 2001 From: Wim Date: Fri, 24 Feb 2017 18:49:52 +0100 Subject: [PATCH] Do not use HTML parsemode by default. Set MessageFormat="HTML" to use it. (telegram) Closes #126 --- bridge/config/config.go | 7 ++-- bridge/telegram/html.go | 64 +++++++++++++++++++++++++++++++++++ bridge/telegram/telegram.go | 67 ++++--------------------------------- changelog.md | 6 ++++ matterbridge.toml.sample | 5 +++ 5 files changed, 86 insertions(+), 63 deletions(-) create mode 100644 bridge/telegram/html.go diff --git a/bridge/config/config.go b/bridge/config/config.go index 5077abb5..23f8db18 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -31,7 +31,7 @@ type Protocol struct { IconURL string // mattermost, slack IgnoreNicks string // all protocols Jid string // xmpp - Login string // mattermost + Login string // mattermost, matrix Muc string // xmpp Name string // all protocols Nick string // all protocols @@ -40,18 +40,19 @@ type Protocol struct { NickServPassword string // IRC NicksPerRow int // mattermost, slack NoTLS bool // mattermost - Password string // IRC,mattermost,XMPP + Password string // IRC,mattermost,XMPP,matrix PrefixMessagesWithNick bool // mattemost, slack Protocol string //all protocols MessageQueue int // IRC, size of message queue for flood control MessageDelay int // IRC, time in millisecond to wait between messages + MessageFormat string // telegram RemoteNickFormat string // all protocols Server string // IRC,mattermost,XMPP,discord ShowJoinPart bool // all protocols SkipTLSVerify bool // IRC, mattermost Team string // mattermost Token string // gitter, slack, discord - URL string // mattermost, slack + URL string // mattermost, slack, matrix UseAPI bool // mattermost, slack UseSASL bool // IRC UseTLS bool // IRC diff --git a/bridge/telegram/html.go b/bridge/telegram/html.go new file mode 100644 index 00000000..3eb84bab --- /dev/null +++ b/bridge/telegram/html.go @@ -0,0 +1,64 @@ +package btelegram + +import ( + "bytes" + "github.com/russross/blackfriday" + "html" +) + +type customHtml struct { + blackfriday.Renderer +} + +func (options *customHtml) Paragraph(out *bytes.Buffer, text func() bool) { + marker := out.Len() + + if !text() { + out.Truncate(marker) + return + } + out.WriteString("\n") +} + +func (options *customHtml) BlockCode(out *bytes.Buffer, text []byte, lang string) { + out.WriteString("
")
+
+	out.WriteString(html.EscapeString(string(text)))
+	out.WriteString("
\n") +} + +func (options *customHtml) Header(out *bytes.Buffer, text func() bool, level int, id string) { + options.Paragraph(out, text) +} + +func (options *customHtml) HRule(out *bytes.Buffer) { + out.WriteByte('\n') +} + +func (options *customHtml) BlockQuote(out *bytes.Buffer, text []byte) { + out.WriteString("> ") + out.Write(text) + out.WriteByte('\n') +} + +func (options *customHtml) List(out *bytes.Buffer, text func() bool, flags int) { + options.Paragraph(out, text) +} + +func (options *customHtml) ListItem(out *bytes.Buffer, text []byte, flags int) { + out.WriteString("- ") + out.Write(text) + out.WriteByte('\n') +} + +func makeHTML(input string) string { + return string(blackfriday.Markdown([]byte(input), + &customHtml{blackfriday.HtmlRenderer(blackfriday.HTML_USE_XHTML|blackfriday.HTML_SKIP_IMAGES, "", "")}, + blackfriday.EXTENSION_NO_INTRA_EMPHASIS| + blackfriday.EXTENSION_FENCED_CODE| + blackfriday.EXTENSION_AUTOLINK| + blackfriday.EXTENSION_SPACE_HEADERS| + blackfriday.EXTENSION_HEADER_IDS| + blackfriday.EXTENSION_BACKSLASH_LINE_BREAK| + blackfriday.EXTENSION_DEFINITION_LISTS)) +} diff --git a/bridge/telegram/telegram.go b/bridge/telegram/telegram.go index aa637457..85486f76 100644 --- a/bridge/telegram/telegram.go +++ b/bridge/telegram/telegram.go @@ -1,14 +1,11 @@ package btelegram import ( - "bytes" - "html" "strconv" "github.com/42wim/matterbridge/bridge/config" log "github.com/Sirupsen/logrus" "github.com/go-telegram-bot-api/telegram-bot-api" - "github.com/russross/blackfriday" ) type Btelegram struct { @@ -60,51 +57,6 @@ func (b *Btelegram) JoinChannel(channel string) error { return nil } -type customHtml struct { - blackfriday.Renderer -} - -func (options *customHtml) Paragraph(out *bytes.Buffer, text func() bool) { - marker := out.Len() - - if !text() { - out.Truncate(marker) - return - } - out.WriteString("\n") -} - -func (options *customHtml) BlockCode(out *bytes.Buffer, text []byte, lang string) { - out.WriteString("
")
-
-	out.WriteString(html.EscapeString(string(text)))
-	out.WriteString("
\n") -} - -func (options *customHtml) Header(out *bytes.Buffer, text func() bool, level int, id string) { - options.Paragraph(out, text) -} - -func (options *customHtml) HRule(out *bytes.Buffer) { - out.WriteByte('\n') -} - -func (options *customHtml) BlockQuote(out *bytes.Buffer, text []byte) { - out.WriteString("> ") - out.Write(text) - out.WriteByte('\n') -} - -func (options *customHtml) List(out *bytes.Buffer, text func() bool, flags int) { - options.Paragraph(out, text) -} - -func (options *customHtml) ListItem(out *bytes.Buffer, text []byte, flags int) { - out.WriteString("- ") - out.Write(text) - out.WriteByte('\n') -} - func (b *Btelegram) Send(msg config.Message) error { flog.Debugf("Receiving %#v", msg) chatid, err := strconv.ParseInt(msg.Channel, 10, 64) @@ -112,18 +64,13 @@ func (b *Btelegram) Send(msg config.Message) error { return err } - parsed := blackfriday.Markdown([]byte(msg.Text), - &customHtml{blackfriday.HtmlRenderer(blackfriday.HTML_USE_XHTML|blackfriday.HTML_SKIP_IMAGES, "", "")}, - blackfriday.EXTENSION_NO_INTRA_EMPHASIS| - blackfriday.EXTENSION_FENCED_CODE| - blackfriday.EXTENSION_AUTOLINK| - blackfriday.EXTENSION_SPACE_HEADERS| - blackfriday.EXTENSION_HEADER_IDS| - blackfriday.EXTENSION_BACKSLASH_LINE_BREAK| - blackfriday.EXTENSION_DEFINITION_LISTS) - - m := tgbotapi.NewMessage(chatid, html.EscapeString(msg.Username)+string(parsed)) - m.ParseMode = "HTML" + if b.Config.MessageFormat == "HTML" { + msg.Text = makeHTML(msg.Text) + } + m := tgbotapi.NewMessage(chatid, msg.Username+msg.Text) + if b.Config.MessageFormat == "HTML" { + m.ParseMode = tgbotapi.ModeHTML + } _, err = b.c.Send(m) return err } diff --git a/changelog.md b/changelog.md index 20ae1400..d3c4609c 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,12 @@ ## New features * matrix: New protocol support added (https://matrix.org) +## Bugfix +* mattermost: Add ReadTimeout to close lingering connections (mattermost). See #125 + +## Changes +* telegram: Do not use HTML parsemode by default. Set ```MessageFormat="HTML"``` to use it. Closes #126 + # v0.9.3 ## New features * API: rest interface to read / post messages (see API section in matterbridge.toml.sample) diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 0f6e9936..ae4feac0 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -413,6 +413,11 @@ ShowJoinPart=false #REQUIRED Token="Yourtokenhere" +#OPTIONAL (default empty) +#Only supported format is "HTML", messages will be sent in html parsemode. +#See https://core.telegram.org/bots/api#html-style +MessageFormat="" + #Nicks you want to ignore. #Messages from those users will not be sent to other bridges. #OPTIONAL