From ccfaaa52e89f78c8d53aaed249e7cc6165e1466b Mon Sep 17 00:00:00 2001 From: ayn2op Date: Thu, 30 Jul 2026 14:44:40 -0400 Subject: [PATCH] fix(chat): gate message deletion by permissions --- internal/ui/chat/messages_list.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/internal/ui/chat/messages_list.go b/internal/ui/chat/messages_list.go index 942ea8d..08bdf92 100644 --- a/internal/ui/chat/messages_list.go +++ b/internal/ui/chat/messages_list.go @@ -1295,7 +1295,7 @@ func (ml *messagesList) editSelectedMessage() tview.Cmd { func (ml *messagesList) confirmDelete() tview.Cmd { selectedMessage, ok := ml.selectedMessage() - if !ok { + if !ok || !ml.canDeleteMessage(*selectedMessage) { return nil } message := *selectedMessage @@ -1316,11 +1316,9 @@ func (ml *messagesList) deleteSelectedMessage() tview.Cmd { func (ml *messagesList) deleteMessageRequest(message discord.Message) tview.Cmd { return func() tview.Msg { - if message.GuildID.IsValid() { - if !ml.chat.isMe(message.Author.ID) && !ml.chat.state.HasPermissions(message.ChannelID, discord.PermissionManageMessages) { - slog.Error("failed to delete message; missing relevant permissions", "channel_id", message.ChannelID, "message_id", message.ID) - return nil - } + if !ml.canDeleteMessage(message) { + slog.Error("failed to delete message; missing relevant permissions", "channel_id", message.ChannelID, "message_id", message.ID) + return nil } if err := ml.chat.state.DeleteMessage(message.ChannelID, message.ID, ""); err != nil { @@ -1336,6 +1334,11 @@ func (ml *messagesList) deleteMessageRequest(message discord.Message) tview.Cmd } } +func (ml *messagesList) canDeleteMessage(message discord.Message) bool { + return ml.chat.isMe(message.Author.ID) || + (message.GuildID.IsValid() && ml.chat.state.HasPermissions(message.ChannelID, discord.PermissionManageMessages)) +} + func (ml *messagesList) requestGuildMembers(guildID discord.GuildID, messages []discord.Message) tview.Cmd { usersToFetch := make([]discord.UserID, 0, len(messages)) seen := make(map[discord.UserID]struct{}, len(messages)) @@ -1405,11 +1408,7 @@ func (ml *messagesList) FullHelp() [][]keybind.Keybind { canEdit = ml.chat.isMe(selectedMessage.Author.ID) canReply = !canEdit - canDelete = canEdit - if !canDelete { - selectedChannel, ok := ml.chat.SelectedChannel() - canDelete = ok && ml.chat.state.HasPermissions(selectedChannel.ID, discord.PermissionManageMessages) - } + canDelete = ml.canDeleteMessage(*selectedMessage) } actions := make([]keybind.Keybind, 0, 4)