mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-26 13:59:44 +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,
|
return channel.applyModeMask(client, change.mode, change.op,
|
||||||
NewName(change.arg))
|
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)
|
return channel.applyModeFlag(client, change.mode, change.op)
|
||||||
|
|
||||||
case Key:
|
case Key:
|
||||||
|
@ -82,9 +82,8 @@ const (
|
|||||||
NoOutside ChannelMode = 'n' // flag
|
NoOutside ChannelMode = 'n' // flag
|
||||||
OpOnlyTopic ChannelMode = 't' // flag
|
OpOnlyTopic ChannelMode = 't' // flag
|
||||||
Persistent ChannelMode = 'P' // flag
|
Persistent ChannelMode = 'P' // flag
|
||||||
Private ChannelMode = 'p' // flag
|
|
||||||
ReOp ChannelMode = 'r' // flag
|
ReOp ChannelMode = 'r' // flag
|
||||||
Secret ChannelMode = 's' // flag, deprecated
|
Secret ChannelMode = 's' // flag
|
||||||
Theater ChannelMode = 'T' // flag, nonstandard
|
Theater ChannelMode = 'T' // flag, nonstandard
|
||||||
UserLimit ChannelMode = 'l' // flag arg
|
UserLimit ChannelMode = 'l' // flag arg
|
||||||
)
|
)
|
||||||
@ -92,7 +91,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
SupportedChannelModes = ChannelModes{
|
SupportedChannelModes = ChannelModes{
|
||||||
BanMask, ExceptMask, InviteMask, InviteOnly, Key, NoOutside,
|
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.
|
// 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) {
|
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())
|
"%s :%s", client.Nick())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,13 +501,17 @@ func (msg *PrivMsgCommand) HandleServer(server *Server) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) WhoisChannelsNames(isMultiPrefix bool) []string {
|
func (client *Client) WhoisChannelsNames(target *Client) []string {
|
||||||
chstrs := make([]string, len(client.channels))
|
isMultiPrefix := target.capabilities[MultiPrefix]
|
||||||
|
var chstrs []string
|
||||||
index := 0
|
index := 0
|
||||||
//TODO(dan): handle secret (+s) channels here properly?
|
|
||||||
for channel := range client.channels {
|
for channel := range client.channels {
|
||||||
chstrs[index] = channel.members[client].Prefixes(isMultiPrefix) + channel.name.String()
|
// channel is secret and the target can't see it
|
||||||
index += 1
|
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
|
return chstrs
|
||||||
}
|
}
|
||||||
@ -689,7 +693,7 @@ func (msg *ListCommand) HandleServer(server *Server) {
|
|||||||
|
|
||||||
if len(msg.channels) == 0 {
|
if len(msg.channels) == 0 {
|
||||||
for _, channel := range server.channels {
|
for _, channel := range server.channels {
|
||||||
if !client.flags[Operator] && channel.flags[Private] {
|
if !client.flags[Operator] && channel.flags[Secret] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
client.RplList(channel)
|
client.RplList(channel)
|
||||||
@ -697,7 +701,7 @@ func (msg *ListCommand) HandleServer(server *Server) {
|
|||||||
} else {
|
} else {
|
||||||
for _, chname := range msg.channels {
|
for _, chname := range msg.channels {
|
||||||
channel := server.channels.Get(chname)
|
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)
|
client.ErrNoSuchChannel(chname)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user