static bool
IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
{
- bool is_visible, is_member, is_ircop;
+ bool is_visible, is_member, is_ircop, is_oper;
CL2CHAN *cl2chan;
char flags[10];
CLIENT *c;
assert( Chan != NULL );
is_member = Channel_IsMemberOf(Chan, Client);
+ is_oper = Client_HasMode(Client, 'o');
/* Secret channel? */
- if (!is_member && Channel_HasMode(Chan, 's'))
+ if (!is_member && !is_oper && Channel_HasMode(Chan, 's'))
return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG,
Client_ID(Client), Channel_Name(Chan));
continue;
is_visible = !Client_HasMode(c, 'i');
- if (is_member || is_visible) {
+ if (is_member || is_visible || is_oper) {
memset(flags, 0, sizeof(flags));
if (Client_HasMode(c, 'a'))
if (Client_Type(c) != CLIENT_USER)
continue;
+ if (Client_HasMode(c, 'i'))
+ continue;
if (!MatchCaseInsensitive(query, Client_ID(c)))
continue;
if (!IRC_WHOIS_SendReply(Client, from, c))