| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // reaction_viewer.go implements the reaction details popup overlay.
- // Opened with the view_reactions keybind (v), it fetches and displays
- // which users reacted with each emoji on the selected message.
- package chat
- import (
- "fmt"
- "github.com/ayn2op/tview"
- "github.com/diamondburned/arikawa/v3/discord"
- "github.com/gdamore/tcell/v3"
- )
- const reactionViewerLayerName = "reactionViewer"
- func (ml *messagesList) showReactionViewer() {
- msg, err := ml.selectedMessage()
- if err != nil || len(msg.Reactions) == 0 {
- return
- }
- channelID := msg.ChannelID
- var lines []tview.Line
- boldStyle := tcell.StyleDefault.Bold(true)
- dimStyle := tcell.StyleDefault.Dim(true)
- normalStyle := tcell.StyleDefault
- for i, r := range msg.Reactions {
- if i > 0 {
- // Blank separator line
- b := tview.NewLineBuilder()
- b.Write("", normalStyle)
- lines = append(lines, b.Finish()...)
- }
- // Emoji header: "👍 (3)"
- name := r.Emoji.Name
- if r.Emoji.ID.IsValid() && name != "" {
- name = ":" + name + ":"
- }
- b := tview.NewLineBuilder()
- b.Write(fmt.Sprintf("%s (%d)", name, r.Count), boldStyle)
- lines = append(lines, b.Finish()...)
- // Fetch users who reacted
- apiEmoji := discord.NewAPIEmoji(r.Emoji.ID, r.Emoji.Name)
- users, err := ml.chatView.state.Reactions(channelID, msg.ID, apiEmoji, 100)
- if err != nil {
- b = tview.NewLineBuilder()
- b.Write(" (could not load)", dimStyle)
- lines = append(lines, b.Finish()...)
- continue
- }
- for _, u := range users {
- b = tview.NewLineBuilder()
- b.Write(" "+u.DisplayOrUsername(), normalStyle)
- lines = append(lines, b.Finish()...)
- }
- }
- tv := tview.NewTextView().
- SetWrap(true).
- SetWordWrap(true).
- SetLines(lines)
- tv.SetTitle("Reactions")
- ml.chatView.showReactionViewerOverlay(tv)
- }
|