message_input.go 981 B

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