- return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG, Client_ID(Client), channelname);
+ IRC_SetPenalty(Client, 1);
+ if (Req->argc >= 1) {
+ /* Channel or mask given */
+ chan = Channel_Search(Req->argv[0]);
+ if (chan) {
+ /* Members of a channel have been requested */
+ IRC_SetPenalty(Client, 1);
+ return IRC_WHO_Channel(Client, chan, only_ops);
+ }
+ if (strcmp(Req->argv[0], "0") != 0) {
+ /* A mask has been given. But please note this RFC
+ * stupidity: "0" is same as no arguments ... */
+ IRC_SetPenalty(Client, 3);
+ return IRC_WHO_Mask(Client, Req->argv[0], only_ops);
+ }
+ }
+
+ /* No channel or (valid) mask given */
+ IRC_SetPenalty(Client, 2);
+ return IRC_WHO_Mask(Client, NULL, only_ops);