X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_operwho.cpp;h=edb0aea4de664ca4d54c26103d15c718706dbea0;hb=2330fc9ddd48c939e894e7e37e9bb2e62eafc38d;hp=5fbd87a289ead42b021896f23b9d8ecc204d39ec;hpb=48637fb5f5f91c8dc3f072f0161879e67e81a302;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_operwho.cpp b/src/modules/m_operwho.cpp index 5fbd87a28..edb0aea4d 100644 --- a/src/modules/m_operwho.cpp +++ b/src/modules/m_operwho.cpp @@ -14,38 +14,18 @@ * --------------------------------------------------- */ -using namespace std; - /* $ModDesc: Provides an extended version of /WHO for opers */ -#include "inspircd_config.h" -#include "inspircd.h" -#include "inspircd_io.h" -#include #include -#ifdef GCC3 -#include -#else -#include -#endif -#include -#include #include -#include +#include "inspircd_config.h" #include "users.h" -#include "globals.h" #include "modules.h" #include "helperfuncs.h" #include "message.h" -#include "hashcomp.h" -#include "typedefs.h" -extern ServerConfig* Config; -extern InspIRCd* ServerInstance; extern user_hash clientlist; -extern chan_hash chanlist; extern std::vector all_opers; -extern std::vector local_users; class ModuleOperWho : public Module { @@ -61,10 +41,10 @@ class ModuleOperWho : public Module List[I_OnPreCommand] = 1; } - virtual int OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user, bool validated) + virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, bool validated) { - if (!*user->oper) + if ((!*user->oper) || (command != "WHO")) return 0; chanrec* Ptr = NULL; @@ -75,7 +55,7 @@ class ModuleOperWho : public Module for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { *tmp = 0; - Ptr = i->second->chans[0].channel; + Ptr = ((ucrec*)*(i->second->chans.begin()))->channel; if (*i->second->awaymsg) { strlcat(tmp, "G", 9); } else { @@ -91,11 +71,11 @@ class ModuleOperWho : public Module { if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*"))) { - if ((user->chans.size()) && (user->chans[0].channel)) + if ((user->chans.size()) && (((ucrec*)*(user->chans.begin()))->channel)) { for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - Ptr = i->second->chans[0].channel; + Ptr = ((ucrec*)*(i->second->chans.begin()))->channel; // suggested by phidjit and FCS if ((!common_channels(user,i->second)) && (isnick(i->second->nick))) { @@ -126,10 +106,9 @@ class ModuleOperWho : public Module Ptr = FindChan(parameters[0]); if (Ptr) { - int n_list = 0; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { - if ((has_channel(i->second,Ptr)) && (isnick(i->second->nick))) + if ((Ptr->HasUser(i->second)) && (isnick(i->second->nick))) { // Fix Bug #29 - Part 2.. *tmp = 0; @@ -150,6 +129,7 @@ class ModuleOperWho : public Module { WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } + return 1; } else { @@ -164,18 +144,19 @@ class ModuleOperWho : public Module strlcat(tmp, "H" ,9); } if (*u->oper) { strlcat(tmp, "*" ,9); } - WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && u->chans[0].channel ? u->chans[0].channel->name - : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname); + WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && ((ucrec*)*(u->chans.begin()))->channel ? ((ucrec*)*(u->chans.begin()))->channel->name + : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname); } WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); + return 1; } } if (pcnt == 2) { - if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o"))) - { + if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o"))) + { for (std::vector::iterator i = all_opers.begin(); i != all_opers.end(); i++) - { + { // If i were a rich man.. I wouldn't need to me making these bugfixes.. // But i'm a poor bastard with nothing better to do. userrec* oper = *i; @@ -185,13 +166,14 @@ class ModuleOperWho : public Module } else { strlcat(tmp, "H" ,9); } - WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && oper->chans[0].channel ? oper->chans[0].channel->name - : "*", oper->ident, oper->host, oper->server, oper->nick, tmp, oper->fullname); - } - WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); - return 1; - } + WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && ((ucrec*)*(oper->chans.begin()))->channel ? + ((ucrec*)*(oper->chans.begin()))->channel->name : "*", oper->ident, oper->host, oper->server, oper->nick, tmp, oper->fullname); + } + WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); + return 1; + } } + return 0; } virtual ~ModuleOperWho()