mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 09:00:10 +00:00
Harvey Tindall
44558b8109
Since links are converted into embeds, links put on their own line often lead to extra newlines that looks pretty weird. They should now be stripped.
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
|
|
dg "github.com/bwmarrin/discordgo"
|
|
stripmd "github.com/writeas/go-strip-markdown"
|
|
)
|
|
|
|
type Link struct {
|
|
Alt, URL string
|
|
}
|
|
|
|
// StripAltText removes Markdown alt text from links and images and replaces them with just the URL.
|
|
// Currently uses the deepest alt text when links/images are nested.
|
|
// If links = true, links are completely removed, and a list of URLs and their alt text is also returned.
|
|
func StripAltText(md string, links bool) (string, []*dg.MessageEmbed) {
|
|
altTextStart := -1 // Start of alt text (between '[' & ']')
|
|
URLStart := -1 // Start of url (between '(' & ')')
|
|
URLEnd := -1
|
|
previousURLEnd := -2
|
|
out := ""
|
|
embeds := []*dg.MessageEmbed{}
|
|
for i := range md {
|
|
if altTextStart != -1 && URLStart != -1 && md[i] == ')' {
|
|
URLEnd = i - 1
|
|
out += md[previousURLEnd+2 : altTextStart-1]
|
|
if links {
|
|
embed := &dg.MessageEmbed{
|
|
Type: dg.EmbedTypeLink,
|
|
Title: md[altTextStart : URLStart-2],
|
|
}
|
|
if md[altTextStart-1] == '!' {
|
|
embed.Title = md[altTextStart+1 : URLStart-2]
|
|
embed.Type = dg.EmbedTypeImage
|
|
embed.Image = &dg.MessageEmbedImage{
|
|
URL: md[URLStart : URLEnd+1],
|
|
}
|
|
} else {
|
|
embed.URL = md[URLStart : URLEnd+1]
|
|
}
|
|
embeds = append(embeds, embed)
|
|
} else {
|
|
out += md[URLStart : URLEnd+1]
|
|
}
|
|
previousURLEnd = URLEnd
|
|
// Removing links often leaves a load of extra newlines which look weird, this removes them.
|
|
if links {
|
|
next := 2
|
|
for md[URLEnd+next] == '\n' {
|
|
next++
|
|
}
|
|
if next >= 3 {
|
|
previousURLEnd += next - 2
|
|
}
|
|
}
|
|
altTextStart, URLStart, URLEnd = -1, -1, -1
|
|
continue
|
|
}
|
|
if md[i] == '[' && altTextStart == -1 {
|
|
altTextStart = i + 1
|
|
if i > 0 && md[i-1] == '!' {
|
|
altTextStart--
|
|
}
|
|
}
|
|
if i > 0 && md[i-1] == ']' && md[i] == '(' && URLStart == -1 {
|
|
URLStart = i + 1
|
|
}
|
|
}
|
|
if previousURLEnd+1 != len(md)-1 {
|
|
out += md[previousURLEnd+2:]
|
|
}
|
|
if out == "" {
|
|
return md, embeds
|
|
}
|
|
return out, embeds
|
|
}
|
|
|
|
func stripMarkdown(md string) string {
|
|
stripped, _ := StripAltText(md, false)
|
|
return strings.TrimPrefix(strings.TrimSuffix(stripmd.Strip(stripped), "</p>"), "<p>")
|
|
}
|