message_input.go 957 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "github.com/gdamore/tcell/v2"
  4. "github.com/rivo/tview"
  5. )
  6. type MessageInput struct {
  7. *tview.InputField
  8. }
  9. func newMessageInput() *MessageInput {
  10. mi := &MessageInput{
  11. InputField: tview.NewInputField(),
  12. }
  13. mi.SetDoneFunc(mi.onDone)
  14. mi.SetTitleAlign(tview.AlignLeft)
  15. mi.SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor)
  16. mi.SetBorder(cfg.Theme.MessageInput.Border)
  17. padding := cfg.Theme.MessageInput.BorderPadding
  18. mi.SetBorderPadding(padding[0], padding[1], padding[2], padding[3])
  19. return mi
  20. }
  21. func (mi *MessageInput) onDone(key tcell.Key) {
  22. switch key {
  23. case tcell.KeyEnter:
  24. go mi.sendMessage()
  25. case tcell.KeyEscape:
  26. // Reset the message input.
  27. mi.SetText("")
  28. }
  29. }
  30. func (mi *MessageInput) sendMessage() error {
  31. text := mi.GetText()
  32. _, err := discordState.SendMessage(guildsTree.selectedChannel.ID, text)
  33. if err != nil {
  34. return err
  35. }
  36. // Reset the message input.
  37. mi.SetText("")
  38. return nil
  39. }