util.go 1.6 KB

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