util.go 1.6 KB

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