mirror of
https://github.com/ergochat/ergo.git
synced 2025-12-20 02:00:11 -08:00
fix #1490
Track channel join times, use them to optionally enforce history access restrictions
This commit is contained in:
parent
0d0fb87857
commit
4a48e52518
12 changed files with 274 additions and 92 deletions
28
irc/types.go
28
irc/types.go
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue