mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-25 21:39:25 +01:00
modes: use secret instead of private, it's the standard these days. fix secret channel hiding in whois
This commit is contained in:
parent
a715882a75
commit
8b79662f1a
@ -367,7 +367,7 @@ func (channel *Channel) applyMode(client *Client, change *ChannelModeChange) boo
|
||||
return channel.applyModeMask(client, change.mode, change.op,
|
||||
NewName(change.arg))
|
||||
|
||||
case InviteOnly, Moderated, NoOutside, OpOnlyTopic, Persistent, Private:
|
||||
case InviteOnly, Moderated, NoOutside, OpOnlyTopic, Persistent, Secret:
|
||||
return channel.applyModeFlag(client, change.mode, change.op)
|
||||
|
||||
case Key:
|
||||
|
@ -82,9 +82,8 @@ const (
|
||||
NoOutside ChannelMode = 'n' // flag
|
||||
OpOnlyTopic ChannelMode = 't' // flag
|
||||
Persistent ChannelMode = 'P' // flag
|
||||
Private ChannelMode = 'p' // flag
|
||||
ReOp ChannelMode = 'r' // flag
|
||||
Secret ChannelMode = 's' // flag, deprecated
|
||||
Secret ChannelMode = 's' // flag
|
||||
Theater ChannelMode = 'T' // flag, nonstandard
|
||||
UserLimit ChannelMode = 'l' // flag arg
|
||||
)
|
||||
@ -92,7 +91,7 @@ const (
|
||||
var (
|
||||
SupportedChannelModes = ChannelModes{
|
||||
BanMask, ExceptMask, InviteMask, InviteOnly, Key, NoOutside,
|
||||
OpOnlyTopic, Persistent, Private, Theater, UserLimit,
|
||||
OpOnlyTopic, Persistent, Secret, Theater, UserLimit,
|
||||
}
|
||||
|
||||
// ChannelPrivModes holds the list of modes that are privileged, ie founder/op/halfop, in order.
|
||||
|
@ -407,7 +407,7 @@ func (target *Client) RplNamReply(channel *Channel) {
|
||||
}
|
||||
|
||||
func (target *Client) RplWhoisChannels(client *Client) {
|
||||
target.MultilineReply(client.WhoisChannelsNames(target.capabilities[MultiPrefix]), RPL_WHOISCHANNELS,
|
||||
target.MultilineReply(client.WhoisChannelsNames(target), RPL_WHOISCHANNELS,
|
||||
"%s :%s", client.Nick())
|
||||
}
|
||||
|
||||
|
@ -501,13 +501,17 @@ func (msg *PrivMsgCommand) HandleServer(server *Server) {
|
||||
}
|
||||
}
|
||||
|
||||
func (client *Client) WhoisChannelsNames(isMultiPrefix bool) []string {
|
||||
chstrs := make([]string, len(client.channels))
|
||||
func (client *Client) WhoisChannelsNames(target *Client) []string {
|
||||
isMultiPrefix := target.capabilities[MultiPrefix]
|
||||
var chstrs []string
|
||||
index := 0
|
||||
//TODO(dan): handle secret (+s) channels here properly?
|
||||
for channel := range client.channels {
|
||||
chstrs[index] = channel.members[client].Prefixes(isMultiPrefix) + channel.name.String()
|
||||
index += 1
|
||||
// channel is secret and the target can't see it
|
||||
if !target.flags[Operator] && channel.flags[Secret] && !channel.members.Has(target) {
|
||||
continue
|
||||
}
|
||||
chstrs = append(chstrs, channel.members[client].Prefixes(isMultiPrefix)+channel.name.String())
|
||||
index++
|
||||
}
|
||||
return chstrs
|
||||
}
|
||||
@ -689,7 +693,7 @@ func (msg *ListCommand) HandleServer(server *Server) {
|
||||
|
||||
if len(msg.channels) == 0 {
|
||||
for _, channel := range server.channels {
|
||||
if !client.flags[Operator] && channel.flags[Private] {
|
||||
if !client.flags[Operator] && channel.flags[Secret] {
|
||||
continue
|
||||
}
|
||||
client.RplList(channel)
|
||||
@ -697,7 +701,7 @@ func (msg *ListCommand) HandleServer(server *Server) {
|
||||
} else {
|
||||
for _, chname := range msg.channels {
|
||||
channel := server.channels.Get(chname)
|
||||
if channel == nil || (!client.flags[Operator] && channel.flags[Private]) {
|
||||
if channel == nil || (!client.flags[Operator] && channel.flags[Secret]) {
|
||||
client.ErrNoSuchChannel(chname)
|
||||
continue
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user