]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_whois.cpp
Make rehashing messages more consistent.
[user/henk/code/inspircd.git] / src / coremods / core_whois.cpp
index 7fbaf222619de1d3185abb9477f1fbaab81e8da1..10a011ffe370a27e348fac9f036373f2b8afa268 100644 (file)
@@ -88,8 +88,14 @@ class CommandWhois : public SplitCommand
        void SendChanList(WhoisContextImpl& whois);
 
  public:
+        /** If true then all opers are shown with a generic 'is a server operator' line rather than the oper type. */
+       bool genericoper;
+
+        /** How to handle private/secret channels in the WHOIS response. */
        SplitWhoisState splitwhois;
 
+
+
        /** Constructor for whois.
         */
        CommandWhois(Module* parent)
@@ -101,7 +107,7 @@ class CommandWhois : public SplitCommand
                , lineevprov(parent, "event/whoisline")
        {
                Penalty = 2;
-               syntax = "<nick>{,<nick>}";
+               syntax = "[<servername>] <nick>[,<nick>]+";
        }
 
        /** Handle command.
@@ -235,8 +241,8 @@ void CommandWhois::DoWhois(LocalUser* user, User* dest, time_t signon, unsigned
 
        if (dest->IsOper())
        {
-               if (ServerInstance->Config->GenericOper)
-                       whois.SendLine(RPL_WHOISOPERATOR, "is an IRC operator");
+               if (genericoper)
+                       whois.SendLine(RPL_WHOISOPERATOR, "is a server operator");
                else
                        whois.SendLine(RPL_WHOISOPERATOR, InspIRCd::Format("is %s %s on %s", (strchr("AEIOUaeiou",dest->oper->name[0]) ? "an" : "a"), dest->oper->name.c_str(), ServerInstance->Config->Network.c_str()));
        }
@@ -351,14 +357,19 @@ class CoreModWhois : public Module
        {
                ConfigTag* tag = ServerInstance->Config->ConfValue("options");
                const std::string splitwhois = tag->getString("splitwhois", "no");
+               SplitWhoisState newsplitstate;
                if (stdalgo::string::equalsci(splitwhois, "no"))
-                       cmd.splitwhois = SPLITWHOIS_NONE;
+                       newsplitstate = SPLITWHOIS_NONE;
                else if (stdalgo::string::equalsci(splitwhois, "split"))
-                       cmd.splitwhois = SPLITWHOIS_SPLIT;
+                       newsplitstate = SPLITWHOIS_SPLIT;
                else if (stdalgo::string::equalsci(splitwhois, "splitmsg"))
-                       cmd.splitwhois = SPLITWHOIS_SPLITMSG;
+                       newsplitstate = SPLITWHOIS_SPLITMSG;
                else
-                       throw ModuleException(splitwhois + " is an invalid <security:splitwhois> value, at " + tag->getTagLocation()); 
+                       throw ModuleException(splitwhois + " is an invalid <options:splitwhois> value, at " + tag->getTagLocation());
+
+               ConfigTag* security = ServerInstance->Config->ConfValue("security");
+               cmd.genericoper = security->getBool("genericoper");
+               cmd.splitwhois = newsplitstate;
        }
 
        Version GetVersion() CXX11_OVERRIDE