refactor(ui/chat): migrate onMessageCreate to command-based arch
This commit is contained in:
parent
926dd8cedd
commit
7dcdff9d27
3 changed files with 14 additions and 4 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ func (m *Model) HandleEvent(event tview.Event) tview.Command {
|
|||
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:
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
@ -95,15 +96,24 @@ func (m *Model) onReady(event *gateway.ReadyEvent) tview.Command {
|
|||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue