bridge.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package config
  2. import (
  3. "strings"
  4. "text/template"
  5. "github.com/bwmarrin/discordgo"
  6. )
  7. type bridge struct {
  8. UsernameTemplate string `yaml:"username_template"`
  9. DisplaynameTemplate string `yaml:"displayname_template"`
  10. CommandPrefix string `yaml:"command_prefix"`
  11. ManagementRoomText managementRoomText `yaml:"management_root_text"`
  12. PortalMessageBuffer int `yaml:"portal_message_buffer"`
  13. usernameTemplate *template.Template `yaml:"-"`
  14. displaynameTemplate *template.Template `yaml:"-"`
  15. }
  16. func (b *bridge) validate() error {
  17. var err error
  18. if b.UsernameTemplate == "" {
  19. b.UsernameTemplate = "Discord_{{.}}"
  20. }
  21. b.usernameTemplate, err = template.New("username").Parse(b.UsernameTemplate)
  22. if err != nil {
  23. return err
  24. }
  25. if b.DisplaynameTemplate == "" {
  26. b.DisplaynameTemplate = "{{.Username}}#{{.Discriminator}} (D){{if .Bot}} (bot){{end}}"
  27. }
  28. b.displaynameTemplate, err = template.New("displayname").Parse(b.DisplaynameTemplate)
  29. if err != nil {
  30. return err
  31. }
  32. if b.PortalMessageBuffer <= 0 {
  33. b.PortalMessageBuffer = 128
  34. }
  35. if b.CommandPrefix == "" {
  36. b.CommandPrefix = "!dis"
  37. }
  38. if err := b.ManagementRoomText.validate(); err != nil {
  39. return err
  40. }
  41. return nil
  42. }
  43. func (b *bridge) UnmarshalYAML(unmarshal func(interface{}) error) error {
  44. type rawBridge bridge
  45. raw := rawBridge{}
  46. err := unmarshal(&raw)
  47. if err != nil {
  48. return err
  49. }
  50. *b = bridge(raw)
  51. return b.validate()
  52. }
  53. func (b bridge) FormatUsername(userid string) string {
  54. var buffer strings.Builder
  55. b.usernameTemplate.Execute(&buffer, userid)
  56. return buffer.String()
  57. }
  58. type simplfiedUser struct {
  59. Username string
  60. Discriminator string
  61. Locale string
  62. Verified bool
  63. MFAEnabled bool
  64. Bot bool
  65. System bool
  66. }
  67. func (b bridge) FormatDisplayname(user *discordgo.User) string {
  68. var buffer strings.Builder
  69. b.displaynameTemplate.Execute(&buffer, simplfiedUser{
  70. Username: user.Username,
  71. Discriminator: user.Discriminator,
  72. Locale: user.Locale,
  73. Verified: user.Verified,
  74. MFAEnabled: user.MFAEnabled,
  75. Bot: user.Bot,
  76. System: user.System,
  77. })
  78. return buffer.String()
  79. }