Track channel join times, use them to optionally enforce history access
restrictions
This commit is contained in:
Shivaram Lingamneni 2021-01-20 21:13:18 -05:00
parent 0d0fb87857
commit 4a48e52518
12 changed files with 274 additions and 92 deletions

View file

@ -5,7 +5,11 @@
package irc
import "github.com/oragono/oragono/irc/modes"
import (
"time"
"github.com/oragono/oragono/irc/modes"
)
type empty struct{}
@ -28,12 +32,20 @@ func (clients ClientSet) Has(client *Client) bool {
return ok
}
type memberData struct {
modes *modes.ModeSet
joinTime int64
}
// MemberSet is a set of members with modes.
type MemberSet map[*Client]*modes.ModeSet
type MemberSet map[*Client]memberData
// Add adds the given client to this set.
func (members MemberSet) Add(member *Client) {
members[member] = modes.NewModeSet()
members[member] = memberData{
modes: modes.NewModeSet(),
joinTime: time.Now().UnixNano(),
}
}
// Remove removes the given client from this set.
@ -47,15 +59,5 @@ func (members MemberSet) Has(member *Client) bool {
return ok
}
// AnyHasMode returns true if any of our clients has the given mode.
func (members MemberSet) AnyHasMode(mode modes.Mode) bool {
for _, modes := range members {
if modes.HasMode(mode) {
return true
}
}
return false
}
// ChannelSet is a set of channels.
type ChannelSet map[*Channel]empty