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
This commit is contained in:
brain 2006-11-15 23:17:02 +00:00
parent 91f17cace8
commit 2ff0804fdb

View File

@ -37,14 +37,35 @@ static char *getlastchanname(userrec *u)
return "*"; 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 realhost = false;
bool realname = false; bool realname = false;
bool positive = true;
if (user->registered != REG_ALL) if (user->registered != REG_ALL)
return false; 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) if (opt_realname)
realname = match(user->fullname, matchtext); 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_showrealhost = false;
bool opt_unlimit = false; bool opt_unlimit = false;
bool opt_realname = false; bool opt_realname = false;
bool opt_mode = false;
chanrec *ch = NULL; chanrec *ch = NULL;
std::vector<std::string> whoresults; std::vector<std::string> whoresults;
@ -110,6 +132,9 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user)
case 'r': case 'r':
opt_realname = true; opt_realname = true;
break; break;
case 'm':
opt_mode = true;
break;
} }
*iter++; *iter++;
@ -168,7 +193,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user)
{ {
userrec* oper = *i; 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; 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++) 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; std::string wholine = initial;