feat: implement discord-flavored markdown renderer (#66)

This commit is contained in:
ayntgl 2021-10-01 15:07:33 +04:00 • committed by GitHub
parent 85438d0799
commit ff7aa4eef3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 5 deletions

2
go.mod
View file

@ -7,6 +7,6 @@ require (
github.com/ayntgl/discordgo v0.23.3-0.20210920064905-b79d709bbafb
github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1
github.com/gen2brain/beeep v0.0.0-20210529141713-5586760f0cc1
github.com/rivo/tview v0.0.0-20210923051754-2cb20002bc4c
github.com/rivo/tview v0.0.0-20211001102648-5508f4b00266
github.com/zalando/go-keyring v0.1.1
)

4
go.sum
View file

@ -33,8 +33,8 @@ github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/tview v0.0.0-20210923051754-2cb20002bc4c h1:ye4bWm8SafYmr0DADOKSfeVZ1Swzm9aLW+baCOcHDWE=
github.com/rivo/tview v0.0.0-20210923051754-2cb20002bc4c/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk=
github.com/rivo/tview v0.0.0-20211001102648-5508f4b00266 h1:UrmGSzDIp4gfkDuMLdXk1Tx4FjS8GTWrWJjHfnS6GmY=
github.com/rivo/tview v0.0.0-20211001102648-5508f4b00266/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=

View file

@ -2,11 +2,17 @@ package main
import (
"fmt"
"regexp"
"strings"
"github.com/ayntgl/discordgo"
)
var boldRegex = regexp.MustCompile(`(?m)\*\*(.*?)\*\*`)
var italicRegex = regexp.MustCompile(`(?m)\*(.*?)\*`)
var underlineRegex = regexp.MustCompile(`(?m)__(.*?)__`)
var strikeThroughRegex = regexp.MustCompile(`(?m)~~(.*?)~~`)
func renderMessages(cID string) {
ms, err := session.ChannelMessages(cID, conf.GetMessagesLimit, "", "", "")
if err != nil {
@ -39,7 +45,7 @@ func renderMessage(m *discordgo.Message) {
if rm.Content != "" {
rm.Content = parseMentions(rm.Content, rm.Mentions)
b.WriteString(rm.Content)
b.WriteString(parseMarkdown(rm.Content))
}
b.WriteString("[::-]\n")
@ -50,7 +56,7 @@ func renderMessage(m *discordgo.Message) {
// (users mentioned in the message) and render the message content.
if m.Content != "" {
m.Content = parseMentions(m.Content, m.Mentions)
b.WriteString(m.Content)
b.WriteString(parseMarkdown(m.Content))
}
// If the edited timestamp of the message is not empty; it implies that
// the message has been edited, hence render the message with edited
@ -120,3 +126,13 @@ func parseAuthor(b *strings.Builder, u *discordgo.User) {
b.WriteString("[#EB459E]BOT[-] ")
}
}
func parseMarkdown(md string) string {
var res string
res = boldRegex.ReplaceAllString(md, "[::b]$1[::-]")
res = italicRegex.ReplaceAllString(res, "[::i]$1[::-]")
res = underlineRegex.ReplaceAllString(res, "[::u]$1[::-]")
res = strikeThroughRegex.ReplaceAllString(res, "[::s]$1[::-]")
return res
}