From 40d6cd02da2d8d9c3fcc2885b739196072014e29 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Wed, 18 Apr 2018 01:11:12 +1000 Subject: [PATCH] Fix whois channel handling --- irc/server.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/irc/server.go b/irc/server.go index e6a5570b..fa796b71 100644 --- a/irc/server.go +++ b/irc/server.go @@ -629,14 +629,16 @@ func (server *Server) splitMessage(original string, origIs512 bool) SplitMessage // WhoisChannelsNames returns the common channel names between two users. func (client *Client) WhoisChannelsNames(target *Client) []string { - isMultiPrefix := target.capabilities.Has(caps.MultiPrefix) + isMultiPrefix := client.capabilities.Has(caps.MultiPrefix) var chstrs []string - for _, channel := range client.Channels() { + for _, channel := range target.Channels() { // channel is secret and the target can't see it - if !target.flags[modes.Operator] && channel.HasMode(modes.Secret) && !channel.hasClient(target) { - continue + if !client.flags[modes.Operator] { + if (target.HasMode(modes.Invisible) || channel.HasMode(modes.Secret)) && !channel.hasClient(client) { + continue + } } - chstrs = append(chstrs, channel.ClientPrefixes(client, isMultiPrefix)+channel.name) + chstrs = append(chstrs, channel.ClientPrefixes(target, isMultiPrefix)+channel.name) } return chstrs }