fix(chat): gate message deletion by permissions
This commit is contained in:
parent
ec0e68ef54
commit
ccfaaa52e8
1 changed files with 10 additions and 11 deletions
|
|
@ -1295,7 +1295,7 @@ func (ml *messagesList) editSelectedMessage() tview.Cmd {
|
||||||
|
|
||||||
func (ml *messagesList) confirmDelete() tview.Cmd {
|
func (ml *messagesList) confirmDelete() tview.Cmd {
|
||||||
selectedMessage, ok := ml.selectedMessage()
|
selectedMessage, ok := ml.selectedMessage()
|
||||||
if !ok {
|
if !ok || !ml.canDeleteMessage(*selectedMessage) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
message := *selectedMessage
|
message := *selectedMessage
|
||||||
|
|
@ -1316,11 +1316,9 @@ func (ml *messagesList) deleteSelectedMessage() tview.Cmd {
|
||||||
|
|
||||||
func (ml *messagesList) deleteMessageRequest(message discord.Message) tview.Cmd {
|
func (ml *messagesList) deleteMessageRequest(message discord.Message) tview.Cmd {
|
||||||
return func() tview.Msg {
|
return func() tview.Msg {
|
||||||
if message.GuildID.IsValid() {
|
if !ml.canDeleteMessage(message) {
|
||||||
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)
|
||||||
slog.Error("failed to delete message; missing relevant permissions", "channel_id", message.ChannelID, "message_id", message.ID)
|
return nil
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ml.chat.state.DeleteMessage(message.ChannelID, message.ID, ""); err != 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 {
|
func (ml *messagesList) requestGuildMembers(guildID discord.GuildID, messages []discord.Message) tview.Cmd {
|
||||||
usersToFetch := make([]discord.UserID, 0, len(messages))
|
usersToFetch := make([]discord.UserID, 0, len(messages))
|
||||||
seen := make(map[discord.UserID]struct{}, 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)
|
canEdit = ml.chat.isMe(selectedMessage.Author.ID)
|
||||||
canReply = !canEdit
|
canReply = !canEdit
|
||||||
canDelete = canEdit
|
canDelete = ml.canDeleteMessage(*selectedMessage)
|
||||||
if !canDelete {
|
|
||||||
selectedChannel, ok := ml.chat.SelectedChannel()
|
|
||||||
canDelete = ok && ml.chat.state.HasPermissions(selectedChannel.ID, discord.PermissionManageMessages)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
actions := make([]keybind.Keybind, 0, 4)
|
actions := make([]keybind.Keybind, 0, 4)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue