ayn2op 3 年 前
コミット
456ce6739c
4 ファイル変更36 行追加13 行削除
  1. 4 0
      config.go
  2. 5 1
      guilds_tree.go
  3. 3 1
      message_input.go
  4. 24 11
      messages_text.go

+ 4 - 0
config.go

@@ -10,6 +10,7 @@ const name = "discordo"
 
 type ThemeConfig struct {
 	BorderPadding [4]int
+	MessageFormat string
 }
 
 type Config struct {
@@ -35,6 +36,9 @@ func newConfig() (*Config, error) {
 
 		Theme: ThemeConfig{
 			BorderPadding: [...]int{1, 1, 1, 1},
+			MessageFormat: `{{.Author.Username}}
+				{{.Content}}
+			`,
 		},
 	}
 	path = filepath.Join(path, "config.json")

+ 5 - 1
guilds_tree.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"fmt"
 	"log"
 
 	"github.com/diamondburned/arikawa/v3/discord"
@@ -133,7 +134,10 @@ func (gt *GuildsTree) onSelected(n *tview.TreeNode) {
 		}
 
 		for _, m := range ms {
-			messagesText.newMessage(&m)
+			if messagesText.newMessage(&m); err != nil {
+				fmt.Println(err)
+				continue
+			}
 		}
 
 		messagesText.SetTitle(gt.channelToString(*c))

+ 3 - 1
message_input.go

@@ -1,6 +1,8 @@
 package main
 
-import "github.com/rivo/tview"
+import (
+	"github.com/rivo/tview"
+)
 
 type MessageInput struct {
 	*tview.InputField

+ 24 - 11
messages_text.go

@@ -2,16 +2,21 @@ package main
 
 import (
 	"fmt"
-	"strings"
+	"sync"
+	"text/template"
 
 	"github.com/diamondburned/arikawa/v3/discord"
 	"github.com/rivo/tview"
 )
 
+var p = sync.Pool{
+	New: func() any {
+		return new(template.Template)
+	},
+}
+
 type MessagesText struct {
 	*tview.TextView
-
-	builder strings.Builder
 }
 
 func newMessagesText() *MessagesText {
@@ -28,18 +33,26 @@ func newMessagesText() *MessagesText {
 	return mt
 }
 
-func (mt *MessagesText) newMessage(m *discord.Message) {
+func (mt *MessagesText) newMessage(m *discord.Message) error {
 	switch m.Type {
 	case discord.DefaultMessage:
-		{
-			mt.builder.WriteString("[blue::b]")
-			mt.builder.WriteString(m.Author.Username)
-			mt.builder.WriteString("[-:-:-]")
+		// Region tags are square brackets that contain a region ID in double quotes
+		// https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
+		fmt.Fprintf(mt, `["%s"]`, m.ID)
+
+		if m.ReferencedMessage != nil {
+			fmt.Fprintf(mt, "[blue::bd]%s[-:-:-] [::-]", m.ReferencedMessage.Author.Username)
+			fmt.Fprint(mt, m.ReferencedMessage.Content)
+			fmt.Fprintln(mt)
 		}
 
-		mt.builder.WriteByte('\n')
-		mt.builder.WriteByte('\n')
+		fmt.Fprintf(mt, "[blue::b]%s[-:-:-] ", m.Author.Username)
+		fmt.Fprint(mt, m.Content)
+		// Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
+		fmt.Fprint(mt, `[""]`)
+
+		fmt.Fprintln(mt)
 	}
 
-	fmt.Fprintln(mt, mt.builder.String())
+	return nil
 }