message_input.go 922 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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.SetFieldBackgroundColor(tview.Styles.PrimitiveBackgroundColor)
  15. mi.SetBorder(cfg.Theme.MessageInput.Border)
  16. padding := cfg.Theme.MessageInput.BorderPadding
  17. mi.SetBorderPadding(padding[0], padding[1], padding[2], padding[3])
  18. return mi
  19. }
  20. func (mi *MessageInput) onDone(key tcell.Key) {
  21. switch key {
  22. case tcell.KeyEnter:
  23. go mi.sendMessage()
  24. case tcell.KeyEscape:
  25. // Reset the message input.
  26. mi.SetText("")
  27. }
  28. }
  29. func (mi *MessageInput) sendMessage() error {
  30. text := mi.GetText()
  31. _, err := discordState.SendMessage(guildsTree.selectedChannel.ID, text)
  32. if err != nil {
  33. return err
  34. }
  35. // Reset the message input.
  36. mi.SetText("")
  37. return nil
  38. }