Merge branch 'dev'

This commit is contained in:
ayn2op 2026-03-20 12:23:07 -04:00
commit 3d014dd6d2
3 changed files with 23 additions and 8 deletions

View file

@ -15,7 +15,7 @@ import (
"github.com/diamondburned/ningen/v3"
)
func Notify(state *ningen.State, message *gateway.MessageCreateEvent, cfg *config.Config) error {
func Notify(state *ningen.State, message gateway.MessageCreateEvent, cfg *config.Config) error {
if !cfg.Notifications.Enabled || cfg.Status == discord.DoNotDisturbStatus {
return nil
}

View file

@ -255,10 +255,10 @@ func (m *Model) HandleEvent(event tview.Event) tview.Command {
m.onRaw(event)
case *gateway.ReadyEvent:
m.onReady(event)
return tview.Batch(m.onReady(event), m.listen())
case *gateway.MessageCreateEvent:
m.onMessageCreate(event)
return tview.Batch(m.onMessageCreate(event), m.listen())
case *gateway.MessageUpdateEvent:
m.onMessageUpdate(event)
case *gateway.MessageDeleteEvent:

View file

@ -11,6 +11,7 @@ import (
"github.com/diamondburned/arikawa/v3/utils/httputil/httpdriver"
"github.com/diamondburned/arikawa/v3/utils/ws"
"github.com/diamondburned/ningen/v3/states/read"
"github.com/gdamore/tcell/v3"
)
func (m *Model) onRequest(r httpdriver.Request) error {
@ -29,7 +30,7 @@ func (m *Model) onRaw(event *ws.RawEvent) {
)
}
func (m *Model) onReady(event *gateway.ReadyEvent) {
func (m *Model) onReady(event *gateway.ReadyEvent) tview.Command {
// Rebuild indexes from scratch so reconnects and account switches do not
// retain pointers to detached tree nodes.
m.guildsTree.resetNodeIndex()
@ -92,23 +93,37 @@ func (m *Model) onReady(event *gateway.ReadyEvent) {
}
m.guildsTree.SetCurrentNode(root)
m.app.SetFocus(m.guildsTree)
return tview.SetFocus(m.guildsTree)
}
func (m *Model) onMessageCreate(message *gateway.MessageCreateEvent) {
func (m *Model) onMessageCreate(message *gateway.MessageCreateEvent) tview.Command {
selectedChannel := m.SelectedChannel()
if selectedChannel != nil && selectedChannel.ID == message.ChannelID {
m.removeTyper(message.Author.ID)
m.messagesList.addMessage(message.Message)
} else {
return nil
}
return m.notify(*message)
}
func (m *Model) notify(message gateway.MessageCreateEvent) tview.Command {
return func() tview.Event {
if err := notifications.Notify(m.state, message, m.cfg); err != nil {
slog.Error("failed to notify", "err", err, "channel_id", message.ChannelID, "message_id", message.ID)
return tcell.NewEventError(err)
}
return nil
}
}
func (m *Model) onMessageUpdate(message *gateway.MessageUpdateEvent) {
if selected := m.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
selectedChannel := m.SelectedChannel()
if selectedChannel == nil {
return
}
if selectedChannel.ID == message.ChannelID {
index := slices.IndexFunc(m.messagesList.messages, func(m discord.Message) bool {
return m.ID == message.ID
})