Added the ability to mute/unmute members

This commit is contained in:
2025-01-21 18:54:57 +02:00
parent c02511af29
commit c2b1df4e65
2 changed files with 141 additions and 0 deletions

View File

@@ -72,6 +72,9 @@ var (
Background(colors.BackgroundDim).
AlignHorizontal(lipgloss.Center).
Border(lipgloss.ThickBorder(), false, false, true)
MutedSymbol = lipgloss.NewStyle().
Foreground(colors.Red).Render(" 󱡣")
)
const (
@@ -200,6 +203,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
m.borderStyle = ViFocusedBorder
m.style = focusStyle
m.vi.SetInactive(false)
m.vi.Focus()
if m.editingMessage != nil {
m.borderStyle = ViEditBorder
m.style = editStyle
@@ -358,6 +362,76 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "M":
if m.selectedMessage == nil {
return m, nil
}
networkId := state.NetworkId(m.networkIndex)
network := state.State.Networks[*networkId]
senderId := m.selectedMessage.SenderID
member := state.State.Members[*networkId][senderId]
if member.IsMuted {
return m, nil
}
if !state.State.Members[*networkId][*state.UserID].IsAdmin {
return m, nil
}
if member.UserID == *state.UserID {
return m, nil
}
if member.IsAdmin && network.OwnerID != *state.UserID {
return m, nil
}
yes := true
return m, gateway.Send(&packet.SetMember{
Member: nil,
Admin: nil,
Muted: &yes,
Banned: nil,
BanReason: nil,
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "U":
if m.selectedMessage == nil {
return m, nil
}
networkId := state.NetworkId(m.networkIndex)
network := state.State.Networks[*networkId]
senderId := m.selectedMessage.SenderID
member := state.State.Members[*networkId][senderId]
if !member.IsMuted {
return m, nil
}
if !state.State.Members[*networkId][*state.UserID].IsAdmin {
return m, nil
}
if member.UserID == *state.UserID {
return m, nil
}
if member.IsAdmin && network.OwnerID != *state.UserID {
return m, nil
}
no := false
return m, gateway.Send(&packet.SetMember{
Member: nil,
Admin: nil,
Muted: &no,
Banned: nil,
BanReason: nil,
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "B":
// TODO: ban
@@ -872,6 +946,11 @@ func (m *Model) renderHeader(message data.Message, selected bool) []byte {
sender := senderStyle.Render(user.Name)
buf = append(buf, sender...)
if member.IsMuted {
buf = append(buf, []byte(MutedSymbol)...)
}
} else if m.receiverIndex != -1 {
// TODO: receiver
}

View File

@@ -184,6 +184,68 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "M":
networkId := state.NetworkId(m.networkIndex)
network := state.State.Networks[*networkId]
member := m.Members()[m.index]
if member.IsMuted {
return m, nil
}
if !m.MembersMap()[*state.UserID].IsAdmin {
return m, nil
}
if member.UserID == *state.UserID {
return m, nil
}
if member.IsAdmin && network.OwnerID != *state.UserID {
return m, nil
}
yes := true
return m, gateway.Send(&packet.SetMember{
Member: nil,
Admin: nil,
Muted: &yes,
Banned: nil,
BanReason: nil,
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "U":
networkId := state.NetworkId(m.networkIndex)
network := state.State.Networks[*networkId]
member := m.Members()[m.index]
if !member.IsMuted {
return m, nil
}
if !m.MembersMap()[*state.UserID].IsAdmin {
return m, nil
}
if member.UserID == *state.UserID {
return m, nil
}
if member.IsAdmin && network.OwnerID != *state.UserID {
return m, nil
}
no := false
return m, gateway.Send(&packet.SetMember{
Member: nil,
Admin: nil,
Muted: &no,
Banned: nil,
BanReason: nil,
Network: *state.NetworkId(m.networkIndex),
User: member.UserID,
})
case "B":
// TODO: ban