diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd_who.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cmd_who.cpp b/src/cmd_who.cpp index 81145a91c..508956c44 100644 --- a/src/cmd_who.cpp +++ b/src/cmd_who.cpp @@ -82,6 +82,19 @@ extern "C" command_t* init_command(InspIRCd* Instance) return new cmd_who(Instance); } +bool cmd_who::CanView(chanrec* chan, userrec* user) +{ + /* Execute items in fastest-to-execute first order */ + if (*user->oper) + return true; + else if (!chan->IsModeSet('s') && !chan->IsModeSet('p')) + return true; + else if (chan->HasUser(user)) + return true; + + return false; +} + CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) { /* @@ -145,7 +158,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) /* who on a channel? */ ch = ServerInstance->FindChan(matchtext); - if (ch) + if ((ch) && (CanView(ch,user))) { /* who on a channel. */ CUList *cu = ch->GetUsers(); |