67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package ui
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
)
|
|
|
|
var (
|
|
boldRegex = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
|
|
italicRegex = regexp.MustCompile(`(?ms)\*(.*?)\*`)
|
|
underlineRegex = regexp.MustCompile(`(?ms)__(.*?)__`)
|
|
strikeThroughRegex = regexp.MustCompile(`(?ms)~~(.*?)~~`)
|
|
)
|
|
|
|
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
|
|
}
|
|
|
|
func channelToString(c discord.Channel) string {
|
|
var repr string
|
|
|
|
switch c.Type {
|
|
case discord.GuildText:
|
|
repr = "#" + c.Name
|
|
case discord.DirectMessage:
|
|
rp := c.DMRecipients[0]
|
|
repr = rp.Username + "#" + rp.Discriminator
|
|
case discord.GroupDM:
|
|
rps := make([]string, len(c.DMRecipients))
|
|
for i, r := range c.DMRecipients {
|
|
rps[i] = r.Username + "#" + r.Discriminator
|
|
}
|
|
|
|
repr = strings.Join(rps, ", ")
|
|
default:
|
|
repr = c.Name
|
|
}
|
|
|
|
return repr
|
|
}
|
|
|
|
func findMessageByID(ms []discord.Message, mID discord.MessageID) (int, *discord.Message) {
|
|
for i, m := range ms {
|
|
if m.ID == mID {
|
|
return i, &m
|
|
}
|
|
}
|
|
|
|
return -1, nil
|
|
}
|
|
|
|
func hasPermission(s *State, cID discord.ChannelID, p discord.Permissions) bool {
|
|
perm, err := s.Permissions(cID, s.Ready().User.ID)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return perm&p == p
|
|
}
|