util.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package ui
  2. import (
  3. "regexp"
  4. "strings"
  5. "github.com/diamondburned/arikawa/v3/discord"
  6. )
  7. var (
  8. boldRegex = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
  9. italicRegex = regexp.MustCompile(`(?ms)\*(.*?)\*`)
  10. underlineRegex = regexp.MustCompile(`(?ms)__(.*?)__`)
  11. strikeThroughRegex = regexp.MustCompile(`(?ms)~~(.*?)~~`)
  12. )
  13. func parseMarkdown(md string) string {
  14. var res string
  15. res = boldRegex.ReplaceAllString(md, "[::b]$1[::-]")
  16. res = italicRegex.ReplaceAllString(res, "[::i]$1[::-]")
  17. res = underlineRegex.ReplaceAllString(res, "[::u]$1[::-]")
  18. res = strikeThroughRegex.ReplaceAllString(res, "[::s]$1[::-]")
  19. return res
  20. }
  21. func channelToString(c discord.Channel) string {
  22. var repr string
  23. switch c.Type {
  24. case discord.GuildText:
  25. repr = "#" + c.Name
  26. case discord.DirectMessage:
  27. rp := c.DMRecipients[0]
  28. repr = rp.Username + "#" + rp.Discriminator
  29. case discord.GroupDM:
  30. rps := make([]string, len(c.DMRecipients))
  31. for i, r := range c.DMRecipients {
  32. rps[i] = r.Username + "#" + r.Discriminator
  33. }
  34. repr = strings.Join(rps, ", ")
  35. default:
  36. repr = c.Name
  37. }
  38. return repr
  39. }
  40. func findMessageByID(ms []discord.Message, mID discord.MessageID) (int, *discord.Message) {
  41. for i, m := range ms {
  42. if m.ID == mID {
  43. return i, &m
  44. }
  45. }
  46. return -1, nil
  47. }
  48. func hasPermission(s *State, cID discord.ChannelID, p discord.Permissions) bool {
  49. perm, err := s.Permissions(cID, s.Ready().User.ID)
  50. if err != nil {
  51. return false
  52. }
  53. return perm&p == p
  54. }