- /* Channels */
- snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
- Client_ID(from), Client_ID(c));
- cl2chan = Channel_FirstChannelOf(c);
- while (cl2chan) {
- chan = Channel_GetChannel(cl2chan);
- assert(chan != NULL);
-
- /* next */
- cl2chan = Channel_NextChannelOf(c, cl2chan);
-
- /* Secret channel? */
- if (Channel_HasMode(chan, 's')
- && !Channel_IsMemberOf(chan, Client))
- continue;
+ /* Channels, show only if client has no +I or if from is oper */
+ if(!(Client_HasMode(c, 'I')) || Client_HasMode(from, 'o')) {
+ snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
+ Client_ID(from), Client_ID(c));
+ cl2chan = Channel_FirstChannelOf(c);
+ while (cl2chan) {
+ chan = Channel_GetChannel(cl2chan);
+ assert(chan != NULL);
+
+ /* next */
+ cl2chan = Channel_NextChannelOf(c, cl2chan);
+
+ /* Secret channel? */
+ if (Channel_HasMode(chan, 's')
+ && !Channel_IsMemberOf(chan, Client))
+ continue;