]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_operwho.cpp
Add m_sqlutils - Currently provides ID->chan/user lookups
[user/henk/code/inspircd.git] / src / modules / m_operwho.cpp
index 15ff74c6d4be96761c6e0f8223b0c3eb10d26019..edb0aea4de664ca4d54c26103d15c718706dbea0 100644 (file)
  * ---------------------------------------------------
  */
 
-using namespace std;
-
-/*
- * DEVOICE module for InspIRCd
- *  Syntax: /DEVOICE <#chan>
- */
-
 /* $ModDesc: Provides an extended version of /WHO for opers */
 
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "inspircd_io.h"
-#include <time.h>
 #include <string>
-#ifdef GCC3
-#include <ext/hash_map>
-#else
-#include <hash_map>
-#endif
-#include <map>
-#include <sstream>
 #include <vector>
-#include <deque>
+#include "inspircd_config.h"
 #include "users.h"
-#include "globals.h"
 #include "modules.h"
 #include "helperfuncs.h"
-#include "hashcomp.h"
-#include "typedefs.h"
+#include "message.h"
 
-extern ServerConfig* Config;
-extern InspIRCd* ServerInstance;
 extern user_hash clientlist;
-extern chan_hash chanlist;
 extern std::vector<userrec*> all_opers;
-extern std::vector<userrec*> local_users;
 
 class ModuleOperWho : public Module
 {
@@ -65,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;
@@ -79,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 {
@@ -95,12 +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))
                                {
-                                       int n_list = 0;
                                        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)))
                                                {
@@ -131,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;
@@ -155,6 +129,7 @@ class ModuleOperWho : public Module
                                {
                                        WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]);
                                }
+                               return 1;
                        }
                        else
                        {
@@ -169,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<userrec*>::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;
@@ -190,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()