From 1c9f372bed7110e3c1decc95bc62db2bef5dcaf4 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi Date: Sat, 17 Dec 2016 19:26:52 +0900 Subject: [PATCH] Telegram: support for Markdown Close #98 --- bridge/telegram/telegram.go | 41 ++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/bridge/telegram/telegram.go b/bridge/telegram/telegram.go index db3ab323..942515ae 100644 --- a/bridge/telegram/telegram.go +++ b/bridge/telegram/telegram.go @@ -1,10 +1,14 @@ 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" - "strconv" + "github.com/russross/blackfriday" ) type Btelegram struct { @@ -51,13 +55,45 @@ 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 (b *Btelegram) Send(msg config.Message) error { flog.Debugf("Receiving %#v", msg) chatid, err := strconv.ParseInt(msg.Channel, 10, 64) if err != nil { return err } - m := tgbotapi.NewMessage(chatid, msg.Username + msg.Text) + + parsed := blackfriday.Markdown([]byte(msg.Text), + &customHtml{blackfriday.HtmlRenderer(blackfriday.HTML_USE_XHTML, "", "")}, + blackfriday.EXTENSION_NO_INTRA_EMPHASIS| + blackfriday.EXTENSION_FENCED_CODE| + blackfriday.EXTENSION_AUTOLINK| + blackfriday.EXTENSION_SPACE_HEADERS| + blackfriday.EXTENSION_HEADER_IDS| + blackfriday.EXTENSION_DEFINITION_LISTS) + + m := tgbotapi.NewMessage(chatid, msg.Username+string(parsed)) + m.ParseMode = "HTML" _, err = b.c.Send(m) return err } @@ -69,6 +105,5 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) { } flog.Debugf("Sending message from %s on %s to gateway", update.Message.From.UserName, b.Account) b.Remote <- config.Message{Username: update.Message.From.UserName, Text: update.Message.Text, Channel: strconv.FormatInt(update.Message.Chat.ID, 10), Account: b.Account} - } }