diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-15 23:17:02 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-15 23:17:02 +0000 |
commit | 2ff0804fdba8355269d66b087fba61060f0f7164 (patch) | |
tree | a3c7ad19ee4432d36959d6a95a7836d4a576f214 | |
parent | 91f17cace8a3ef7ae69cb9597df62c84aef8339c (diff) |
Add WHO flag 'm' to show users who have a mode sequence
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5754 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/cmd_who.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/cmd_who.cpp b/src/cmd_who.cpp index 367bdb326..81145a91c 100644 --- a/src/cmd_who.cpp +++ b/src/cmd_who.cpp @@ -37,14 +37,35 @@ static char *getlastchanname(userrec *u) return "*"; } -bool whomatch(userrec* user, const char* matchtext, bool opt_realname, bool opt_showrealhost) +bool whomatch(userrec* user, const char* matchtext, bool opt_realname, bool opt_showrealhost, bool opt_mode) { bool realhost = false; bool realname = false; + bool positive = true; if (user->registered != REG_ALL) return false; + if (opt_mode) + { + for (const char* n = matchtext; *n; n++) + { + if (*n == '+') + { + positive = true; + continue; + } + else if (*n == '-') + { + positive = false; + continue; + } + if (user->IsModeSet(*n) != positive) + return false; + } + return true; + } + if (opt_realname) realname = match(user->fullname, matchtext); @@ -75,6 +96,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) bool opt_showrealhost = false; bool opt_unlimit = false; bool opt_realname = false; + bool opt_mode = false; chanrec *ch = NULL; std::vector<std::string> whoresults; @@ -110,6 +132,9 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) case 'r': opt_realname = true; break; + case 'm': + opt_mode = true; + break; } *iter++; @@ -168,7 +193,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) { userrec* oper = *i; - if (whomatch(oper, matchtext, opt_realname, opt_showrealhost)) + if (whomatch(oper, matchtext, opt_realname, opt_showrealhost, opt_mode)) { std::string wholine = initial; @@ -202,7 +227,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user) { for (user_hash::iterator i = ServerInstance->clientlist.begin(); i != ServerInstance->clientlist.end(); i++) { - if (whomatch(i->second, matchtext, opt_realname, opt_showrealhost)) + if (whomatch(i->second, matchtext, opt_realname, opt_showrealhost, opt_mode)) { std::string wholine = initial; |