From 2ff0804fdba8355269d66b087fba61060f0f7164 Mon Sep 17 00:00:00 2001 From: brain Date: Wed, 15 Nov 2006 23:17:02 +0000 Subject: 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 --- src/cmd_who.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/cmd_who.cpp') 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 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; -- cgit v1.2.3